Condividi tramite


Problemi comuni durante la creazione di una build di rilascio

Durante lo sviluppo, il progetto viene di solito compilato e testato mediante una build di debug. Se si compila quindi l'applicazione per una build di rilascio, è possibile che si verifichi una violazione di accesso.

Nell'elenco che segue sono esposte le principali differenze tra le build di debug e le build di rilascio (non di debug). Esistono anche altre differenze, ma quelle che seguono sono le differenze principali che possono comportare il blocco di un'applicazione eseguita in una build di rilascio quando viene eseguita in una build di debug.

  • Layout dell'heap

  • Compilazione

  • Supporto per i puntatori

  • Ottimizzazioni

Per informazioni sul rilevamento degli errori della build di rilascio nelle build di debug, vedere l'opzione di compilazione /GZ (Attiva controllo errori in fase di esecuzione dello stack frame).

Layout dell'heap

Il layout dell'heap è il responsabile di circa il 90% dei problemi che si verificano quando un'applicazione funziona come build di debug, ma non come build di rilascio.

Quando si compila il progetto per eseguire il debug, si utilizza l'allocatore di memoria di debug. Questo significa che attorno a tutte le allocazioni di memoria vengono disposti byte di protezione. Questi byte di protezione rilevano eventuali sovrascritture di memoria. Dal momento che il layout dell'heap della versione di rilascio è diverso rispetto a quello della versione di debug, è possibile che una sovrascrittura di memoria non crei alcun problema in una build di debug, ma abbia conseguenze molto gravi in una build di rilascio.

Per ulteriori informazioni, vedere Controllo delle sovrascritture di memoria e Utilizzo della build di debug per il controllo della sovrascrittura di memoria.

Compilazione

Numerose macro MFC e la maggior parte dell'implementazione MFC si comportano in modo diverso quando si compila la versione di rilascio. In particolare, la macro ASSERT non fornisce codice in una build di rilascio e di conseguenza non viene eseguito alcun codice presente in tali macro. Per ulteriori informazioni, vedere Analisi delle istruzioni ASSERT.

Nelle build di rilascio, per aumentare la velocità, alcune funzioni vengono rese inline. Nelle build di rilascio vengono in genere attivate le ottimizzazioni. Viene inoltre utilizzato un diverso allocatore di memoria.

Supporto per i puntatori

La mancanza di informazioni di debug rimuove il padding dall'applicazione. In una build di rilascio ci sono quindi maggiori possibilità che puntatori errati rimandino a memoria non inizializzata anziché a informazioni di debug.

Ottimizzazioni

A seconda della natura di alcuni segmenti di codice, è possibile che il compilatore di ottimizzazione generi del codice imprevisto. Si tratta di un problema estremamente remoto, ma in alcune occasioni si verifica. Per informazioni su come risolvere il problema, vedere Ottimizzazione del codice.

Vedere anche

Riferimenti

Build di rilascio

Correzione dei problemi della build di rilascio