This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
Defold contiene un depurador Lua integrado con una herramienta de inspección. Junto con las herramientas de profiling integradas, es una herramienta potente que puede ayudar a encontrar la causa de errores en la lógica de tu juego o a analizar problemas de rendimiento.
La forma más sencilla de depurar tu juego en Defold es usar depuración con impresión. Usa sentencias print() o pprint() para observar variables o indicar el flujo de ejecución. Si un objeto de juego sin script se comporta de forma extraña, puedes simplemente adjuntarle un script con el único propósito de depurar. Usar cualquiera de las funciones de impresión imprimirá en la vista Console del editor y en el log del juego.
Además de imprimir, el motor también puede dibujar texto de depuración y líneas rectas en la pantalla. Esto se hace enviando mensajes al socket @render:
-- Dibuja el valor de "my_val" con texto de depuración en la pantalla
msg.post("@render:", "draw_text", { text = "My value: " .. my_val, position = vmath.vector3(200, 200, 0) })
-- Dibuja texto con color en la pantalla
local color_green = vmath.vector4(0, 1, 0, 1)
msg.post("@render:", "draw_debug_text", { text = "Custom color", position = vmath.vector3(200, 180, 0), color = color_green })
-- Dibuja una línea de depuración entre player y enemy en la pantalla
local start_p = go.get_position("player")
local end_p = go.get_position("enemy")
local color_red = vmath.vector4(1, 0, 0, 1)
msg.post("@render:", "draw_line", { start_point = start_p, end_point = end_p, color = color_red })
Los mensajes visuales de depuración agregan datos al pipeline de renderizado y se dibujan como parte del pipeline de renderizado normal.
"draw_line" agrega datos que se renderizan con la función render.draw_debug3d() en el script de renderizado."draw_text" se renderiza con /builtins/fonts/debug/always_on_top.font, que usa el material /builtins/fonts/debug/always_on_top_font.material."draw_debug_text" es igual que "draw_text", pero se renderiza con un color personalizado.Ten en cuenta que probablemente querrás actualizar estos datos en cada frame, así que enviar los mensajes en la función update() es una buena idea.
Para ejecutar el depurador, selecciona Debug ▸ Start/Attach, que inicia el juego con el depurador adjunto o adjunta el depurador a un juego que ya está en ejecución.

En cuanto el depurador está adjunto, tienes control de la ejecución del juego mediante los botones de control del depurador en la consola, o mediante el menú Debug:


end debajo de la línea con la llamada a la función nextspawn():

Una línea de código Lua no corresponde a una sola expresión. Avanzar paso a paso en el depurador avanza una expresión a la vez, lo que significa que actualmente puede que tengas que presionar el botón de paso más de una vez para avanzar a la siguiente línea.
nextspawn():


Para definir o borrar un breakpoint, haz click en la columna justo a la derecha de los números de línea en el editor de código. También puedes seleccionar Edit ▸ Toggle Breakpoint desde el menú.


Para editar la condición del breakpoint, haz click derecho en la columna justo a la derecha de los números de línea en el editor de código, o selecciona Edit ▸ Edit Breakpoint desde el menú.

Actualmente no es posible modificar variables mediante el evaluador.

Cuando trabajas con múltiples breakpoints en distintos scripts, la pestaña Breakpoints proporciona una vista centralizada para gestionar todos tus breakpoints en un solo lugar.
Para trabajar con breakpoints individuales:
Selecciona múltiples breakpoints usando Ctrl/Cmd+click o Shift+click, y luego haz click derecho para realizar acciones en bloque. Puedes editar condiciones en varios breakpoints simultáneamente, alternar su estado activo o eliminarlos por completo.
Los botones de la barra de herramientas te permiten activar, desactivar o alternar todos los breakpoints a la vez, lo que es útil cuando quieres ejecutar tu juego sin detenerte, pero no quieres perder sus posiciones. También puedes eliminarlos todos cuando termines tu sesión de depuración.
Lua viene con una biblioteca debug que resulta útil en algunas situaciones, especialmente si necesitas inspeccionar los detalles internos de tu entorno Lua. Puedes encontrar más información sobre ella en el capítulo sobre la Debug Library en el manual de Lua.
Si encuentras un error o si tu juego no se comporta como esperabas, aquí tienes un checklist de depuración:
Revisa la salida de la consola y verifica que no haya errores de runtime.
Agrega sentencias print a tu código para verificar que el código realmente se está ejecutando.
Si no se está ejecutando, comprueba que hayas hecho la configuración adecuada en el editor requerida para que el código se ejecute. ¿El script está agregado al objeto de juego correcto? ¿Tu script ha adquirido foco de input? ¿Los input-triggers son correctos? ¿El código del shader está agregado al material? Etc.
Si tu código depende de los valores de variables (en una sentencia if, por ejemplo), usa print con esos valores donde se usan o se comprueban, o inspecciónalos con el depurador.
A veces encontrar un bug puede ser un proceso difícil y lento, que requiere recorrer tu código poco a poco, revisar todo, acotar el código defectuoso y eliminar fuentes de error. Esto se hace mejor con un método llamado “divide y vencerás”:
¡Buena caza!
Si tienes problemas con físicas y las colisiones no funcionan como se esperaba, se recomienda activar la depuración de físicas. Marca la casilla Debug en la sección Physics del archivo game.project:

Cuando esta casilla está marcada, Defold dibujará todas las formas de colisión y los puntos de contacto de las colisiones:
