Lua Academy · Lektion

Biblioteket debug på djupet

Använd debug.traceback, getinfo, getlocal och getupvalue för introspektion.

Lektion 1 av 413 steg

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

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

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

Fö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.

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

  1. Biblioteket debug på djupet
  2. Fjärrfelsökning med MobDebug
  3. Profilering med LuaProfiler
  4. Kodtäckning och testinstrumentering
← Tillbaka till Lua Academy