Latest web development tutorials

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:

sethook ([thread,] Hook, Maske [, count]):
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.
String Eingabezeile nur cont enthält, wird diese Funktion zu beenden, so dass der Anrufer weiterlaufen kann nach unten.

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.
In '(' (offene Klammern) stellen den Variablennamen ohne Variablennamen beginnen (außer zu debuggen den Codeblock Information).

10. 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:

  • ' c ': Jedes Mal , wenn Lua eine Funktion aufruft, rufen Sie den Haken;
  • ' r ': jedes Mal , Lua aus einer Funktion zurückkehrt wird aufgerufen , wenn der Haken;
  • ' l ': jedes Mal , Lua eine neue Linie eintritt, rufen Sie den Haken.
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.