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:
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. |
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. |
10. | sethook ([wątku,], hak, maska [policzyć]): 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:
|
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.