La libreria debug in dettaglio
Utilizzi debug.traceback, getinfo, getlocal e getupvalue per l'introspezione.
La libreria debug in dettaglio è una lezione Lua Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Lua Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Lua Academy include 4 lezioni in totale.
Panoramica della libreria debug
La libreria debug è il toolkit di introspezione di Lua. Consente di ispezionare e modificare lo stato di runtime di qualsiasi funzione, coroutine o frame dello stack.
Approfondimento su debug.getinfo
debug.getinfo(f, what) accetta i flag what: "n" (nome), "S" (sorgente), "l" (riga corrente), "u" (upvalue), "f" (riferimento alla funzione).
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()Ispezione delle variabili locali
debug.getlocal(level, n) restituisce il nome e il valore della variabile locale n-esima a un determinato livello dello stack. Il livello 1 corrisponde alla funzione corrente.
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 20Modifica delle variabili locali
debug.setlocal(level, n, value) modifica a runtime il valore di una variabile locale: è uno strumento potente per il debugging e i test.
Ispezione degli upvalue
debug.getupvalue(fn, n) restituisce il nome e il valore dell'upvalue n-esimo di una funzione. Iteri incrementando n finché non viene restituito nil.
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) -- 100Esplorazione dello stack
Esplori l'intero stack delle chiamate incrementando il livello finché debug.getinfo non restituisce 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) restituisce una stringa formattata con il trace dello stack. È la funzione di debug più pratica per la gestione degli errori in produzione.
Ispezione delle coroutine
Passi una coroutine come primo argomento a debug.getinfo per ispezionarne lo stack.
local co = coroutine.create(function()
print(debug.getinfo(1, "l").currentline)
end)
coroutine.resume(co)debug.sethook per il tracing
Tracci tutte le chiamate di funzione in un programma impostando un hook di chiamata che stampa i nomi delle funzioni.
debug.sethook(function(event)
if event == "call" then
local info = debug.getinfo(2, "Sn")
print("CALL:", info.name or "?")
end
end, "c")Asserzioni portabili
Utilizzi debug.getinfo(2, "Sl") per includere le informazioni sul file e sulla riga negli errori delle asserzioni.
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
endAttenzione
La libreria debug può violare l'incapsulamento, rallentare notevolmente i programmi, soprattutto con debug.sethook, e non è disponibile in tutti gli ambienti. La utilizzi solo durante lo sviluppo e i test.
Domanda sulla libreria debug
Che cosa restituisce debug.getupvalue(fn, 1)?
Riepilogo: la libreria debug in dettaglio
La libreria debug offre l'ispezione dello stack (getinfo), l'ispezione e la modifica delle variabili locali (getlocal/setlocal), l'accesso agli upvalue (getupvalue/setupvalue) e il tracing basato sugli hook (sethook). La utilizzi responsabilmente e solo durante lo sviluppo.
Domande Frequenti
La lezione «La libreria debug in dettaglio» è gratuita?
Sì — il testo completo di «La libreria debug in dettaglio» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Lua Academy, passa a CoddyKit PRO. Il corso Lua Academy include 4 lezioni in totale.
Cosa imparerò in «La libreria debug in dettaglio»?
Utilizzi debug.traceback, getinfo, getlocal e getupvalue per l'introspezione. Eserciti Lua Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Lua Academy?
Non è richiesta alcuna esperienza precedente. Lua Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «La libreria debug in dettaglio»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Lua Academy?
Sì. Ogni lezione Lua Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- La libreria debug in dettaglio
- Debug remoto con MobDebug
- Profilazione con LuaProfiler
- Code coverage e strumentazione dei test