Compartir a través de


Problemas comunes al crear una compilación de lanzamiento

Durante el desarrollo, normalmente compilará y probará con una versión de depuración de su proyecto. Si luego compila su aplicación para una compilación de lanzamiento, puede encontrarse con una infracción de acceso.

En la siguiente lista se muestran las diferencias principales entre una compilación de depuración y una compilación de versión (no depuración). Hay otras diferencias, pero a continuación se enumeran las principales diferencias que causarían que una aplicación falle en una compilación de release cuando funciona en depuración.

Para obtener información sobre cómo detectar errores de compilación de versión en las compilaciones de depuración, vea el artículo sobre /GZ (detección de errores de compilación de versión en una compilación de depuración).

Diseño del heap

El diseño del montón es la causa del 90 por ciento de los problemas aparentes cuando una aplicación funciona en modo depuración, pero no en modo producción.

Al compilar el proyecto para la depuración, se usa el asignador de memoria de depuración. Esto significa que todas las asignaciones de memoria tienen bytes de protección colocados alrededor de ellas. Estos bytes de protección detectan las sobrescrituras de memoria. Dado que el diseño del montón es diferente en las compilaciones de producción y de depuración, una sobrescritura de memoria podría no crear ningún problema en una compilación de depuración, pero podría tener efectos catastróficos en una compilación de producción.

Para obtener más información, vea los artículos Comprobación de la sobrescritura de la memoria y Uso de la compilación de depuración para comprobar si se ha sobrescrito la memoria.

Compilación

Muchas de las macros de MFC y gran parte de la implementación de MFC cambian al compilar para la versión de lanzamiento. En particular, la macro ASSERT no se evalúa en una compilación de lanzamiento, por lo que no se ejecutará ningún código contenido en las instrucciones ASSERT. Para obtener más información, consulte Examinar las instrucciones ASSERT.

Algunas funciones se insertan para aumentar la velocidad de la compilación de versión. Las optimizaciones suelen estar activadas en una compilación de versión. También se usa un asignador de memoria diferente.

Compatibilidad con punteros

La falta de información de depuración elimina el relleno de la aplicación. En una compilación de lanzamiento, los punteros perdidos tienen una mayor probabilidad de apuntar a memoria no inicializada en lugar de a la información de depuración.

Optimizaciones

Dependiendo de la naturaleza de determinados segmentos de código, el compilador de optimización podría generar código inesperado. Esta es la causa menos probable de los problemas de compilación de versión, pero se da a veces. Para obtener una solución, vea Optimizar el código.

Consulte también

Versiones de lanzamiento
Solucionar problemas de versiones de lanzamiento