2009-04-17 17 views

risposta

31

I build di debug conterranno i simboli di debug che possono essere utilizzati da un debugger. Le build di rilascio spesso non contengono simboli di debug, quindi se ottieni un crash dump, tutto ciò che otterrai sono un mucchio di indirizzi esadecimali invece di nomi di simboli utili.

I build di debug non vengono compilati con l'ottimizzazione (-O0 con gcc), mentre i build di rilascio sono compilati con l'ottimizzazione (in genere -O2 o -O3). L'ottimizzazione rende il debug molto, molto più difficile. Se si tenta di eseguire il debug di un'applicazione di rilascio, il debugger diventerà molto confuso, poiché le istruzioni di assembly non corrispondono più alle istruzioni HLL, le istruzioni vengono riordinate, le funzioni vengono sottolineate, i loop vengono srotolati, ecc.

Debug e release build anche definito diversi simboli di preprocessore, e alcuni codici sono compilati condizionatamente in base a quelli (ad esempio, controlli di limiti di array, asserzioni, ecc.), sebbene questo sia altamente dipendente dall'applicazione. Un tipico esempio potrebbe essere #define NDEBUG per la modalità di rilascio, che causa la rimozione delle asserzioni.

0

In Tiger, i build di debug sono "collegati zero". Questo è ottimizzato solo per l'ambiente e non è una build completa.

Problemi correlati