2009-04-17 7 views

Respuesta

31

Las compilaciones de depuración contendrán símbolos de depuración que pueden ser utilizados por un depurador. Las compilaciones de lanzamiento a menudo no contienen símbolos de depuración, de modo que si obtiene un volcado de bloqueo, todo lo que obtendrá será un conjunto de direcciones hexadecimales en lugar de nombres de símbolos útiles.

versiones de depuración no están compilados con optimización (-O0 con gcc), mientras que las versiones de lanzamiento se compila con optimización (típicamente -O2 o -O3). La optimización hace que la depuración sea mucho, mucho más difícil. Si intenta depurar una aplicación de lanzamiento, el depurador se confundirá mucho, ya que las instrucciones de ensamblado ya no coinciden con las declaraciones HLL, las instrucciones se reordenan, las funciones se incorporan, los bucles se desenrollan, etc.

Depurar y lanzar compilaciones también se definieron diferentes símbolos de preprocesador, y parte del código se compila de forma condicional en función de esos (por ejemplo, comprobaciones de límites de matriz, aserciones, etc.), aunque eso depende en gran medida de la aplicación. Un ejemplo típico sería #define NDEBUG para el modo de lanzamiento, que hace que las aserciones sean eliminadas.

0

En Tiger, las compilaciones de depuración tienen "cero enlaces". Esto es, está optimizado solo para su entorno y no es realmente una compilación completa.

Cuestiones relacionadas