0Pricing
Lua Academy · Lezione

La libreria debug

Esamini stack trace, variabili locali e upvalue con la libreria debug.

La libreria debug è una lezione Lua Academy gratuita su CoddyKit. Questa è la lezione 4 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.

Che cos'è la libreria debug?

La libreria debug fornisce accesso a basso livello agli internals di Lua: frame dello stack, variabili locali, upvalue, hook e stato delle coroutine. La utilizzi per il debugging, non nella logica di produzione.

debug.traceback

debug.traceback(msg, level) restituisce una stringa con lo stack delle chiamate. Viene comunemente passata a xpcall come gestore degli errori.

local ok, err = xpcall(function()
  error("something went wrong")
end, debug.traceback)
print(err)

debug.getinfo

debug.getinfo(fn, what) restituisce una tabella con informazioni su una funzione: nome, sorgente, riga di definizione e altro.

local function foo() end
local info = debug.getinfo(foo, "Sl")
print(info.source, info.linedefined)

Ispezione del livello dello stack

Passi un intero a debug.getinfo per ispezionare uno specifico frame dello stack. Il livello 1 è la funzione corrente, il 2 è il chiamante.

local function where()
  local info = debug.getinfo(2, "Sl")
  return info.short_src .. ":" .. info.currentline
end
print(where())

debug.getlocal e debug.setlocal

debug.getlocal(level, n) restituisce il nome e il valore dell'ennesima variabile locale in un frame dello stack.

local function example()
  local x = 42
  print(debug.getlocal(1, 1))  -- x  42
end
example()

debug.getupvalue e debug.setupvalue

Ispezionano e modificano gli upvalue di una funzione. getupvalue(fn, n) restituisce nome e valore.

local x = 10
local function f() return x end
print(debug.getupvalue(f, 1))  -- x  10
debug.setupvalue(f, 1, 99)
print(f())  -- 99

debug.sethook

debug.sethook(fn, mask, count) imposta un hook chiamato in corrispondenza di determinati eventi: "c" (chiamata), "r" (ritorno), "l" (riga) o ogni N istruzioni.

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) recupera la metatabella anche quando getmetatable è bloccata da un campo __metatable.

debug.upvalueid e upvaluejoin

debug.upvalueid(fn, n) restituisce un identificatore univoco per un upvalue. debug.upvaluejoin(f1,n1,f2,n2) fa sì che condividano la stessa cella.

Attenzione: rischi della libreria debug

La libreria debug può violare l'incapsulamento e compromettere gli invarianti. Non la utilizzi mai nel codice di produzione. La riservi ai test, al profiling e agli strumenti di sviluppo.

debug.traceback in xpcall

L'uso più comune e sicuro in produzione di debug consiste nel passare debug.traceback come gestore degli errori a xpcall per ottenere messaggi di errore dettagliati.

Domanda sulla libreria debug

Quale funzione di debug è sicura e comunemente usata nella gestione degli errori in produzione?

Riepilogo: libreria debug

La libreria debug espone frame dello stack, variabili locali, upvalue e hook. Utilizzi debug.traceback con xpcall per ottenere errori dettagliati; consideri il resto strumenti di introspezione riservati agli sviluppatori.

Domande Frequenti

La lezione «La libreria debug» è gratuita?

Sì — il testo completo di «La libreria debug» è 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»?

Esamini stack trace, variabili locali e upvalue con la libreria debug. 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 4 di 4.

Quanto tempo richiede la lezione «La libreria debug»?

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

  1. Funzioni della libreria math
  2. Funzioni della libreria table
  3. Librerie os e io
  4. La libreria debug
← Torna a Lua Academy