Partager via


Problèmes courants lors de la création d'une version release

Mise à jour : novembre 2007

En cours de développement, vous serez généralement amené à effectuer des générations et des tests à l'aide d'une version debug de votre projet. Si vous générez ensuite votre application en vue de produire une version release, vous pouvez provoquer une violation d'accès.

La liste ci-dessous montre les principales différences entre les versions debug et release (non debug). D'autres différences existent, mais celles qui suivent sont les principales différences pouvant entraîner l'échec en version release d'une application qui fonctionne en version debug.

  • Présentation du tas

  • Compilation

  • Prise en charge du pointeur

  • Optimisations

Consultez l'option de compilation /GZ (Intercepter des erreurs de versions release dans les versions debug) pour obtenir des informations sur la manière d'intercepter les erreurs des versions release dans les versions debug.

Présentation du tas

La présentation du tas est à l'origine de 90 % environ des problèmes apparents quand une application fonctionne en version debug, mais pas en version release.

Lorsque vous générez votre projet pour la version debug, vous utilisez l'allocateur de mémoire debug. Ceci signifie que toutes les allocations de mémoire sont entourées d'octets de garde. Ces octets de garde détectent les remplacements de mémoire. Dans la mesure où la présentation du tas diffère entre les versions release et debug, un remplacement de mémoire peut ne pas créer d'incidents dans une version debug, mais avoir des effets catastrophiques dans une version release.

Pour plus d'informations, consultez Vérification des remplacements de mémoire et Utilisation de la version debug pour vérifier les remplacements de mémoire.

Compilation

Nombre de macros MFC et une grande partie de l'implémentation des MFC sont modifiées lors d'une génération destinée à produire une version release. En particulier, la macro ASSERT se traduit par une chaîne nulle dans une version release, et le code contenu dans les instructions ASSERT n'est ainsi pas exécuté. Pour plus d'informations, consultez Examen des instructions ASSERT.

Certaines fonctions sont déclarées inline pour accélérer la vitesse d'exécution lors de la génération de la version release. Les optimisations sont généralement activées dans une version release. Un allocateur de mémoire différent est également utilisé.

Prise en charge du pointeur

L'absence d'informations de débogage supprime la marge intérieure de votre application. Dans une version release, les pointeurs perdus ont plus de chances de désigner une mémoire non initialisée que de référencer des informations de débogage.

Optimisations

Selon la nature de certains segments de code, le compilateur d'optimisation peut générer un code inattendu. C'est la cause la moins probable des problèmes liés aux versions release, mais elle se manifeste quand même de temps à autre. Pour une solution, consultez Optimisation du code.

Voir aussi

Référence

Versions release

Résolution de problèmes liés à la version release