Franny's Adobe

Il blog di Francesco Carucci
posts - 99, comments - 611, trackbacks - 841

Un'analisi informale dei crash bug in C++

Il mio lavoro si e' trasformato nelle ultime settimane (mesi) nell'analisi e (possibilmente) nel fix dei bug nell'engine in ingresso nel database di Fable 2. Ogni giorno ho qualche decina di bug da guardare, se riesco risolvere al momento, oppure indirizzare verso chi di dovere.

Vuol dire in parole povere che ne ho viste parecchie.

L'engine consiste in qualche centinaia di migliaia di righe di codice, divise fra una decina di programmatori nel corso di tre anni.

Da questo lavoro di analisi ho potuto farmi un'idea molto informale (nel senso che non ho raccolto dati precisi) sulle cause dei crash bug in Fable 2, e sul codice che li genera. La stragrande maggioranza dei crash bug e' dovuta a problemi con la gestione del ciclo di vita di un oggetto, quando e' allocato, sopratutto quando, come e dove e' deallocato. I double delete sono all'ordine del giorno. Peggio ancora mantenere reference a oggetti che sono stati deallocati da qualcun altro e scriverci sopra, che equivale a scrivere sopra un oggetto casuale in un qualsiasi pezzo di codice nel sistema che si e' trovato ad usare quel pezzo di memoria deallocato. Crash random e problema difficilissimo da diagnosticare, perche' la causa non e' locale.

Piccole regolette che aiutano molto a prevenire anziche' curare:

- Resource Allocation Is Initalisation, sempre e comunque

- Azzerare un puntatore dopo il delete

- Usare smart pointer dove possibile (ma occhio ai problemi con il ref counting)

- Notificare ai client la distruzione di un oggetto, possibilmente attraverso Observer (ma occhio alle complicazioni di design che ne derivano)

- Fare le cose semplici

 

L'ultimo sembra un consiglio stupido, ma e' forse l'unico importante: sono tre anni che predico di fare le cose semplici, e io ho cercato di seguire il mio consiglio il piu' possibile, senza complicarmi la vita, non scrivendo mai nulla che non fosse espressamente richiesto, cercando di scrivere codice piu' leggibile possibile. L'ultimo crash bug nel mio codice risale a quattro mesi fa (un doppio delete). Funziona.

Print | posted on lunedì 26 maggio 2008 10.06 |

Feedback

Gravatar

# re: Un'analisi informale dei crash bug in C++

>Fare le cose semplici

Concordo, concordo, concordo.
Mi fa piacere che anche tu predichi il verbo della semplicità, io sono anni che dico che i sistemi possono diventare articolati e complessi anche con piccoli e semplici moduli funzionali e facilmente testabili, e voglio dire che ci sono anche esempi illustri, che ci dovrebbero far riflettere, nei quali anche i più esperti hanno perso un po' il controllo... come Vista secondo me.
26/05/2008 10.19 | novecento
Gravatar

# re: Un'analisi informale dei crash bug in C++

ho raccolto qui (anche nei commenti) un po' di frasi sulla semplicita': http://blogs.ugidotnet.org/adrian/archive/2006/03/03/36066.aspx
26/05/2008 14.25 | Adrian Florea

Post Comment

Title  
Name  
Email
Url
Comment   
Please add 3 and 7 and type the answer here:

Powered by: