Biblioteka debug w szczegółach
Proszę używać debug.traceback, getinfo, getlocal i getupvalue do introspekcji.
Biblioteka debug w szczegółach to bezpłatna lekcja Lua Academy na CoddyKit. To lekcja 1 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.
Omówienie biblioteki debug
Biblioteka debug to zestaw narzędzi Lua do introspekcji. Umożliwia sprawdzanie i modyfikowanie stanu wykonawczego dowolnej funkcji, korutyny lub ramki stosu.
Szczegółowe omówienie debug.getinfo
debug.getinfo(f, what) przyjmuje flagi what: "n" (nazwa), "S" (źródło), "l" (bieżący wiersz), "u" (upvalue), "f" (odwołanie do funkcji).
local function foo()
local info = debug.getinfo(1, "nSlu")
print(info.name) -- foo
print(info.short_src) -- source file
print(info.currentline) -- line number
print(info.nups) -- number of upvalues
end
foo()Sprawdzanie zmiennych lokalnych
debug.getlocal(level, n) zwraca nazwę i wartość n-tej zmiennej lokalnej na danym poziomie stosu. Poziom 1 oznacza bieżącą funkcję.
local function example()
local x, y = 10, 20
local i = 1
while true do
local name, val = debug.getlocal(1, i)
if not name then break end
print(name, val)
i = i + 1
end
end
example() -- x 10 / y 20Modyfikowanie zmiennych lokalnych
debug.setlocal(level, n, value) zmienia w czasie wykonywania wartość zmiennej lokalnej — to potężne narzędzie do debugowania i testowania.
Sprawdzanie upvalue
debug.getupvalue(fn, n) zwraca nazwę i wartość n-tego upvalue funkcji. Iteruj, zwiększając n, aż zostanie zwrócona wartość nil.
local count = 0
local function inc() count = count + 1 end
print(debug.getupvalue(inc, 1)) -- count 0
debug.setupvalue(inc, 1, 99)
inc()
print(count) -- 100Przechodzenie po stosie
Przejdź przez cały stos wywołań, zwiększając poziom, aż debug.getinfo zwróci nil.
local function printStackTrace()
local level = 1
while true do
local info = debug.getinfo(level, "Sln")
if not info then break end
print(level, info.short_src, info.currentline, info.name)
level = level + 1
end
enddebug.traceback
debug.traceback(msg, level) zwraca sformatowany ciąg znaków ze śladem stosu. To najbardziej praktyczna funkcja debugowania do obsługi błędów w środowisku produkcyjnym.
Sprawdzanie korutyn
Przekaż korutynę jako pierwszy argument funkcji debug.getinfo, aby sprawdzić jej stos.
local co = coroutine.create(function()
print(debug.getinfo(1, "l").currentline)
end)
coroutine.resume(co)debug.sethook do śledzenia
Śledź wszystkie wywołania funkcji w programie, ustawiając hook wywołań, który wypisuje nazwy funkcji.
debug.sethook(function(event)
if event == "call" then
local info = debug.getinfo(2, "Sn")
print("CALL:", info.name or "?")
end
end, "c")Przenośne asercje
Użyj debug.getinfo(2, "Sl"), aby uwzględnić informacje o pliku i wierszu w błędach asercji.
local function assert2(cond, msg)
if not cond then
local info = debug.getinfo(2, "Sl")
error(("[%s:%d] %s"):format(info.short_src, info.currentline, msg), 2)
end
endOstrzeżenie
Biblioteka debug może naruszać enkapsulację, znacznie spowalniać programy (zwłaszcza debug.sethook) i nie jest dostępna we wszystkich środowiskach. Używaj jej wyłącznie podczas programowania i testowania.
Pytanie o bibliotekę debug
Co zwraca debug.getupvalue(fn, 1)?
Podsumowanie: biblioteka debug — szczegółowe omówienie
Biblioteka debug zapewnia sprawdzanie stosu (getinfo), sprawdzanie i modyfikowanie zmiennych lokalnych (getlocal/setlocal), dostęp do upvalue (getupvalue/setupvalue) oraz śledzenie za pomocą hooków (sethook). Używaj jej odpowiedzialnie i wyłącznie podczas programowania.
Często zadawane pytania
Czy lekcja „Biblioteka debug w szczegółach” jest bezpłatna?
Tak — pełny tekst „Biblioteka debug w szczegółach” 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 w szczegółach”?
Proszę używać debug.traceback, getinfo, getlocal i getupvalue do introspekcji. Ć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 1 z 4.
Ile czasu zajmuje lekcja „Biblioteka debug w szczegółach”?
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.
Wszystkie lekcje w tym kursie
- Biblioteka debug w szczegółach
- Zdalne debugowanie za pomocą MobDebug
- Profilowanie za pomocą LuaProfiler
- Pokrycie kodu i instrumentacja testów