Depurar errores como un pro · Lección 2/3 · 8 min

print: tu mejor amigo para depurar

Cuando no sabes por qué algo falla, haz que el código te cuente qué está pasando.

El 80% de la depuración es saber qué valor tiene una variable en cierto punto. Para eso está print: pones mensajes que te dicen por dónde pasa el código y con qué datos.

lua
RegisterNetEvent('banco:retirar')
AddEventHandler('banco:retirar', function(cantidad)
  local src = source
  print('[banco] retirar pedido por', src, 'cantidad:', cantidad)

  local xPlayer = ESX.GetPlayerFromId(src)
  print('[banco] xPlayer existe?', xPlayer ~= nil)

  if not xPlayer then return end
  print('[banco] saldo actual:', xPlayer.getAccount('bank').money)
end)

Prints estratégicos

Un interruptor de depuración

lua
-- config.lua
Config.Debug = true

-- función helper
local function dbg(...)
  if Config.Debug then print('[mi_recurso]', ...) end
end

dbg('esto solo se ve si Config.Debug = true')

Debug condicional

Pon prints ANTES y DESPUÉS del punto sospechoso. Si el primero sale y el segundo no, el fallo está en medio. Cuando termines, baja Config.Debug a false (no dejes spam en producción).

Practica lo aprendido

0/3
Rellena los huecos

Completa el helper de depuración condicional para que solo imprima si está activado.

1-- config.lua → Config.Debug = true
2local function dbg(...)
3 if Config.Debug then ('[mi_recurso]', ...) end
4end
Pista

La función estrella para sacar valores por consola en Lua/FiveM.

Corrige el error

Este evento da dinero pero 'no funciona' y no lanza error. Añade un print para ver qué llega.

Este código tiene un fallo:

1AddEventHandler('banco:dar', function(cantidad)
2 local src = source
3 local xPlayer = ESX.GetPlayerFromId(src)
4 xPlayer.addAccountMoney('bank', cantidad)
5end)

Reescríbelo corregido:

Pista

Un print al entrar con 'cantidad' (y si xPlayer existe) te dice si el handler corre y con qué datos.

Ordena el código

Ordena el código para que los prints 'rodeen' la operación sospechosa (antes y después).

Coloca las líneas en el orden correcto con las flechas.

print('[banco] nuevo saldo:', xPlayer.getAccount('bank').money)
xPlayer.addAccountMoney('bank', cantidad)
print('[banco] antes de dar, cantidad:', cantidad)
Pista

Print ANTES del punto sospechoso, ejecutas la acción, y print DESPUÉS para ver el resultado.

Reto: prográmalo tú

Una función no da dinero y no sabes por qué. Añade prints para ver si entra, si el jugador existe y qué cantidad llega.

Escríbelo tú en tu editor (VS Code) y pruébalo en tu servidor. Aquí se aprende haciéndolo, no copiando.

Ver pista

Un print al entrar, uno tras GetPlayerFromId (xPlayer~=nil) y uno con la cantidad.

Escribe aquí tu solución:

¿Qué tal esta lección?