
L’accesso ad una array fuori scala causa la corruzione della memoria, che a sua volta è alla base di una serie di crash interni e della corruzione dei dati.
– Il manichino è una macchina di stato che permette di controllare le animazioni dei veicoli e dei giocatori.
– Il problema riguarda un array fuori scala.
– La porzione di codice coinvolta è riferita all’animazione di ingresso nella postazione del capitano della Constellation
– Il problema è dovuto al fatto che, invece di utilizzare lo strumento per l’implementazione delle animazioni, questa è stata integrata manualmente.
– Mark ha corretto il problema nel codice e, in aggiunta, ha implementato una funzione di interruzione in maniera tale che, qualora si dovessero verificare altri episodi simili, questi non faranno crashare il gioco.
– E’ necessario rimanere all’interno dei limiti dell’array. Un paragone nel mondo reale potrebbe essere il seguente: avete preso una sagoma da tiro al bersaglio e l’avete messa alla distanza di tiro dell’arma, ma il proiettile, invece di fermarsi sulla sagoma (che corrisponde al limite dell’array), la supera e continua a muoversi in linea retta… Fino a colpire qualcuno (che corrisponde alla sovrascrittura delle memoria).
– Mark mostra come adesso il livello si carichi senza problemi (sebbene siano ancora presenti un paio di bug minori).
Sparky: Come fai a capire quale sia la porzione specifica del codice non funzionante? Per esempio, mettiamo il caso che tu abbia un problema fisico e che il personaggio non riesca più a saltare – come fai a capire dove si trovino le linee di codice relative a questa funzione tra le migliaia presenti nel programma? C’è una qualche funzione di ricerca o qualcosa di simile?
Essenzialmente, quando si rompe qualcosa si cerca un comportamento caratteristico. E’ qualcosa di correlato al giocatore? E’ qualcosa che riguarda i veicoli o gli oggetti? Una volta trovate queste sezioni, si può saltare direttamente ai blocchi di codice riguardanti questi comportamenti, ed inoltre ci viene in soccorso Skype, dove è possibile chiedere alla gente se sappiano quale possa essere la parte di codice che interessa specificatamente queste funzioni. Una volta che si è capito grosso modo quale sia l’area in cui cercare, si inizia a guardare se ci sono dei frammenti di codice strani o che risaltano sugli altri – per esempio, nel caso del problema della fisica della scorsa settimana, in cui il salto induceva effettivamente un movimento nella nave – ovviamente il problema era da qualche parte nella sezione del codice relativa alla fisica di gioco. E dal momento che riguardava anche il giocatore, avevo iniziato ad analizzare il codice relativo alla fisica del giocatore. Dopo qualche ricerca, avevo trovato quella famosa flag che, in teoria, se impostata avrebbe dovuto impedire agli oggetti di muoversi.
Successivamente ero andato a guardare la porzione di codice dei veicoli, avevo impostato anche qui la suddetta flag, ma la nave continuava a muoversi, per cui sono tornato ad analizzare la sezione della fisica del giocatore ed ho iniziato a chiedermi dove potesse essere il problema, dato che dopo le ultime modifiche la flag funzionava correttamente.
Guardando in altre sezioni del codice della fisica mi sono accorto delle stringe responsabili dell’impulso e sono andato a ritroso. A volte si è semplicemente fortunati e si riesce a trovare subito il responsabile di un qualche malfunzionamento… Ma in altri casi invece è necessaria una ricerca estensiva.
L’arte del debugging è davvero molto, molto complicata, ma anche divertente.
Alcuni link utili a riguardo:
http://www.cprogramming.com/debuggers.html
http://www.codeproject.com/Articles/359801/plus-powerful-de-bugging-tricks-with-Visual-Studi
http://www.cs.dartmouth.edu/~campbell/cs50/artofdebug.html
Suggerimenti su come fare per entrare nel settore, venire assunti come ingegneri o su come migliorare professionalmente se stessi.
– Cercate di programmare qualcosa di piccolo ogni giorno.
– Iniziate con progetti piccoli e, progressivamente, passate a cose sempre più grandi.
– Fate pratica con il debug. Impostate delle interruzioni, lasciate qualche messaggio, e cercate di trovare delle soluzioni a problemi che non avete mai affrontato.
– Se state trattando un problema che non sapete come risolvere, chiedete aiuto ad altri ma dite loro cosa avete fatto prima di arrivare a quel punto. Cercate di allontanarvi dal problema e poi tornate a riconsiderarlo utilizzando punti di vista sempre differenti.
– Partecipate ad altri progetti. Se siete appena usciti dal college, entrate in un piccolo progetto indie. Affronterete problemi che non avete mai trattato in passato, e superandoli migliorete la vostra conoscenza della programmazione.
– Fondamentalmente, fate pratica di programmazione ogni giorno. Iniziate con piccoli progetti e crescete nel tempo. Non iniziate fin da subito con progetti grandi, non fareste altro che stressarvi perché non saprete come progettare i sistemi ed ho visto molto persone dare di matto per motivi simili.