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 include un debugger Lua integrato con funzioni di ispezione. Insieme agli strumenti di profilazione integrati, è uno strumento potente che può aiutarti a trovare la causa dei bug nella logica di gioco o ad analizzare problemi di prestazioni.
Il modo più semplice per eseguire il debug di un gioco in Defold è usare il debug tramite istruzioni di stampa. Usa le istruzioni print() o pprint() per osservare le variabili o indicare il flusso di esecuzione. Se un oggetto di gioco privo di script si comporta in modo strano, puoi semplicemente aggiungergli uno script con il solo scopo di eseguire il debug. Tutte le funzioni di stampa scrivono nella vista Console dell’editor e nel log del gioco.
Oltre a stampare, il motore può anche disegnare testo di debug e linee rette sullo schermo. Per farlo, invia messaggi al socket @render:
-- Draw value of "my_val" with debug text on the screen
msg.post("@render:", "draw_text", { text = "My value: " .. my_val, position = vmath.vector3(200, 200, 0) })
-- Draw colored text on the screen
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 })
-- Draw debug line between player and enemy on the screen
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 })
I messaggi di debug visivo aggiungono dati alla pipeline di rendering, che li disegna durante la normale esecuzione.
"draw_line" aggiunge dati che vengono disegnati con la funzione render.draw_debug3d() nello script di rendering."draw_text" viene disegnato con il font /builtins/fonts/debug/always_on_top.font, che usa il materiale /builtins/fonts/debug/always_on_top_font.material."draw_debug_text" equivale a "draw_text", ma viene disegnato con un colore personalizzato.Probabilmente vorrai aggiornare questi dati a ogni fotogramma, quindi è consigliabile inviare i messaggi nella funzione update().
Per avviare il debugger, seleziona Debug ▸ Start/Attach: il comando avvia il gioco con il debugger collegato oppure collega il debugger a un gioco già in esecuzione.

Non appena il debugger è collegato, puoi controllare l’esecuzione del gioco tramite i pulsanti del debugger nella console o tramite il menu Debug:


end sotto la riga che contiene la chiamata alla funzione nextspawn():

Una riga di codice Lua non corrisponde a una singola espressione. L’avanzamento per passi nel debugger procede un’espressione alla volta: attualmente potresti quindi dover premere il pulsante di avanzamento più di una volta per passare alla riga successiva.
nextspawn():


Per impostare o rimuovere un punto di interruzione, fai clic nella colonna immediatamente a destra dei numeri di riga nell’editor di codice. Puoi anche selezionare Edit ▸ Toggle Breakpoint dal menu.
Enabled. I punti di interruzione disattivati appaiono vuoti all’interno per indicare che sono inattivi.


Per modificare la condizione del punto di interruzione, fai clic con il pulsante destro del mouse nella colonna immediatamente a destra dei numeri di riga nell’editor di codice oppure seleziona Edit ▸ Edit Breakpoint dal menu.

Attualmente non è possibile modificare le variabili tramite il valutatore.

Quando lavori con più punti di interruzione in script diversi, la scheda Breakpoints offre una vista centralizzata per gestirli tutti in un unico posto.
Per lavorare con i singoli punti di interruzione:
Seleziona più punti di interruzione usando Ctrl/Cmd+clic o Shift+clic, quindi fai clic con il pulsante destro del mouse per eseguire operazioni in blocco. Puoi modificare le condizioni di più punti di interruzione contemporaneamente, attivarli o disattivarli, oppure rimuoverli del tutto.
I pulsanti della barra degli strumenti permettono di attivare, disattivare o invertire lo stato di tutti i punti di interruzione contemporaneamente: è utile quando vuoi eseguire il gioco senza fermarlo, ma vuoi conservarne le posizioni. Puoi anche rimuoverli tutti al termine della sessione di debug.
Lua include una libreria di debug utile in alcune situazioni, soprattutto se devi ispezionare i meccanismi interni dell’ambiente Lua. Puoi trovare maggiori informazioni nel capitolo sulla libreria di debug nel manuale Lua.
Se riscontri un errore o il gioco non si comporta come previsto, ecco una lista di controllo per il debug:
Controlla l’output della console e verifica che non ci siano errori durante l’esecuzione.
Aggiungi istruzioni print al codice per verificare che venga effettivamente eseguito.
Se non viene eseguito, controlla di aver effettuato nell’editor la configurazione necessaria per eseguire il codice. Lo script è stato aggiunto all’oggetto di gioco corretto? Lo script ha acquisito il focus dell’input? I trigger di input sono corretti? Il codice dello shader è stato aggiunto al materiale? E così via.
Se il codice dipende dai valori di alcune variabili (per esempio in un’istruzione if), usa print per stampare quei valori dove vengono usati o verificati, oppure ispezionali con il debugger.
A volte trovare un bug può essere un processo difficile e lungo, che richiede di esaminare il codice un pezzo alla volta, controllando tutto, circoscrivendo il codice difettoso ed eliminando le possibili fonti di errore. Il metodo più adatto è quello chiamato “dividi e conquista”:
Buona caccia!
Se riscontri problemi con la fisica e le collisioni non funzionano come previsto, è consigliabile attivare il debug della fisica. Seleziona la casella Debug nella sezione Physics del file game.project:

Quando questa casella è selezionata, Defold disegna tutte le forme di collisione e i punti di contatto delle collisioni:
