Latest web development tutorials

Lua debugowania (Debug)

Lua udostępnia bibliotekę debugowania za dostarczenie nam stworzyć niestandardowe funkcje konwertera. Sam Lua nie posiada wbudowany regulator, ale wielu deweloperów dzielić ich gubernator kod Lua.

Lua w bibliotece debugowania obejmuje następujące funkcje:

sethook ([wątku,], hak, maska [policzyć]):
Nie. Metoda & Purpose
1. debug ():

Wprowadź tryb interaktywny użytkownika, bieganie każdy łańcuch wprowadzoną przez użytkownika. Za pomocą prostych poleceń i inne ustawienia debugowania, użytkownik może przeglądać globalne i lokalne zmienne, należy zmienić wartości zmiennych, aby obliczyć liczbę wyrażeń, i tak dalej.
Linia wejściowa String zawierające tylko cd zakończy tę funkcję, tak, że rozmówca może kontynuować jazdę w dół.

2. getfenv (object):

Zwraca obiekt zmienną środowiskową.

3. gethook (opcjonalnie gwintu):

Zwraca reprezentują trzy hak wątku zestaw: bieżącej funkcji hak, obecny maski hak, a prąd liczyć haka

4. getinfo ([wątku,] f [ co]):

Informacje na temat funkcji zwraca tabelę. Można podać tę funkcję, można również użyć cyfrowego reprezentację funkcji f. Cyfrowa funkcja f reprezentuje uruchomiony na stosie wywołań we wskazanej wątku odpowiadającego poziomach: poziom 0 wskazuje aktualną funkcję (getinfo sobie); 1 warstwa wskazuje, że funkcja połączeń getinfo (chyba, że ​​jest to koniec rozmowy, sytuacja ta nie jest wliczona w stosie), itd. , Jeśli f jest funkcją liczby czynności niż większej liczby, GetInfo powraca zero.

5. debug.getlocal ([wątku,] f, lokalne):

Funkcja ta zwraca nazwę oraz wartość indeksu warstwy stosu funkcji F dla lokalnych zmiennych lokalnych. Funkcja ta jest używana tylko do dostępu do zmiennych lokalnych wyraźnie zdefiniowane, w tym parametrów, zmiennych tymczasowych.

6. getmetatable (wartości):

Podane punkty indeks do wartości elementów tabeli na stos. Jeśli indeks jest nieprawidłowy lub wartość juana ma stół, funkcja zwraca 0 i nie naciskać nic do stosu.

7. getregistry ():

Powrót tabeli rejestru, która jest poza ustalonym tabeli mogą być wykorzystane, aby zapisać dowolny kod C chcesz zapisać wartość Lua.

8. getupvalue (f, w górę)

Ta funkcja zwraca nazwy i wartości funkcji F pierwszy się na wartościach. Jeśli nie ma to miejsce na tej wartości, to zwraca zera.
W '(' (otwarte nawiasy) reprezentuje zmienną nazwisko rozpoczynające bez nazwy zmiennej (z wyjątkiem do debugowania informacje bloku kodu).

10. Będzie ona funkcjonować jako hak ustawić pod. Maska String a licznik cyfrowy określa hak będzie wywoływana kiedy. Maska jest kombinacją następujących znaków w ciąg, każda postać ma swoje własne znaczenie:

  • ' c ': Ilekroć Lua wywołuje funkcję, zadzwoń hak;
  • ' r ': za każdym razem, Lua wraca z funkcja jest wywoływana, gdy hak;
  • ' l ': za każdym razem, Lua wprowadzi nową linię, należy zadzwonić pod hak.
11. setlocal ([wątku,] Poziom, lokalnym, wartość):

Funkcja ta będzie pierwsza wartość lokalna przypisane do lokalnej zmiennej funkcji warstwy poziomu pierwszego stosu. Jeśli nie masz tej zmiennej, funkcja zwraca zero. Jeśli na poziomie transgranicznym, rzucać błąd.

12. setmetatable (wartość, tabela):

Wartość nastawy elementem stół (może być zerowa). Wartość zwracana.

13. setupvalue (f, w górę, wartość) :

Ta funkcja najpierw ustawić wartość od wartości funkcji F. Jeśli nie ma tej funkcji na wartości, zwraca zero w przeciwnym wypadku zwraca nazwę poprzednich wartości.

14. traceback ([wątku,] [wiadomość [, poziom]]):

Jeśli masz wiadomość, a nie ciąg lub zerowa, funkcję bez żadnego leczenia bezpośrednio z powrotem wiadomość. W przeciwnym wypadku zwraca informacje stosu Traceback wywołanie stosu. Opcjonalnie wiadomość łańcuch jest dodawany na początku informacji stosu Traceback. Opcje cyfrowe określonego poziomu, z którego warstwa stosu zaczęły backtracking (domyślnie jest to 1, w którym wzywa się gdzie traceback).

Stół jest nasza wspólna funkcja debugowania, to możemy spojrzeć na kilka prostych przykładów:

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

Wykonaj powyższe wyniki wyjściowe Kod:

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

W tym przykładzie używamy traceback i GetInfo funkcji bibliotecznych Debug getinfo Funkcja zwraca informacje funkcji tabeli.

Innym przykładem

Często trzeba debugowania zmienne lokalne wewnątrz funkcji. Możemy użyć funkcji getupvalue ustawić te zmienne lokalne. Przykłady są następujące:

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

Wykonaj powyższe wyniki wyjściowe Kod:

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

W powyższym przykładzie, licznik będzie zwiększany za każdym razem połączenie 1. Przykłady użyliśmy funkcji getupvalue aby zobaczyć aktualny stan zmiennych lokalnych. Możemy ustawić zmienną lokalną do nowej wartości. Przykład, przed ustawieniem n oznacza 2, należy użyć funkcji setupvalue ustawić go do 10. Teraz możemy wywołać funkcję po wykonaniu wyjścia jest 11 zamiast 3.


Rodzaj debugowania

  • Wiersza polecenia debugera
  • Graficzny debugger

Command-line debugger posiada: RemDebug, clidebugger, ctrace, xdbLua, LuaInterface - Debugger, Rldb, ModDebug.

Graficzny interfejs debugger posiada: SciTE, Decoda, ZeroBrane Studio, akdebugger, luaedit.