¿Qué es un archivo PDB?

252

¿Qué es un archivo PDB y cómo puedo excluirlo de la carpeta de lanzamiento cuando reconstruyo mi solución?

Ata
fuente
17
pdb es un archivo de base de datos del programa y se crea en la compilación. Este archivo contiene información de depuración y estado del proyecto que permite la vinculación incremental de una configuración de depuración de su programa.
Pavanizado
@pavanred ¿estás seguro de que el compilador de C # también realiza enlaces incrementales? Solo he oído hablar de eso en el mundo de C ++. En un proyecto C ++, habilita / deshabilita la vinculación incremental desde las propiedades del proyecto. ¿Hay alguna opción en el proyecto C # también?
RBT

Respuestas:

236

Un archivo PDB contiene información para que el depurador trabaje. Hay menos información en una versión de lanzamiento que en una versión de depuración de todos modos. Pero si desea que no se genere, vaya a las propiedades de compilación de su proyecto, seleccione la configuración de lanzamiento, haga clic en "Avanzado ..." y en "Información de depuración" seleccione "Ninguno".

Jon Skeet
fuente
2
@ Jon ¿Ayuda a proporcionar información adicional al usuario si la aplicación deja de funcionar? (es decir, ayuda con la ventana JIT, en lugar de "Este programa debe finalizar, enviar un informe de error de Windows")
Jared Harley
19
Tenga en cuenta que probablemente debería mantenerlos incluidos en sus versiones de depuración, ya que permite rastrear excepciones a una línea específica en su código. Sin los símbolos en el archivo pdb, le resultará difícil identificar problemas específicos para resolverlos. No necesariamente necesita excluirlos de las versiones de lanzamiento, ya que a veces la información adicional en un informe grande puede ser muy útil.
Darbio
44
@Jared: Sí, incluye un seguimiento de la pila de la excepción, que señalará una función específica y una línea de código.
Darbio
1
@Jared: ¿Qué quieres decir con "la ventana JIT"? Es poco probable que brinde mucha más información al usuario, pero puede permitirle adjuntar un depurador a una versión de lanzamiento si es necesario. Sin embargo, normalmente no lo incluirías para aplicaciones de usuario final. Por supuesto, solo porque esté copiado en la carpeta Release no significa que tenga que enviarlo en el instalador ...
Jon Skeet
3
@Ata: PDB, no PDF. Separe los dos en su mente: son formatos de archivo completamente diferentes, para diferentes propósitos. Incluir un PDB no introduciría un problema en particular; se puede hacer el trabajo de un hacker un poco más fácil, pero es que una preocupación especial para usted? En general, .NET se puede descompilar con relativa facilidad en la mayoría de los casos; si le preocupa eso, simplemente no enviar el PDB no es una buena solución.
Jon Skeet
130

Originalmente me hice la pregunta " ¿Necesito un archivo PDB implementado en la máquina de mi cliente? ", Y después de leer esta publicación, decidí excluir el archivo.

Todo funcionó bien, hasta hoy, cuando estaba tratando de averiguar por qué Exception.StackTracefaltaba un cuadro de mensaje que contenía un archivo y la información del número de línea, necesaria para solucionar la excepción. Volví a leer esta publicación y encontré la pepita de información clave: que aunque el PDB no es necesario para que la aplicación se ejecute, es necesario que los números de archivo y línea estén presentes en la StackTracecadena. Incluí el archivo PDB en la carpeta ejecutable y ahora todo está bien.

BCA
fuente
2
Esta es una parte muy importante a tener en cuenta que el accepted answeraquí no menciona.
Monku
85

PDB es una abreviatura de P rogram D ata B ase. Como su nombre lo indica, es un repositorio (almacenamiento persistente, como bases de datos) para mantener la información requerida para ejecutar su programa en modo de depuración. Contiene mucha información relevante importante requerida mientras depura su código (en Visual Studio), por ejemplo, en qué puntos ha insertado puntos de interrupción donde espera que el depurador se rompa en Visual Studio.

Esta es la razón por la cual muchas veces Visual Studio no alcanza los puntos de interrupción si elimina los *.pdbarchivos de sus carpetas de depuración. El depurador de Visual Studio también puede decirle el número de línea preciso del archivo de código en el que se produjo una excepción en un seguimiento de la pila con la ayuda de *.pdbarchivos. Así que, efectivamente, los archivos pdb son realmente una bendición para los desarrolladores al depurar un programa.

Generalmente no se recomienda excluir la generación de *.pdbarchivos. Desde el punto de vista de la versión de producción, lo que debe hacer es crear los archivos pdb pero no enviarlos al sitio del cliente en el instalador del producto. Conserve todos los archivos PDB generados en un servidor de símbolos desde donde se pueda usar / hacer referencia en el futuro si es necesario. Especialmente para casos en los que depura problemas como el bloqueo del proceso. Cuando comience a analizar los archivos de volcado de bloqueo y si sus *.pdbarchivos originales creados durante el proceso de compilación no se conservan, Visual Studio no podrá distinguir la línea exacta de código que está causando el bloqueo .

Si aún desea deshabilitar la generación de *.pdbarchivos por completo para cualquier versión, vaya a las propiedades del proyecto -> Pestaña Build -> Haga clic en el Advancedbotón -> Elija nonedel cuadro desplegable "Información de depuración" -> presione OKcomo se muestra en la instantánea a continuación .

Ninguna Configuración de información de depuración para un proyecto de C #

Nota : Esta configuración tendrá que hacerse por separado para las configuraciones de compilación "Debug" y "Release".

RBT
fuente
13

Un archivo PDB contiene información utilizada por el depurador. No es necesario que ejecute su aplicación y no es necesario que se incluya en su versión de lanzamiento.

Puede deshabilitar la creación de archivos pdb en Visual Studio. Si está construyendo desde la línea de comandos o un script, omita el /Debuginterruptor.

Mark Byers
fuente
2
El modo de lanzamiento todavía construye PDB por defecto, creo. Sin embargo, puede cambiar las propiedades del proyecto para deshabilitarlo.
Jon Skeet
Sip; todavía viene con el lanzamiento con un proyecto predeterminado.
Andrew Barber
Acabo de comprobar y también obtengo uno por defecto si uso Visual Studio.
Mark Byers
4

El programa Program Debug Database file (pdb) es un formato de archivo de Microsoft para almacenar información de depuración.

Cuando crea un proyecto utilizando Visual Studio o el símbolo del sistema, el compilador crea estos archivos de símbolos.

Consultar documentos de Microsoft

Nipuna
fuente