Problemi comuni durante la creazione di una build di rilascio
Durante lo sviluppo, in genere si compilerà e si eseguirà il test con una compilazione di debug del progetto. Se si compila quindi l'applicazione per una build di versione, è possibile che venga visualizzata una violazione di accesso.
L'elenco seguente mostra le differenze principali tra una compilazione di debug e una build (non di tipoebug). Esistono altre differenze, ma di seguito sono riportate le principali differenze che causano un errore di un'applicazione in una build di versione quando funziona in una compilazione di debug.
Vedere l'opzione del compilatore /GZ (Catch Release-Build Errors in Debug Build) per informazioni su come intercettare gli errori di compilazione della versione nelle compilazioni di debug.
Heap Layout
Il layout dell'heap sarà la causa di circa il novanta percento dei problemi apparenti quando un'applicazione funziona nel debug, ma non il rilascio.
Quando si compila il progetto per il debug, si usa l'allocatore di memoria di debug. Ciò significa che tutte le allocazioni di memoria hanno byte di protezione posizionati intorno a essi. Questi byte di protezione rilevano una sovrascrittura della memoria. Poiché il layout dell'heap è diverso tra le versioni di rilascio e di debug, una sovrascrittura della memoria potrebbe non creare problemi in una compilazione di debug, ma potrebbe avere effetti irreversibili in una build di versione.
Per altre informazioni, vedere Controllare la sovrascrittura della memoria e Usare la compilazione di debug per verificare la sovrascrittura della memoria.
Compilazione
Molte delle macro MFC e gran parte delle modifiche apportate all'implementazione MFC durante la compilazione per il rilascio. In particolare, la macro ASSERT non restituisce nulla in una compilazione di versione, quindi non verrà eseguito alcun codice trovato nelle asSERT. Per altre informazioni, vedere Esaminare le istruzioni ASSERT.
Alcune funzioni vengono inlinedi per una maggiore velocità nella build di rilascio. Le ottimizzazioni sono in genere attivate in una build di versione. Viene usato anche un allocatore di memoria diverso.
Supporto puntatore
La mancanza di informazioni di debug rimuove la spaziatura interna dall'applicazione. In una build di versione, i puntatori randagi hanno una maggiore probabilità di puntare alla memoria non inizializzata anziché puntare alle informazioni di debug.
Ottimizzazioni
A seconda della natura di determinati segmenti di codice, l'ottimizzazione del compilatore potrebbe generare codice imprevisto. Questa è la causa meno probabile di problemi di compilazione della versione, ma si verifica in occasione. Per una soluzione, vedere Ottimizzazione del codice.
Vedi anche
Build di versione
Correzione dei problemi della build di versione