La biblioteca debug en profundidad
Utilice debug.traceback, getinfo, getlocal y getupvalue para la introspección.
La biblioteca debug en profundidad es una lección gratuita de Lua Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Lua Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Lua Academy incluye 4 lecciones en total.
Descripción general de la biblioteca debug
La biblioteca debug es el conjunto de herramientas de introspección de Lua. Permite inspeccionar y modificar el estado de ejecución de cualquier función, corutina o marco de la pila.
Análisis detallado de debug.getinfo
debug.getinfo(f, what) acepta indicadores what: "n" (nombre), "S" (origen), "l" (línea actual), "u" (upvalues) y "f" (referencia a la función).
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()Inspección de variables locales
debug.getlocal(level, n) devuelve el nombre y el valor de la variable local número n en un nivel determinado de la pila. El nivel 1 corresponde a la función actual.
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 20Modificación de variables locales
debug.setlocal(level, n, value) cambia en tiempo de ejecución el valor de una variable local; resulta muy útil para depurar y probar.
Inspección de upvalues
debug.getupvalue(fn, n) devuelve el nombre y el valor del upvalue número n de una función. Incremente n en cada iteración hasta que se devuelva 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) -- 100Recorrido de la pila
Recorra toda la pila de llamadas incrementando el nivel hasta que debug.getinfo devuelva 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) devuelve una cadena con un rastreo de pila formateado. Es la función de depuración más práctica para gestionar errores en producción.
Inspección de corutinas
Pase una corutina como primer argumento a debug.getinfo para inspeccionar su pila.
local co = coroutine.create(function()
print(debug.getinfo(1, "l").currentline)
end)
coroutine.resume(co)debug.sethook para el trazado
Trace todas las llamadas a funciones de un programa configurando un hook de llamadas que imprima los nombres de las funciones.
debug.sethook(function(event)
if event == "call" then
local info = debug.getinfo(2, "Sn")
print("CALL:", info.name or "?")
end
end, "c")Aserciones portables
Utilice debug.getinfo(2, "Sl") para incluir información del archivo y de la línea en los errores de aserción.
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
endPrecaución
La biblioteca debug puede infringir la encapsulación, ralentizar considerablemente los programas (especialmente mediante debug.sethook) y no está disponible en todos los entornos. Utilícela únicamente durante el desarrollo y las pruebas.
Pregunta sobre la biblioteca debug
¿Qué devuelve debug.getupvalue(fn, 1)?
Resumen: biblioteca debug en profundidad
La biblioteca debug proporciona inspección de la pila (getinfo), inspección y modificación de variables locales (getlocal/setlocal), acceso a upvalues (getupvalue/setupvalue) y trazado mediante hooks (sethook). Utilícela de forma responsable y solo durante el desarrollo.
Preguntas frecuentes
¿La lección «La biblioteca debug en profundidad» es gratis?
Sí — el texto completo de «La biblioteca debug en profundidad» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Lua Academy, actualiza a CoddyKit PRO. El curso de Lua Academy incluye 4 lecciones en total.
¿Qué aprenderé en «La biblioteca debug en profundidad»?
Utilice debug.traceback, getinfo, getlocal y getupvalue para la introspección. Practicas Lua Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Lua Academy?
No se requiere experiencia previa. Lua Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «La biblioteca debug en profundidad»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Lua Academy?
Sí. Cada lección de Lua Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- La biblioteca debug en profundidad
- Depuración remota con MobDebug
- Perfilado con LuaProfiler
- Cobertura de código e instrumentación de pruebas