Share via


Problemas comunes al crear versiones de lanzamiento

Durante el desarrollo, normalmente compilará y probará con una compilación de depuración del proyecto. Si compila la aplicación para una compilación de versión, puede obtener 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 diferencias principales que producirían un error en una aplicación en una compilación de versión, pero no en una compilación de 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 montón

El diseño del montón es el causante del 90 por ciento de los problemas aparentes cuando una aplicación funciona en compilaciones de depuración, pero no de versió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 versión y de depuración, una sobrescritura de memoria podría no crear ningún problema en una compilación de depuración, pero puede tener efectos catastróficos en una compilación de versió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 versiones. En concreto, la macro ASSERT no se evalúa como ningún valor en una compilación de versión, por lo que no se ejecutará ningún código que se encuentre en las instrucciones ASSERT. Para obtener más información, vea el artículo sobre cómo 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 quita el espaciado interno de la aplicación. En una compilación de versión, los punteros aislados tienen una mayor probabilidad de apuntar a la memoria sin inicializar que 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