Biblioteka debug
Proszę analizować ślady stosu, zmienne lokalne i upvalues za pomocą biblioteki debug.
Biblioteka debug to bezpłatna lekcja Lua Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Lua Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Lua Academy zawiera 4 lekcji w sumie.
Czym jest biblioteka debug?
Biblioteka debug zapewnia niskopoziomowy dostęp do elementów wewnętrznych Lua: ramek stosu, zmiennych lokalnych, upvalues, hooków i stanu coroutine. Należy używać jej do debugowania, a nie w logice produkcyjnej.
debug.traceback
debug.traceback(msg, level) zwraca ciąg znaków zawierający stos wywołań. Często przekazuje się ją do xpcall jako procedurę obsługi błędów.
local ok, err = xpcall(function()
error("something went wrong")
end, debug.traceback)
print(err)debug.getinfo
debug.getinfo(fn, what) zwraca tabelę z informacjami o funkcji: nazwą, źródłem, wierszem definicji i innymi danymi.
local function foo() end
local info = debug.getinfo(foo, "Sl")
print(info.source, info.linedefined)Inspekcja poziomu stosu
Proszę przekazać liczbę całkowitą do debug.getinfo, aby sprawdzić konkretną ramkę stosu. Poziom 1 oznacza bieżącą funkcję, a 2 — funkcję wywołującą.
local function where()
local info = debug.getinfo(2, "Sl")
return info.short_src .. ":" .. info.currentline
end
print(where())debug.getlocal i debug.setlocal
debug.getlocal(level, n) zwraca nazwę i wartość n-tej zmiennej lokalnej w ramce stosu.
local function example()
local x = 42
print(debug.getlocal(1, 1)) -- x 42
end
example()debug.getupvalue i debug.setupvalue
Funkcje te pozwalają sprawdzać i modyfikować upvalues funkcji. getupvalue(fn, n) zwraca nazwę i wartość.
local x = 10
local function f() return x end
print(debug.getupvalue(f, 1)) -- x 10
debug.setupvalue(f, 1, 99)
print(f()) -- 99debug.sethook
debug.sethook(fn, mask, count) ustawia hook wywoływany podczas zdarzeń: "c" (wywołanie), "r" (powrót), "l" (wiersz) lub co N instrukcji.
local calls = 0
debug.sethook(function() calls = calls + 1 end, "c")
-- ... run some code ...
debug.sethook() -- remove hook
print("calls:", calls)debug.getmetatable
debug.getmetatable(obj) pobiera metatabelę nawet wtedy, gdy getmetatable jest blokowane przez pole __metatable.
debug.upvalueid i upvaluejoin
debug.upvalueid(fn, n) zwraca unikatowy identyfikator upvalue. debug.upvaluejoin(f1,n1,f2,n2) sprawia, że współdzielą one tę samą komórkę.
Uwaga: zagrożenia związane z biblioteką debug
Biblioteka debug może naruszać enkapsulację i łamać niezmienniki. Nigdy nie należy używać jej w kodzie produkcyjnym. Powinna służyć wyłącznie do testów, profilowania i tworzenia narzędzi programistycznych.
debug.traceback w xpcall
Najczęstszym bezpiecznym zastosowaniem debug w kodzie produkcyjnym jest przekazanie debug.traceback do xpcall jako procedury obsługi błędów, aby uzyskać szczegółowe komunikaty.
Pytanie o bibliotekę debug
Jaka funkcja debug jest bezpieczna i często używana w produkcyjnej obsłudze błędów?
Podsumowanie: biblioteka debug
Biblioteka debug udostępnia ramki stosu, zmienne lokalne, upvalues i hooki. Proszę używać debug.traceback z xpcall, aby uzyskiwać szczegółowe informacje o błędach; pozostałe funkcje należy traktować jako narzędzia introspekcji przeznaczone wyłącznie dla programistów.
Często zadawane pytania
Czy lekcja „Biblioteka debug” jest bezpłatna?
Tak — pełny tekst „Biblioteka debug” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Lua Academy, przejdź na CoddyKit PRO. Kurs Lua Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Biblioteka debug”?
Proszę analizować ślady stosu, zmienne lokalne i upvalues za pomocą biblioteki debug. Ćwiczysz Lua Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Lua Academy?
Nie wymagamy żadnego doświadczenia. Lua Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Biblioteka debug”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Lua Academy?
Tak. Każda lekcja Lua Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.