Lanzamiento que genera archivos .pdb, ¿por qué?

¿Por qué Visual Studio 2005 genera los archivos .pdb al comstackr en versión? No voy a depurar una comstackción de lanzamiento, entonces, ¿por qué se generan?

Porque sin los archivos PDB, sería imposible depurar una comstackción de “Liberación” por otra cosa 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 el establecimiento de puntos de interrupción es extremadamente difícil, ya que las líneas de código fuente no se pueden emparejar uno a uno con (o incluso en el mismo orden) que el código ensamblado generado. Los archivos PDB lo ayudan a usted y al depurador, haciendo que la depuración post-mortem sea mucho más fácil.

Usted señala que si su software está listo para ser lanzado, debería haber hecho toda su depuración para entonces. Si bien eso es cierto, hay un par de puntos importantes a tener en cuenta:

  1. También debe probar y depurar su aplicación (antes de lanzarla) utilizando la versión “Release”. Esto se debe a que al activar las optimizaciones (están deshabilitadas de forma predeterminada en la configuración “Depurar”) a veces pueden aparecer errores sutiles que de otra forma no se detectarían. Cuando estés haciendo esta depuración, querrás los símbolos PDB.

  2. Los clientes informan con frecuencia acerca de casos extremos 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 alocada de la máquina de ese usuario. Si son clientes particularmente útiles, informarán la excepción que se produjo y le proporcionarán un seguimiento de la stack. O incluso le permiten tomar prestada su máquina para depurar su software de forma remota. En cualquiera de esos casos, querrás que los archivos PDB te ayuden.

  3. El perfilado siempre debe hacerse en versiones “Release” con optimizaciones habilitadas. Y una vez más, los archivos PDB son útiles, ya que permiten que las instrucciones de ensamblaje que se perfilan sean correlacionadas con el código fuente que usted realmente escribió.

No puede volver atrás y generar los archivos PDB después de la comstackción. * Si no los creas durante la construcción, has perdido tu oportunidad. No hace daño nada crearlos. Si no desea distribuirlos, simplemente puede omitirlos de sus binarios. Pero si luego decides que los quieres, no tienes suerte. Es mejor siempre generarlos y archivar una copia, en caso de que los necesites alguna vez.

Si realmente quieres apagarlos, eso siempre es una opción. En la ventana Propiedades de su proyecto, configure la opción “Información de depuración” en “ninguno” para cualquier configuración que desee cambiar.

Tenga en cuenta, sin embargo, que las configuraciones “Depurar” y “Versión” utilizan de forma predeterminada diferentes configuraciones para emitir información de depuración. Querrá mantener esta configuración. La opción “Información de depuración” está configurada como “completa” para una comstackción de depuración, lo que significa que, además de un archivo PDB, la información del símbolo de depuración está integrada en el ensamblado. También obtienes símbolos que admiten funciones geniales como editar y continuar. En el modo de lanzamiento, se selecciona la opción “pdb-only”, que, como suena, incluye solo el archivo PDB, sin afectar el contenido del conjunto. Por lo tanto, 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 de ninguna manera afectará el rendimiento en tiempo de ejecución de su código.

* Como señala Marc Sherman 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 coincidente. Al menos, por lo general. Esto funciona bien la mayor parte del tiempo, pero no se garantiza que el comstackdor genere binarios idénticos cada vez que comstack el mismo código , por lo que puede haber diferencias sutiles. Peor aún, si ha realizado alguna actualización de su cadena de herramientas (como la aplicación de un paquete de servicio para Visual Studio), es menos probable que los PDB coincidan. Para garantizar la generación confiable de archivos PDB ex postfacto , necesitaría archivar no solo el código fuente en su sistema de control de versiones, sino también los binarios de toda su cadena de herramientas de comstackción para garantizar que pueda recrear con precisión la configuración de su entorno de comstackción. . No hace falta decir que es mucho más fácil simplemente crear y archivar los archivos PDB.

PDB se puede generar tanto para Release como para Debug . Esto se establece en (en VS2010 pero en VS2005 debe ser similar):

ProjectPropertiesBuildAdvancedDebug Info

Solo cámbialo a None .

Sin los archivos .pdb, es prácticamente imposible recorrer el código de producción; debe confiar en otras herramientas que pueden ser costosas y consumir 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.

¿Por qué estás tan seguro de que no depurarás versiones de lanzamiento? Algunas veces (afortunadamente rara vez ocurre) puede obtener un informe de defectos de un cliente que no es reproducible en la versión de depuración por alguna razón (diferentes tiempos, comportamiento diferente o lo que sea). Si ese problema parece reproducirse en la comstackción de lanzamiento, te alegrará tener el pdb correspondiente.

Además, puede utilizar volcados de emergencia 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 el origen si está configurado correctamente) utilizando el volcado de emergencia. Consulte la documentación de Microsoft en Symbol Stores .

El archivo .PDB es el nombre abreviado de “Base de datos del progtwig”. Contiene la información sobre el punto de depuración para el depurador y los recursos que se utilizan o referencia. Se genera cuando construimos como modo de depuración. Permite a la aplicación depurar en tiempo de ejecución.

El tamaño es el aumento del archivo .PDB en modo de depuración. Se usa cuando estamos probando nuestra aplicación.

No es necesario este archivo cuando se lanza 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 de múltiples proyectos, generalmente 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 de creación posterior que solo funciona en una configuración específica.

Desafortunadamente, Visual Studio no le permite especificar diferentes eventos posteriores a la comstackción para diferentes configuraciones. Así que decidí hacerlo manualmente, editando el archivo csproj del proyecto de inicio y agregando lo siguiente (en lugar de cualquier etiqueta PostBuildEvent existente):

    del *.pdb del *.xml   

Desafortunadamente, esto hará que el cuadro de texto del evento de comstackción posterior quede en blanco y poner algo en él puede tener resultados impredecibles.

Los símbolos de depuración ( .pdb) y XML doc ( .xml) conforman un gran porcentaje del tamaño total y no deberían formar parte del paquete de implementación normal. Pero debería ser posible acceder a ellos en caso de que sean necesarios.

Un posible enfoque: al final del proceso de comstackción de TFS, muévalos a un artefacto separado.