Latest web development tutorials

Lua debugging (debug)

Lua prevede libreria di debug per la fornitura a creare un funzioni convertitore personalizzato. Lua sé non ha un governatore built-in, ma molti sviluppatori condividono il loro governatore codice Lua.

Lua nella libreria di debug comprende le seguenti funzioni:

sethook ([thread,] gancio, maschera [, count]):
No. Metodo & Purpose
1. debug ():

Inserire una modalità interattiva utente, in esecuzione ogni stringa inserita dall'utente. Utilizzando semplici comandi e altre impostazioni di debug, l'utente può rivedere le variabili globali e locali, modificare i valori delle variabili per calcolare un numero di espressioni, e così via.
linea di ingresso stringa contenente solo cont si concluderà questa funzione, in modo che il chiamante possa continuare a correre giù.

2. getfenv (oggetto):

Restituisce Object variabile d'ambiente.

3. gethook (filettatura opzionale):

Ritorni rappresentano tre serie di ganci filo: la funzione corrente gancio, la maschera gancio corrente, e il conteggio corrente gancio

4. GetInfo ([thread,] f [ , cosa]):

Informazioni sulla funzione restituisce una tabella. È possibile fornire questa funzione, è possibile utilizzare anche una rappresentazione digitale della funzione f. funzione Digital f rappresenta esecuzione sul stack di chiamate del thread determinata corrispondente a livelli: livello 0 indica la funzione (getinfo stesso); 1 livello indica che la chiamata di funzione getinfo (a meno che non è la fine della chiamata, questa situazione non è incluso nella pila); etc. . Se f è una funzione del numero di attività rispetto al numero più grande, getInfo ritorna nil.

5. debug.getlocal ([thread,] F, locale):

Questa funzione restituisce il nome e il valore dell'indice dello strato pila funzione f per le variabili locali locali. Questa funzione viene utilizzata solo per accedere alle variabili locali esplicitamente definite, compresi i parametri, variabili temporanee.

6. getmetatable (valore):

I dati punti indice per i valori degli elementi tabella nello stack. Se l'indice è valido o il valore dello yuan è tabella, la funzione restituisce 0 e non spinge nulla alla pila.

7. getregistry ():

tavolo registro posteriore, che è fuori di una tabella predefinita può essere utilizzato per salvare qualsiasi codice C che si desidera salvare il valore Lua.

8. getupvalue (f, su)

Questa funzione restituisce i nomi ei valori della funzione f il primo su valori. Se ciò non avviene su tale valore, restituisce nil.
In '(' (parentesi aperte) rappresentano il nome della variabile inizia con alcun nome di variabile (ad eccezione di eseguire il debug delle informazioni blocco di codice).

10. Esso funziona come un gancio fissato in. maschera String e il conteggio digitale determina il gancio verrà chiamato quando. La maschera è una combinazione dei seguenti caratteri in una stringa, ogni carattere ha il suo significato:

  • ' c ': Ogni volta che Lua chiama una funzione, chiamare il gancio;
  • ' r ': ogni volta Lua ritorna da una funzione viene chiamata quando il gancio;
  • ' l ': ogni volta Lua entra in una nuova linea, chiamare il gancio.
11. setlocal (livello [thread,], locali, valore):

Questa funzione sarà il primo valore locale assegnato alla funzione strato di livello variabile locale prima pila. Se non si dispone di quella variabile, la funzione restituisce zero. Se il livello transfrontaliero, genera un errore.

12. SetMetaTable (valore, tabella):

Il valore della tabella riportata tavolo elemento (può essere pari a zero). Valore di ritorno.

13. setupvalue (f, su, valore) :

Questa funzione prima impostare un valore sul valore della funzione f. Se non si dispone di tale funzione su un valore, restituisce nullo in caso contrario, restituisce il nome dei valori precedenti.

14. traceback ([thread,] [messaggio [, livello]]):

Se si dispone di un messaggio, e non una stringa o nullo, la funzione senza alcun trattamento direttamente indietro messaggio. In caso contrario, restituisce lo stack di chiamate informazioni di stack traceback. stringa di messaggio opzionale viene aggiunto all'inizio delle informazioni dello stack traceback. opzioni digitali livello specificato dalla quale pila dei livelli iniziato backtracking (di default è 1, che chiama dove traceback di).

La tabella è la nostra funzione comune di debug, allora possiamo guardare alcuni semplici esempi:

function myfunction ()
print(debug.traceback("Stack trace"))
print(debug.getinfo(1))
print("Stack trace end")
	return 10
end
myfunction ()
print(debug.getinfo(1))

Eseguire i risultati di output di codice di cui sopra:

Stack trace
stack traceback:
	test2.lua:2: in function 'myfunction'
	test2.lua:8: in main chunk
	[C]: ?
table: 0054C6C8
Stack trace end

Nell'esempio, si usa il traceback e GetInfo funzioni di libreria di debug, getinfo funzione restituisce informazioni funzione di tabella.

Un altro esempio

Abbiamo spesso bisogno di eseguire il debug di variabili locali all'interno di una funzione. Possiamo usare la funzione getupvalue per impostare queste variabili locali. Esempi sono i seguenti:

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())

Eseguire i risultati di output di codice di cui sopra:

1
2
index	1	k	=	1
index	2	n	=	2
11

Nell'esempio precedente, il contatore viene incrementato ogni volta che una chiamata 1. Esempi abbiamo usato la funzione getupvalue per visualizzare lo stato attuale delle variabili locali. Siamo in grado di impostare una variabile locale per un nuovo valore. Esempio, prima di impostare n è 2, utilizzare la funzione setupvalue impostarlo su 10. Ora noi chiamiamo la funzione dopo l'esecuzione della produzione è 11 invece di 3.


Tipo debug

  • debugger a linea di comando
  • debugger grafico

debugger a linea di comando è: RemDebug, clidebugger, ctrace, xdbLua, LuaInterface - Debugger, Rldb, ModDebug.

debugger interfaccia grafica ha: SciTE, Decoda, ZeroBrane Studio, akdebugger, LuaEdit.