A biblioteca debug em profundidade
Use debug.traceback, getinfo, getlocal e getupvalue para introspecção.
A biblioteca debug em profundidade é uma aula grátis de Lua Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Lua Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Lua Academy inclui 4 aulas no total.
Visão geral da biblioteca de depuração
A biblioteca debug é o conjunto de ferramentas de introspecção do Lua. Ela permite inspecionar e modificar o estado de execução de qualquer função, corrotina ou quadro da pilha.
Análise aprofundada de debug.getinfo
debug.getinfo(f, what) aceita sinalizadores what: "n" (nome), "S" (origem), "l" (linha atual), "u" (valores externos), "f" (referência da função).
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()Inspeção de variáveis locais
debug.getlocal(level, n) retorna o nome e o valor da n-ésima variável local em um determinado nível da pilha. O nível 1 = função atual.
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ção de variáveis locais
debug.setlocal(level, n, value) altera o valor de uma variável local durante a execução — algo poderoso para depuração e testes.
Inspeção de valores externos
debug.getupvalue(fn, n) retorna o nome e o valor do n-ésimo valor externo de uma função. Itere aumentando n até que nil seja retornado.
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) -- 100Percurso da pilha
Percorra toda a pilha de chamadas incrementando o nível até que debug.getinfo retorne 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) retorna uma cadeia de caracteres formatada com o rastreamento da pilha. É a função de depuração mais prática para o tratamento de erros em produção.
Inspeção de corrotinas
Passe uma corrotina como primeiro argumento para debug.getinfo a fim de inspecionar a pilha dela.
local co = coroutine.create(function()
print(debug.getinfo(1, "l").currentline)
end)
coroutine.resume(co)debug.sethook para rastreamento
Rastreie todas as chamadas de função em um programa definindo um gancho de chamadas que imprima os nomes das funções.
debug.sethook(function(event)
if event == "call" then
local info = debug.getinfo(2, "Sn")
print("CALL:", info.name or "?")
end
end, "c")Asserções portáteis
Use debug.getinfo(2, "Sl") para incluir informações sobre o arquivo e a linha nos erros de asserção.
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
endCuidado
A biblioteca de depuração pode violar o encapsulamento, tornar os programas significativamente mais lentos (especialmente com debug.sethook) e não estar disponível em todos os ambientes. Use-a somente durante o desenvolvimento e os testes.
Pergunta sobre a biblioteca de depuração
O que debug.getupvalue(fn, 1) retorna?
Recapitulação: biblioteca de depuração em profundidade
A biblioteca de depuração oferece inspeção da pilha (getinfo), inspeção e modificação de variáveis locais (getlocal/setlocal), acesso a valores externos (getupvalue/setupvalue) e rastreamento baseado em ganchos (sethook). Use-a com responsabilidade e somente durante o desenvolvimento.
Perguntas Frequentes
A aula “A biblioteca debug em profundidade” é grátis?
Sim — o texto completo de “A biblioteca debug em profundidade” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Lua Academy, atualize para CoddyKit PRO. O curso de Lua Academy inclui 4 aulas no total.
O que vou aprender em “A biblioteca debug em profundidade”?
Use debug.traceback, getinfo, getlocal e getupvalue para introspecção. Você pratica Lua Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Lua Academy?
Nenhuma experiência prévia é necessária. Lua Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “A biblioteca debug em profundidade”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Lua Academy?
Sim. Cada aula de Lua Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- A biblioteca debug em profundidade
- Depuração remota com MobDebug
- Criação de perfis com LuaProfiler
- Cobertura de código e instrumentação de testes