0Pricing
Lua Academy · Lekcja

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

debug.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.

Wszystkie lekcje w tym kursie

  1. Funkcje biblioteki math
  2. Funkcje biblioteki table
  3. Biblioteki os i io
  4. Biblioteka debug
← Powrót do Lua Academy