Biblioteket debug på djupet
Använd debug.traceback, getinfo, getlocal och getupvalue för introspektion.
Biblioteket debug på djupet är en gratis lektion i Lua Academy på CoddyKit. Detta är lektion 1 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.
Översikt över debug-biblioteket
debug-biblioteket är Lua:s verktygslåda för introspektion. Det låter dig granska och ändra körningstillståndet för valfri funktion, coroutine eller stackram.
Fördjupning i debug.getinfo
debug.getinfo(f, what) accepterar what-flaggor: "n" (namn), "S" (källa), "l" (aktuell rad), "u" (upvalues), "f" (funktionsreferens).
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()Inspektera lokala variabler
debug.getlocal(level, n) returnerar namnet och värdet för den n:te lokala variabeln på en given stacknivå. Nivå 1 = aktuell funktion.
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Ändra lokala variabler
debug.setlocal(level, n, value) ändrar värdet för en lokal variabel under körning – kraftfullt vid felsökning och testning.
Inspektera upvalues
debug.getupvalue(fn, n) returnerar namnet och värdet för funktionens n:te upvalue. Iterera genom att öka n tills nil returneras.
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) -- 100Vandra genom stacken
Vandra genom hela anropsstacken genom att öka nivån tills debug.getinfo returnerar 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) returnerar en formaterad stackspårningssträng. Det är den mest praktiska debug-funktionen för felhantering i produktionsmiljö.
Inspektera coroutiner
Skicka en coroutine som första argument till debug.getinfo för att inspektera dess stack.
local co = coroutine.create(function()
print(debug.getinfo(1, "l").currentline)
end)
coroutine.resume(co)debug.sethook för spårning
Spåra alla funktionsanrop i ett program genom att ange en call-hook som skriver ut funktionsnamnen.
debug.sethook(function(event)
if event == "call" then
local info = debug.getinfo(2, "Sn")
print("CALL:", info.name or "?")
end
end, "c")Portabla assertioner
Använd debug.getinfo(2, "Sl") för att inkludera fil- och radinformation i assertion-fel.
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
endFörsiktighet
Debug-biblioteket kan bryta inkapsling, göra program betydligt långsammare (särskilt debug.sethook) och är inte tillgängligt i alla miljöer. Använd det endast under utveckling och testning.
Fråga om debug-biblioteket
Vad returnerar debug.getupvalue(fn, 1)?
Sammanfattning: debug-biblioteket på djupet
Debug-biblioteket tillhandahåller stackinspektion (getinfo), inspektion och ändring av lokala variabler (getlocal/setlocal), åtkomst till upvalues (getupvalue/setupvalue) samt hook-baserad spårning (sethook). Använd det ansvarsfullt och endast under utveckling.
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 på djupet” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Lua Academy, inklusive ”Biblioteket debug på djupet”, 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 på djupet”?
Använd debug.traceback, getinfo, getlocal och getupvalue för introspektion. 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 1 av 4.
Hur lång tid tar lektionen ”Biblioteket debug på djupet”?
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
- Biblioteket debug på djupet
- Fjärrfelsökning med MobDebug
- Profilering med LuaProfiler
- Kodtäckning och testinstrumentering