debug-biblioteket i dybden
Brug debug.traceback, getinfo, getlocal og getupvalue til introspektion.
debug-biblioteket i dybden er en gratis Lua Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Lua Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Lua Academy-kurset indeholder 4 lektioner i alt.
Oversigt over debug-biblioteket
debug-biblioteket er Lua's værktøj til introspektion. Det lader dig inspicere og ændre kørselstilstanden for enhver funktion, koroutine eller stakramme.
Dybdegående gennemgang af debug.getinfo
debug.getinfo(f, what) accepterer what-flag: "n" (navn), "S" (kilde), "l" (aktuel linje), "u" (upvalues), "f" (funktionsreference).
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()Inspektion af lokale variable
debug.getlocal(level, n) returnerer navnet og værdien for den n-te lokale variabel på et givet stakniveau. Niveau 1 = den aktuelle 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Ændring af lokale variable
debug.setlocal(level, n, value) ændrer værdien af en lokal variabel under kørsel – det er nyttigt til fejlfinding og test.
Inspektion af upvalues
debug.getupvalue(fn, n) returnerer navnet og værdien for den n-te upvalue i en funktion. Gentag med stigende n, indtil nil returneres.
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) -- 100Gennemgang af kaldestakken
Gennemgå hele kaldestakken ved at øge niveauet, indtil debug.getinfo returnerer 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) returnerer en formateret streng med stakspor. Det er den mest praktiske debug-funktion til fejlhåndtering i produktionsmiljøer.
Inspektion af koroutiner
Videregiv en koroutine som det første argument til debug.getinfo for at inspicere dens stak.
local co = coroutine.create(function()
print(debug.getinfo(1, "l").currentline)
end)
coroutine.resume(co)debug.sethook til sporing
Spor alle funktionskald i et program ved at indstille et kald-hook, der udskriver funktionsnavne.
debug.sethook(function(event)
if event == "call" then
local info = debug.getinfo(2, "Sn")
print("CALL:", info.name or "?")
end
end, "c")Bærbare assertions
Brug debug.getinfo(2, "Sl") til at inkludere fil- og linjeoplysninger i fejl fra assertions.
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
endForsigtig
Debug-biblioteket kan bryde indkapsling, gøre programmer markant langsommere, især debug.sethook, og er ikke tilgængeligt i alle miljøer. Brug det kun under udvikling og test.
Spørgsmål om debug-biblioteket
Hvad returnerer debug.getupvalue(fn, 1)?
Opsummering: debug-biblioteket i dybden
Debug-biblioteket giver stakinspektion (getinfo), inspektion og ændring af lokale variable (getlocal/setlocal), adgang til upvalues (getupvalue/setupvalue) og hook-baseret sporing (sethook). Brug det kun ansvarligt under udvikling.
Lær Lua med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 40
- Lektioner
- 159
Ofte stillede spørgsmål
Er lektionen “debug-biblioteket i dybden” gratis?
Ja — alle 3 lektioner i læringssporet Lua Academy, inklusive “debug-biblioteket i dybden”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Lua Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “debug-biblioteket i dybden”?
Brug debug.traceback, getinfo, getlocal og getupvalue til introspektion. Du øver dig i Lua Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Lua Academy?
Der kræves ingen tidligere erfaring. Lua Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.
Hvor lang tid tager lektionen “debug-biblioteket i dybden”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Lua Academy-lektion?
Ja. Alle Lua Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- debug-biblioteket i dybden
- Remote debugging med MobDebug
- Profilering med LuaProfiler
- Kodedækning og testinstrumentering