Fare debugging significa identificare ed eliminare gli errori (bug) in un programma. Alcune strategie sono utilissime per trovare più velocemente gli errori nel tuo codice.
Guarda i messaggi di errore: quando Matlab restituisce un messaggio di errore, nella maggior parte dei casi identifica correttamente il problema, e indica il file e la riga in cui si verifica. Se ci sono più messaggi di errore, parti dal primo più in alto; solitamente è la causa anche dei successivi.
Cerca il caso più semplice che causa il problema. Se il tuo programma non funziona per n=1000
, testalo di nuovo con n=3
e controlla se almeno in quel caso fa quello che deve. Testa il tuo programma in un esempio facile in cui sai cosa deve succedere; per esempio,perché è così piccolo che sai fare i conti anche a mano.
Dividi il tuo programma in funzioni in modo da isolare il problema ancora di più. Se invece di avere due pagine di codice hai cinque funzioni da dieci righe l’una (per esempio A = crea_matrice(n)
, x = risolvi_sistema(A, b)
…), è più facile testarle una per una e controllare in quale sta il problema.
Usa il debugger incluso in Matlab. Premendo sul numero di linea, puoi inserire un breakpoint, cioè dire a Matlab di fermarsi quando raggiunge quell’istruzione, in modo che tu possa esaminare il contenuto delle variabili. Vedrai poi nella barra in alto icone come “continue” (per riprendere l’esecuzione) e “step” (per eseguire una sola riga e poi fermarsi di nuovo). In questo modo puoi esaminare direttamente quello che il computer sta facendo: sai quali istruzioni vengono eseguite e quanto valgono le variabili ad ogni passo.
Se non riesci a capire da solo cosa non va nel tuo codice, puoi chiedere aiuto ad altre persone, per esempio ai tuoi insegnanti (noi), ad altri studenti o su internet. Per fare in modo che la comunicazione sia più rapida possibile, segui queste linee guida.
Hai provato a risolverlo da solo?. Prima di chiedere aiuto a noi, hai provato a seguire i suggerimenti qui sopra? Hai provato, per esempio, a testare casi più semplici?
Invia tutto il codice che serve per riprodurre il problema. Se il tuo problema è che quando scrivi x = [1 2 3]; y = funzione(x)
ottieni un risultato diverso da quello che ti aspetti, perché possiamo aiutarti è necessario che tu ci spedisca sia il testo della funzione (file funzione.m
), che il testo dei comandi che esegui (x = [1 2 3]; y = funzione(x)
), in un altro file o nel testo della mail. Se funzione.m
richiama altre funzioni al suo interno, assicurati di aver spedito anche il loro codice. Insomma, descrivi tutti i passaggi che servono per riprodurre il problema.
Sperabilmente, non servirà inviare troppi file, perché hai già cercato il caso più semplice. (Vero?)
Usa un formato ragionevole. Spesso vorremo eseguire anche noi il tuo codice. Spedire i file .m
va bene. Spedire più file raccolti in un archivio .zip
va bene. Spedire una foto della schermata di Matlab scattata con il cellulare non va bene.
Spiega cosa non va. Spedirci una pagina di codice con il solo commento “non funziona!” serve a poco, è come andare dal medico e dire soltanto “sto male!”. Quali sono i sintomi?
Spiegaci che esercizio stai cercando di risolvere, che comandi dai, che risultato ti aspettavi di ottenere, e che cosa ti viene invece. Per esempio: “sto cercando di risolvere un problema di interpolazione dall’esercizio 2 del compito del 30/02/2012; al punto 5 eseguo i comandi n = 100
, x = [1 2 3]
, e y=funzione(x, n)
e ottengo come risultato y=0.5
invece di y=0.25
come nella soluzione ufficiale”.
Descrivi i tentativi che hai già fatto. Mostra di aver già fatto il tuo dovere: spiega brevemente cosa hai cercato di fare per risolvere il problema: ho provato a creare un caso più semplice in questo modo, ma continuo a non capire cosa non va. Anche se lo eseguo con n=1
non funziona; ho provato a fare i conti a mano e non capisco perché.