0Pricing
Lua Academy · Lección

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 20

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

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

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

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

  1. La biblioteca debug en profundidad
  2. Depuración remota con MobDebug
  3. Perfilado con LuaProfiler
  4. Cobertura de código e instrumentación de pruebas
← Volver a Lua Academy