Compartir a través de


Problemas comunes al crear versiones de lanzamiento

Actualización: noviembre 2007

Durante la fase de desarrollo, normalmente, se genera y se prueba con una versión de depuración del proyecto. En ese caso, si la aplicación se genera para una versión de lanzamiento, se puede producir una infracción de acceso.

La siguiente lista muestra las diferencias principales entre una versión de depuración y una de lanzamiento. Existen otras diferencias; sin embargo, a continuación, se indican las diferencias principales que producirían un error en una aplicación generada para una versión de lanzamiento que funciona en una versión de depuración.

  • Disposición del montón

  • Compilación

  • Utilización de punteros

  • Optimizaciones

Vea la opción /GZ (Detectar errores de versiones de lanzamiento en versiones de depuración) del compilador para obtener información sobre cómo detectar errores de versiones de lanzamiento en versiones de depuración.

Disposición del montón

La disposición del montón es la causa de cerca de un noventa por ciento de los problemas de una aplicación que funciona correctamente en modo de depuración pero no en su versión de lanzamiento.

Cuando el proyecto se genera para depuración, se utiliza el asignador de memoria de depuración. Esto significa que todas las asignaciones de memoria disponen de bytes de protección asociados. Estos bytes de protección detectan cualquier sobrescritura en memoria. Como la disposición del montón difiere entre las versiones de lanzamiento y de depuración, una sobrescritura en memoria podría no producir ningún problema en una versión de depuración, pero podría tener efectos catastróficos en una versión de lanzamiento.

Para obtener más información, vea Comprobar si se ha sobrescrito la memoria y Utilizar la versió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 cuando se genera una versión de lanzamiento. En particular, la macro ASSERT no se evalúa en una versión de lanzamiento, de modo que no se ejecuta el código incluido en instrucciones ASSERT. Para obtener más información, vea Examinar instrucciones ASSERT.

Algunas funciones se implementan inline para incrementar la velocidad en la versión de lanzamiento. Normalmente, las optimizaciones se activan en las versiones de lanzamiento. Además, se utiliza un asignador de memoria diferente.

Utilización de punteros

La ausencia de información de depuración elimina los datos de relleno de la aplicación. En una versión de lanzamiento, los punteros perdidos tienen una gran probabilidad de apuntar a memoria sin inicializar en vez de apuntar a información de depuración.

Optimizaciones

Según la naturaleza de ciertos segmentos de código, el compilador de optimización podría generar código no esperado. Ésta es la causa menos probable de problemas en versiones de lanzamiento, pero ocurre en ocasiones. Para obtener una solución, vea Optimizar el código.

Vea también

Referencia

Versiones de lanzamiento

Solucionar problemas de versiones de lanzamiento