0Pricing
Lua Academy · Lekcja

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 20

Modyfikowanie 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)  -- 100

Przechodzenie 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
end

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

Ostrzeż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

  1. Biblioteka debug w szczegółach
  2. Zdalne debugowanie za pomocą MobDebug
  3. Profilowanie za pomocą LuaProfiler
  4. Pokrycie kodu i instrumentacja testów
← Powrót do Lua Academy