Biblioteket debug
Inspektera stackspårningar, lokala variabler och upvalues med biblioteket debug.
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()) -- 99debug.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.
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.