Posible versión de depuración de Visual Studio duplicada en .NET
¿Cuál es la diferencia entre depurar y publicar en Visual Studio?
fuente
Posible versión de depuración de Visual Studio duplicada en .NET
¿Cuál es la diferencia entre depurar y publicar en Visual Studio?
Lo más importante es que en el modo Debug no hay optimizaciones, mientras que en el modo Release hay optimizaciones. Esto es importante porque el compilador es muy avanzado y puede hacer algunas mejoras bastante complicadas de bajo nivel en su código. Como resultado, es posible que algunas líneas de su código se queden sin ninguna instrucción, o algunas pueden confundirse. La depuración paso a paso sería imposible. Además, las variables locales a menudo se optimizan de formas misteriosas, por lo que los relojes y los relojes rápidos a menudo no funcionan porque la variable está "optimizada". Y también hay muchas otras optimizaciones. Intente depurar código .NET optimizado en algún momento y verá.
Otra diferencia clave es que, debido a esto, la configuración de versión predeterminada no se molesta en generar información extensa de símbolos de depuración. Ese es el archivo .PDB que puede haber notado y le permite al depurador averiguar qué instrucciones de ensamblaje corresponden a qué línea de código, etc.
"Debug" y "Release" son en realidad solo dos etiquetas para una gran cantidad de configuraciones que pueden afectar su compilación y depuración.
En el modo "Depurar" normalmente tienes lo siguiente:
En el modo "Release", las optimizaciones están activadas (aunque hay varias opciones disponibles) y la definición del preprocesador _DEBUG no está definida. Sin embargo, normalmente querrá generar los archivos PDB, porque es muy útil poder "depurar" en el modo de lanzamiento cuando las cosas van más rápido.
fuente
Principalmente, la depuración incluye mucha información adicional útil al depurar. En el modo de lanzamiento, todo esto se corta y se intercambia por rendimiento.
fuente
Si revisa las opciones de compilación del proyecto y las compara, verá cuáles son las diferencias.
Suponiendo que la pregunta es sobre código nativo / C ++ (no está del todo claro en la redacción):
Básicamente, en Debug todas las optimizaciones de generación de código están desactivadas. Algunas bibliotecas (por ejemplo, STL ) tienen por defecto una comprobación de errores más estricta (por ejemplo, iteradores de depuración). Se genera más información de depuración (por ejemplo, para "Editar y continuar"). Se generan más cosas en el código para detectar errores (los valores de las variables locales se establecen en un patrón no inicializado y se usa el montón de depuración).
fuente
Además, aparentemente, el modo de depuración crea muchos subprocesos adicionales para ayudar con la depuración. Estos permanecen activos durante toda la vida del proceso, independientemente de si adjunta un depurador o no. Vea mi pregunta relacionada aquí .
fuente
Probablemente vale la pena mencionar lo muy obvio, que los indicadores de compilación permiten una lógica diferente que debe usarse solo para cambiar el registro y la mensajería de la "consola", pero se puede abusar y cambiar drásticamente no solo los niveles bajos, sino la lógica comercial real.
fuente
También tenga en cuenta que al usar MFC, por ejemplo, los proyectos de depuración se vinculan con versiones de DLL no redistribuibles, como
MFC90D.DLL
mientras que la versión crea un vínculo con las versiones redistribuibles comoMFC90.DLL
. Esto probablemente sea similar a otros marcos.Por lo tanto, probablemente no podrá ejecutar aplicaciones de depuración y compilación en máquinas que no sean de desarrollo.
fuente
También sentí curiosidad por esta pregunta cuando desarrollé una aplicación copiada de una configuración de compilación de versión existente.
Tengo un desarrollador que está interesado en usar esa aplicación en modo de depuración, así que me pregunté qué se necesitaría para hacer esta configuración de compilación que existe con un nombre de ReleaseMyBuild copiado de una configuración de Lanzamiento (y por lo tanto debería tener todas las configuraciones orientadas a liberar optimizaciones ) para cambiar repentinamente de equipo y convertirse en una compilación de depuración a pesar del confuso nombre de la configuración de compilación.
Pensé que la configuración del proyecto era solo un nombre y una forma conveniente de seleccionar la "gran cantidad de configuraciones" que menciona Joris Timmermans. Quería saber el meollo de la cuestión de cuáles pueden ser esas configuraciones que hacen que una configuración de compilación llamada "FOO" funcione como una compilación de lanzamiento optimizada .
Aquí hay un vistazo. Creé un nuevo VCXPROJ a partir de la plantilla de proyecto vacía de Visual Studio 2010. Luego lo copié y edité ambos, el primero para conservar el contenido de depuración y el segundo el contenido de la versión. Aquí está la diferencia centrada en las diferencias relevantes ...
LANZAMIENTO
DEPURAR
Es interesante que en la sección Vínculo ambos se hayan
GenerateDebugInformation
establecido en verdadero.fuente
La diferencia obvia que puede ver es el tamaño del binario. Una compilación de depuración produce un binario más grande que una compilación de lanzamiento.
Al compilar en Debug, la tabla de símbolos se agrega al objeto compilado del archivo de código, lo que permite que los programas de depuración aprovechen estos binarios y accedan a los valores de objetos y variables.
Otra diferencia observable es que, en el modo de lanzamiento, el binario simplemente se bloqueará en un error fatal mientras que en el modo de depuración, si comienza a depurar la aplicación en Visual Studio, puede verificar la pila de llamadas que le indica la ubicación exacta de la declaración errónea. .
fuente
No sé cuáles son las diferencias exactas porque en realidad no hay información disponible al respecto.
Pero la principal diferencia observada es que la versión de lanzamiento a veces corrompe el archivo DLL resultante y, por lo tanto, inutiliza la aplicación, la aplicación web.
Lamentablemente, debe poner la compilación de depuración en producción. Y sí, para publicar tienes que usar el viejo FTP.
fuente