.net - ucrtbased - Liberar generando archivos.pdb, ¿por qué?
simbolos visual studio (8)
¿Por qué Visual Studio 2005 genera los archivos .pdb
al compilar en el lanzamiento? No depuraré una versión de lanzamiento, ¿por qué se generan?
¿Por qué estás tan seguro de que no depurarás las versiones de lanzamiento? A veces (es de esperar pero rara vez ocurre) puede obtener un informe de defectos de un cliente que no es reproducible en la versión de depuración por algún motivo (diferentes tiempos, pequeños comportamientos diferentes o lo que sea). Si ese problema parece reproducible en la versión de lanzamiento, estarás contento de tener el pdb correspondiente.
Además, puede utilizar volcados para depurar su software. El cliente se lo envía y luego puede usarlo para identificar la versión exacta de su fuente, y Visual Studio incluso extraerá el conjunto correcto de símbolos de depuración (y la fuente si está configurado correctamente) usando el volcado de memoria. Consulte la documentación de Microsoft en Symbol Stores .
El archivo .PDB es el nombre corto de "Base de datos del programa". Contiene la información sobre el punto de depuración para el depurador y los recursos que se utilizan o hacen referencia. Se genera cuando construimos como modo de depuración. Se permite la aplicación para depurar en tiempo de ejecución.
El tamaño es aumento del archivo .PDB en modo de depuración. Se utiliza cuando estamos probando nuestra aplicación.
No es necesario este archivo cuando se libera o implementa. Buen artículo de archivo pdb.
http://www.codeproject.com/Articles/37456/How-To-Inspect-the-Content-of-a-Program-Database-P
En una solución multiproyecto, normalmente desea tener una configuración que no genere ningún archivo PDB o XML. En lugar de cambiar la propiedad Debug Info
de cada proyecto a none
, pensé que sería más conveniente agregar un evento posterior a la compilación que solo funcione en una configuración específica.
Desafortunadamente, Visual Studio no le permite especificar diferentes eventos posteriores a la compilación para diferentes configuraciones. Así que decidí hacer esto manualmente, editando el archivo csproj
del proyecto de inicio y agregando lo siguiente (en lugar de cualquier etiqueta existente de PostBuildEvent
):
<PropertyGroup Condition="''$(Configuration)'' == ''Publish''">
<PostBuildEvent>
del *.pdb
del *.xml
</PostBuildEvent>
</PropertyGroup>
Desafortunadamente, esto hará que el cuadro de texto del evento de compilación posterior quede en blanco y poner cualquier cosa en él puede tener resultados impredecibles.
Los archivos de símbolos de depuración ( .pdb) y documentos XML ( .xml) constituyen un gran porcentaje del tamaño total y no deben formar parte del paquete de implementación regular. Pero debería ser posible acceder a ellos en caso de que sean necesarios.
Un posible enfoque: al final del proceso de construcción de TFS, muévalos a un artefacto separado.
PDB se puede generar para la Release
, así como para la Debug
. Esto se establece en (en VS2010 pero en VS2005 debe ser similar):
Project
→Properties
→Build
→Advanced
→Debug Info
Simplemente cámbielo a None
.
Sin los archivos .pdb es prácticamente imposible pasar por el código de producción; Tiene que confiar en otras herramientas que pueden ser costosas y llevar mucho tiempo. Entiendo que puedes usar el rastreo o windbg, por ejemplo, pero realmente depende de lo que quieras lograr. En ciertos escenarios, solo desea pasar por el código remoto (sin errores ni excepciones) utilizando los datos de producción para observar un comportamiento particular, y aquí es donde los archivos .pdb son útiles. Sin ellos ejecutar el depurador en ese código es imposible.
Debido a que sin los archivos PDB, sería imposible depurar una compilación "Release" por algo que no sea la depuración a nivel de dirección. Las optimizaciones realmente hacen un número en su código, lo que hace que sea muy difícil encontrar al culpable si algo sale mal (por ejemplo, se lanza una excepción). Incluso establecer puntos de interrupción es extremadamente difícil, ya que las líneas del código fuente no se pueden hacer coincidir una a una con (o incluso en el mismo orden que) el código de ensamblaje generado. Los archivos PDB ayudan a usted y al depurador a salir, haciendo que la depuración post mortem sea mucho más fácil.
Señala que si su software está listo para su lanzamiento, para entonces ya habrá hecho toda su depuración. Si bien eso es cierto, hay algunos puntos importantes a tener en cuenta:
También debe probar y depurar su aplicación (antes de lanzarla) usando la compilación "Release". Esto se debe a que activar las optimizaciones (están deshabilitadas de forma predeterminada en la configuración "Depurar") a veces puede hacer que aparezcan errores sutiles que de otra forma no podría detectar. Cuando esté haciendo esta depuración, querrá los símbolos PDB.
Los clientes con frecuencia informan casos y errores que solo surgen en condiciones "ideales". Estas son cosas que son casi imposibles de reproducir en el laboratorio porque dependen de alguna configuración extraña de la máquina de ese usuario. Si son clientes particularmente útiles, informarán la excepción que se lanzó y le proporcionarán un seguimiento de la pila. O incluso te dejarán tomar prestada su máquina para depurar tu software de forma remota. En cualquiera de esos casos, querrá que los archivos PDB le ayuden.
La creación de perfiles siempre debe hacerse en las compilaciones "Release" con las optimizaciones habilitadas. Y una vez más, los archivos PDB son útiles, ya que permiten que las instrucciones de ensamblaje que se perfilan se asignen de nuevo al código fuente que realmente escribió.
No puede volver atrás y generar los archivos PDB después de la compilación. * Si no los creas durante la compilación, has perdido tu oportunidad. No duele nada crearlos. Si no quiere distribuirlos, simplemente puede omitirlos de sus archivos binarios. Pero si más tarde decides que los quieres, estás fuera de suerte. Mejor generarlos siempre y archivar una copia, en caso de que alguna vez los necesites.
Si realmente quieres apagarlos, esa es siempre una opción. En la ventana Propiedades de su proyecto, configure la opción "Información de depuración" en "ninguna" para cualquier configuración que desee cambiar.
Tenga en cuenta, sin embargo, que las configuraciones "Depurar" y "Liberar" utilizan de forma predeterminada diferentes configuraciones para emitir información de depuración. Usted querrá mantener esta configuración. La opción "Información de depuración" se establece en "completa" para una compilación de depuración, lo que significa que, además de un archivo PDB, la información de símbolos de depuración está incrustada en el ensamblaje. También obtienes símbolos que admiten funciones geniales como editar y continuar. En el modo Release, se selecciona la opción "pdb-only", que, como suena, incluye solo el archivo PDB, sin afectar el contenido del ensamblaje. Entonces, no es tan simple como la mera presencia o ausencia de archivos PDB en su directorio /bin
. Pero suponiendo que utilice la opción "pdb-only", la presencia del archivo PDB no afectará en modo alguno el rendimiento en tiempo de ejecución de su código.
* Como Marc Sherman señala en un comentario , siempre que su código fuente no haya cambiado (o puede recuperar el código original de un sistema de control de versiones), puede reconstruirlo y generar un archivo PDB correspondiente. Al menos, por lo general. Esto funciona bien la mayor parte del tiempo, pero no se garantiza que el compilador genere binarios idénticos cada vez que compile el mismo código , por lo que puede haber diferencias sutiles. Peor aún, si ha realizado alguna actualización en su cadena de herramientas mientras tanto (como la aplicación de un paquete de servicios para Visual Studio), es menos probable que los PDB coincidan. Para garantizar la generación confiable de archivos PDB ex postfacto , debe archivar no solo el código fuente en su sistema de control de versiones, sino también los archivos binarios de toda la cadena de herramientas de compilación para garantizar que pueda recrear con precisión la configuración de su entorno de compilación. . No hace falta decir que es mucho más fácil simplemente crear y archivar los archivos PDB.