Die debug-Bibliothek
Untersuchen Sie Stacktraces, lokale Variablen und Upvalues mit der debug-Bibliothek
Die debug-Bibliothek ist eine kostenlose Lua Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Lua Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.
Was ist die debug-Bibliothek?
Die debug-Bibliothek ermöglicht den Zugriff auf interne Lua-Strukturen auf niedriger Ebene: Stack-Frames, lokale Variablen, Upvalues, Hooks und Coroutine-Zustände. Verwenden Sie sie zum Debuggen, nicht für Produktionslogik.
debug.traceback
debug.traceback(msg, level) gibt eine Zeichenkette mit dem Aufruf-Stack zurück. Häufig wird die Funktion als Fehlerbehandler an xpcall übergeben.
local ok, err = xpcall(function()
error("something went wrong")
end, debug.traceback)
print(err)debug.getinfo
debug.getinfo(fn, what) gibt eine Tabelle mit Informationen über eine Funktion zurück: Name, Quelle, definierende Zeile usw.
local function foo() end
local info = debug.getinfo(foo, "Sl")
print(info.source, info.linedefined)Stack-Ebene untersuchen
Übergeben Sie eine Ganzzahl an debug.getinfo, um einen bestimmten Stack-Frame zu untersuchen. Ebene 1 ist die aktuelle Funktion, Ebene 2 der Aufrufer.
local function where()
local info = debug.getinfo(2, "Sl")
return info.short_src .. ":" .. info.currentline
end
print(where())debug.getlocal und debug.setlocal
debug.getlocal(level, n) gibt den Namen und den Wert der n-ten lokalen Variablen in einem Stack-Frame zurück.
local function example()
local x = 42
print(debug.getlocal(1, 1)) -- x 42
end
example()debug.getupvalue und debug.setupvalue
Untersuchen und ändern Sie die Upvalues einer Funktion. getupvalue(fn, n) gibt Name und Wert zurück.
local x = 10
local function f() return x end
print(debug.getupvalue(f, 1)) -- x 10
debug.setupvalue(f, 1, 99)
print(f()) -- 99debug.sethook
debug.sethook(fn, mask, count) setzt einen Hook, der bei Ereignissen aufgerufen wird: "c" (Aufruf), "r" (Rückgabe), "l" (Zeile) oder alle N Anweisungen.
local calls = 0
debug.sethook(function() calls = calls + 1 end, "c")
-- ... run some code ...
debug.sethook() -- remove hook
print("calls:", calls)debug.getmetatable
debug.getmetatable(obj) ruft die Metatabelle ab, selbst wenn getmetatable durch ein __metatable-Feld blockiert wird.
debug.upvalueid und upvaluejoin
debug.upvalueid(fn, n) gibt einen eindeutigen Bezeichner für ein Upvalue zurück. debug.upvaluejoin(f1,n1,f2,n2) lässt beide dieselbe Speicherzelle verwenden.
Achtung: Risiken der debug-Bibliothek
Die debug-Bibliothek kann die Kapselung verletzen und Invarianten zerstören. Verwenden Sie sie niemals in Produktionscode. Beschränken Sie ihren Einsatz auf Tests, Profiling und Entwicklungswerkzeuge.
debug.traceback in xpcall
Die häufigste produktionssichere Verwendung von debug besteht darin, debug.traceback als Fehlerbehandler an xpcall zu übergeben, um ausführliche Fehlermeldungen zu erhalten.
Frage zur debug-Bibliothek
Welche Debug-Funktion ist sicher und wird häufig in der Fehlerbehandlung von Produktionscode verwendet?
Zusammenfassung: debug-Bibliothek
Die debug-Bibliothek stellt Stack-Frames, lokale Variablen, Upvalues und Hooks bereit. Verwenden Sie debug.traceback mit xpcall für ausführliche Fehlermeldungen; betrachten Sie den Rest als ausschließlich für Entwickler bestimmte Werkzeuge zur Introspektion.
Häufig gestellte Fragen
Ist die Lektion „Die debug-Bibliothek“ kostenlos?
Ja — der vollständige Text von „Die debug-Bibliothek“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Lua Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Die debug-Bibliothek“?
Untersuchen Sie Stacktraces, lokale Variablen und Upvalues mit der debug-Bibliothek Du übst Lua Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Lua Academy zu starten?
Keine Vorkenntnisse erforderlich. Lua Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Die debug-Bibliothek“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Lua Academy-Lektion Code schreiben und ausführen?
Ja. Jede Lua Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Funktionen der math-Bibliothek
- Funktionen der table-Bibliothek
- Die Bibliotheken os und io
- Die debug-Bibliothek