Lua-Debugging (Debug)
Lua bietet Debug-Bibliothek für die Bereitstellung von uns eine benutzerdefinierte Konverter Funktionen erstellen. Lua selbst nicht über einen eingebauten in Gouverneur, aber viele Entwickler teilen Lua Code ihren Gouverneur.
Lua in den Debug-Bibliothek umfasst die folgenden Funktionen:
Nein. | Methode und Zweck |
---|---|
1. | debug (): Geben Sie einen Benutzer interaktiven Modus, jede Zeichenfolge vom Benutzer eingegebene läuft. Mit einfachen Befehlen und andere Debug-Einstellungen kann der Benutzer die globalen und lokalen Variablen überprüfen, die Werte von Variablen ändern, um eine Anzahl von Ausdrücken zu berechnen, und so weiter. |
2. | getfenv (Objekt): Rückgabewerte Object-Umgebungsvariable. |
3. | gethook (optional Gewinde): Returns stellen drei Fadenhaken Satz: die aktuelle Hook-Funktion, die aktuelle Hook-Maske und die aktuelle Hakenzahl |
4. | getinfo ([thread,] f [ , was]): Informationen über die Funktion liefert eine Tabelle. Sie können diese Funktion zur Verfügung stellen, können Sie auch eine digitale Darstellung der Funktion f verwenden. Digitale Funktion f repräsentiert auf dem angegebenen Thread des Call-Stack läuft entsprechend Stufen: Stufe 0 zeigt die aktuelle Funktion (getinfo selbst); 1 Schicht zeigt an, dass der Anruf getinfo Funktion (es sei denn, es ist das Ende des Anrufs ist, wird diese Situation nicht im Stapel enthalten sind); usw. . Wenn f eine Funktion der Anzahl von Aktivitäten als die größere Zahl ist, getInfo gibt nil zurück. |
5. | debug.getlocal ([thread,] f, Land): Diese Funktion gibt den Namen und den Wert des Index der Funktion f Schichtstapel für lokale lokalen Variablen. Mit dieser Funktion wird nur die lokalen Variablen explizit definiert zuzugreifen, einschließlich Parameter, temporäre Variablen. |
6. | getmetatable (Wert): Die angegebenen Indexpunkte auf den Tabellenelementwerte auf den Stapel. Wenn der Index ungültig ist, oder der Wert des Yuan ist keine Tabelle, gibt die Funktion 0 und drücken Sie nicht alles auf den Stapel. |
7. | getregistry (): Zurück Registrierungstabelle, die aus einer vorgegebenen Tabelle kann eine beliebige C-Code Sie Lua Wert speichern möchten zu speichern verwendet werden. |
8. | getupvalue (f, up) Diese Funktion gibt die Namen und Werte der Funktion f die erste auf Werte auf. Wenn dies nicht auf diesen Wert, gibt er Null. |
10. | sethook ([thread,] Hook, Maske [, count]): Es funktioniert wie ein Haken in gesetzt. String-Maske und die digitale Zählung bestimmt die Haken, wenn sie aufgerufen wird. Die Maske ist eine Kombination der folgenden Zeichen in einer Zeichenkette, jedes Zeichen eine eigene Bedeutung hat:
|
11. | setlocal ([thread,] Ebene, lokale, Wert): Mit dieser Funktion wird der erste lokale Wert auf den ersten Stapel lokale Variable Ebene Layer-Funktion zugeordnet werden. Wenn Sie nicht über diese Variable haben, gibt die Funktion Null. Wenn die grenzüberschreitend, einen Fehler aus. |
12. | setmetatable (Wert, Tabelle): Der Wert der Elementtabelle Satztabelle (kann null sein). Rückgabewert. |
13. | setupvalue (f, bis, Wert) : Diese Funktion wird zunächst einen Wert auf dem Wert der Funktion f einzurichten. Wenn Sie auf einen Wert, der Funktion nicht haben, gibt es Null sonst, den Namen der vorherigen Werte zurückgibt. |
14. | Traceback ([thread,] [Nachricht [, level]]): Wenn Sie eine Nachricht, und kein String oder null, Funktion ohne Behandlung direkt zurück Nachricht. Andernfalls gibt sie den Call-Stack Stapel Zurückverfolgungsinformationen. Optional Nachrichtenkette wird am Anfang des Stapels Zurückverfolgungsinformationen hinzugefügt. Digitale Optionen festgelegten Wert, von dem Schichtstapel begann Rückzieher (Standard ist 1, welche Anrufe, wo Zurückverfolgungs von). |
Die Tabelle ist unsere gemeinsame Debug-Funktion, dann können wir an einigen einfachen Beispielen:
function myfunction () print(debug.traceback("Stack trace")) print(debug.getinfo(1)) print("Stack trace end") return 10 end myfunction () print(debug.getinfo(1))
Führen Sie die oben genannten Code Ausgabeergebnisse:
Stack trace stack traceback: test2.lua:2: in function 'myfunction' test2.lua:8: in main chunk [C]: ? table: 0054C6C8 Stack trace end
Im Beispiel verwenden wir die Traceback und GetInfo Debug-Library-Funktionen, gibt getinfo Funktion eine Tabelle Funktionsinformationen.
Ein weiteres Beispiel
Wir müssen häufig lokale Variablen in einer Funktion zu debuggen. Wir können getupvalue Funktion verwenden, um diese lokalen Variablen zu setzen. Beispiele sind wie folgt:
function newCounter () local n = 0 local k = 0 return function () k = n n = n + 1 return n end end counter = newCounter () print(counter()) print(counter()) local i = 1 repeat name, val = debug.getupvalue(counter, i) if name then print ("index", i, name, "=", val) if(name == "n") then debug.setupvalue (counter,2,10) end i = i + 1 end -- if until not name print(counter())
Führen Sie die oben genannten Code Ausgabeergebnisse:
1 2 index 1 k = 1 index 2 n = 2 11
In dem obigen Beispiel wird der Zähler jedesmal, wenn ein Anruf 1 erhöht werden. Beispiele verwendeten wir getupvalue Funktion den aktuellen Status von lokalen Variablen anzuzeigen. Wir können eine lokale Variable auf einen neuen Wert gesetzt. Beispiel, bevor n Einstellung 2 ist, verwenden setupvalue Funktion es auf 10 festgelegt. Nun rufen wir die Funktion nach der Ausführung des Ausgangs 11 statt 3.
Debugging Typ
- Befehlszeilen-Debugger
- grafischer Debugger
Kommandozeilen-Debugger hat: RemDebug, clidebugger, ctrace, xdbLua, LuaInterface - Debugger, Rldb, ModDebug.
Grafische Oberfläche Debugger hat: SciTE, Decoda, ZeroBrane Studio, akdebugger, luaedit.