Lua Academy · Lektion

Biblioteket debug

Inspektera stackspårningar, lokala variabler och upvalues med biblioteket debug.

Lektion 4 av 413 steg

Biblioteket debug är en gratis lektion i Lua Academy på CoddyKit. Detta är lektion 4 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Lua Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Lua Academy innehåller totalt 4 lektioner.

Vad är debug-biblioteket?

debug-biblioteket ger lågnivååtkomst till Lua-interna delar: stackramar, lokala variabler, upvalues, hooks och coroutine-tillstånd. Använd det för felsökning, inte i produktionslogik.

debug.traceback

debug.traceback(msg, level) returnerar en sträng med anropsstacken. Den skickas ofta till xpcall som felhanterare.

local ok, err = xpcall(function()
  error("something went wrong")
end, debug.traceback)
print(err)

debug.getinfo

debug.getinfo(fn, what) returnerar en tabell med information om en funktion: namn, källa, raden där den definierades med mera.

local function foo() end
local info = debug.getinfo(foo, "Sl")
print(info.source, info.linedefined)

Inspektera stacknivåer

Skicka ett heltal till debug.getinfo för att inspektera en specifik stackram. Nivå 1 är den aktuella funktionen och nivå 2 är anroparen.

local function where()
  local info = debug.getinfo(2, "Sl")
  return info.short_src .. ":" .. info.currentline
end
print(where())

debug.getlocal och debug.setlocal

debug.getlocal(level, n) returnerar namnet och värdet för den n:te lokala variabeln i en stackram.

local function example()
  local x = 42
  print(debug.getlocal(1, 1))  -- x  42
end
example()

debug.getupvalue och debug.setupvalue

Inspektera och ändra en funktions upvalues. getupvalue(fn, n) returnerar namn och värde.

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) anger en hook som anropas vid händelser: "c" (anrop), "r" (retur), "l" (rad) eller var N:te instruktion.

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) hämtar metatabellen även när getmetatable blockeras av ett __metatable-fält.

debug.upvalueid och upvaluejoin

debug.upvalueid(fn, n) returnerar en unik identifierare för en upvalue. debug.upvaluejoin(f1,n1,f2,n2) gör att de delar samma lagringscell.

Varning: risker med debug-biblioteket

debug-biblioteket kan bryta inkapsling och invariants. Använd det aldrig i produktionskod. Begränsa användningen till tester, profilering och utvecklingsverktyg.

debug.traceback i xpcall

Den vanligaste produktionssäkra användningen av debug är att skicka debug.traceback som felhanterare till xpcall för utförliga felmeddelanden.

Fråga om debug-biblioteket

Vilken debug-funktion är säker och används ofta i produktionsmässig felhantering?

Sammanfattning: debug-biblioteket

debug-biblioteket exponerar stackramar, lokala variabler, upvalues och hooks. Använd debug.traceback med xpcall för utförliga fel; betrakta resten som introspektionsverktyg enbart för utvecklare.

Gratis att börja

Lär dig Lua med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
40
Lektioner
159

Vanliga frågor

Är lektionen ”Biblioteket debug” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Lua Academy, inklusive ”Biblioteket debug”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Lua Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Biblioteket debug”?

Inspektera stackspårningar, lokala variabler och upvalues med biblioteket debug. Ni övar på Lua Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Lua Academy?

Du behöver inga förkunskaper. Utbildningen i Lua Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.

Hur lång tid tar lektionen ”Biblioteket debug”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Lua Academy-lektionen?

Ja. Varje Lua Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Funktioner i math-biblioteket
  2. Funktioner i table-biblioteket
  3. Biblioteken os och io
  4. Biblioteket debug
← Tillbaka till Lua Academy