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
O Defold contém um depurador Lua integrado com recurso de inspeção. Junto com as ferramentas de profiling integradas, ele é uma ferramenta poderosa que pode ajudar a encontrar a causa de bugs na lógica do seu jogo ou a analisar problemas de desempenho.
A forma mais simples de depurar seu jogo no Defold é usar print debugging. Use instruções print() ou pprint() para observar variáveis ou indicar o fluxo de execução. Se um objeto de jogo sem script se comportar de forma estranha, você pode simplesmente anexar um script a ele com o único propósito de depuração. Usar qualquer uma das funções de impressão imprimirá na visualização Console do editor e no log do jogo.
Além de imprimir, a engine também pode desenhar texto de depuração e linhas retas na tela. Isso é feito enviando mensagens ao socket @render:
-- Desenha o valor de "my_val" com texto de depuração na tela
msg.post("@render:", "draw_text", { text = "My value: " .. my_val, position = vmath.vector3(200, 200, 0) })
-- Desenha texto colorido na tela
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 })
-- Desenha uma linha de depuração entre player e enemy na tela
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 })
As mensagens visuais de depuração adicionam dados ao pipeline de renderização e são desenhadas como parte do pipeline de renderização regular.
"draw_line" adiciona dados que são renderizados com a função render.draw_debug3d() no script de renderização."draw_text" é renderizado com /builtins/fonts/debug/always_on_top.font, que usa o material /builtins/fonts/debug/always_on_top_font.material."draw_debug_text" é igual a "draw_text", mas é renderizado em uma cor personalizada.Observe que provavelmente você vai querer atualizar esses dados a cada frame, então enviar as mensagens na função update() é uma boa ideia.
Para executar o depurador, selecione Debug ▸ Start/Attach, o que inicia o jogo com o depurador anexado ou anexa o depurador a um jogo que já está em execução.

Assim que o depurador é anexado, você tem controle da execução do jogo pelos botões de controle do depurador no console ou pelo menu Debug:


end abaixo da linha com a chamada à função nextspawn():

Uma linha de código Lua não corresponde a uma única expressão. Avançar no depurador move uma expressão por vez, o que significa que, atualmente, talvez você precise pressionar o botão de passo mais de uma vez para avançar para a próxima linha.
nextspawn():


Para definir ou limpar um breakpoint, clique na coluna logo à direita dos números de linha no editor de código. Você também pode selecionar Edit ▸ Toggle Breakpoint no menu.


Para editar a condição do breakpoint, clique com o botão direito na coluna logo à direita dos números de linha no editor de código ou selecione Edit ▸ Edit Breakpoint no menu.

Atualmente não é possível modificar variáveis pelo avaliador.

Ao trabalhar com vários breakpoints em scripts diferentes, a aba Breakpoints oferece uma visualização centralizada para gerenciar todos os seus breakpoints em um só lugar.
Para trabalhar com breakpoints individuais:
Selecione vários breakpoints usando Ctrl/Cmd+clique ou Shift+clique e então clique com o botão direito para realizar ações em massa. Você pode editar condições em vários breakpoints simultaneamente, alternar o estado ativo deles ou removê-los por completo.
Os botões da barra de ferramentas permitem ativar, desativar ou alternar todos os breakpoints de uma vez, útil quando você quer executar seu jogo sem parar, mas não quer perder as posições deles. Você também pode remover todos quando terminar sua sessão de depuração.
Lua vem com uma biblioteca debug que é útil em algumas situações, principalmente se você precisa inspecionar detalhes internos do seu ambiente Lua. Você encontra mais informações sobre ela no capítulo sobre a Debug Library no manual de Lua.
Se você encontrar um erro ou se o seu jogo não se comportar como esperado, aqui está um checklist de depuração:
Verifique a saída do console e confirme que não há erros de runtime.
Adicione instruções print ao seu código para verificar se o código realmente está rodando.
Se ele não estiver rodando, verifique se você fez no editor a configuração correta necessária para o código executar. O script foi adicionado ao objeto de jogo certo? Seu script adquiriu foco de entrada? Os input-triggers estão corretos? O código de shader foi adicionado ao material? Etc.
Se seu código depende dos valores de variáveis (em um if-statement, por exemplo), use print nesses valores onde são usados ou verificados, ou inspecione-os com o depurador.
Às vezes encontrar um bug pode ser um processo difícil e demorado, exigindo que você percorra seu código pouco a pouco, verificando tudo, estreitando o código defeituoso e eliminando fontes de erro. Isso é melhor feito por um método chamado “dividir e conquistar”:
Boa caça!
Se você tem problemas com física e colisões não estão funcionando como esperado, recomenda-se habilitar a depuração de física. Marque a checkbox Debug na seção Physics do arquivo game.project:

Quando esta checkbox está habilitada, o Defold desenha todas as formas de colisão e pontos de contato das colisões:
