Najlepszy samouczek Lua debugowania (Debug) W 2024 r. W tym samouczku możesz dowiedzieć się Rodzaj debugowania,
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. |
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. | 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.
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.
Command-line debugger posiada: RemDebug, clidebugger, ctrace, xdbLua, LuaInterface - Debugger, Rldb, ModDebug.
Graficzny interfejs debugger posiada: SciTE, Decoda, ZeroBrane Studio, akdebugger, luaedit.