2010-09-26 8 views
13

me estoy confundido en cuanto a lo que es la diferencia entre el compilador y el enlazador PDB archivos respectivamente (es decir, en Visual Studio, Project Properties > C/C++ > Output Files > Program Database File NamevsProject Properties > Linker > Debugging). He intentado encontrar la respuesta en línea y hasta ahora sé (puede estar equivocado) que se genera un archivo PDB por el compilador para los archivos obj, mientras que el archivo PDB del enlazador se genera para el archivo binario (exe o dll) y es el uno utilizado para la depuración.archivo PDB compilador y el enlazador AP archivo

Si eso no es cierto, explique la diferencia. De cualquier manera, qué hacer cuando estoy creando un DLL donde tengo la opción de seleccionar el archivo de salida PDB para el compilador, así como el enlazador y qué hacer cuando estoy creando un archivo LIB donde solo el compilador genera los archivos PDB ya que no hay enlaces realizados.

Antecedentes: Las bibliotecas/archivos DLL son utilizados por varios proyectos, que luego necesitan los archivos PDB para la depuración. En el caso de un archivo lib, no hay ambigüedad, ya que solo se genera un archivo PDB. Pero en el caso de un DLL, ¿necesito los archivos PDB para depurar correctamente o solo el generado por el vinculador?

Respuesta

12

Sinceramente, no sé qué es exactamente el archivo .pdb generada por el proceso de compilación se utiliza para - Asumo que es un poco de información intermedia el se detuvo en el archivo final .pdb por el enlazador.

Sin embargo, la conclusión es que para fines de depuración todo lo que necesita es el archivo .pdb producido por el vinculador.


Actualización: Un poco de excavación anotó esto desde http://blogs.msdn.com/b/yash/archive/2007/10/12/pdb-files-what-are-they-and-how-to-generate-them.aspx:

¿Cuáles son los dos tipos de archivos PDB?

==============================

Hay dos tipos de archivos PDB. Uno generado por el compilador denominado VCx0.PDB (por ejemplo, vc80.pdb) y otro el .PDB. El archivo VCx0.PDB es generado por el compilador y está relacionado con el archivo .OBJ . Contiene la información de tipo solamente.

Los archivos .PDB son generado por el enlazador y es relacionados con el ejecutable de destino o la DLL. Este archivo contiene la información de depuración completa . Cuando estamos depurando , necesitamos este archivo '.pdb' para alinear los símbolos. La marca de tiempo del archivo de destino y el PDB deben coincidir.

+0

(Realizado esto antes de su actualización, pero se aplica a la actualización también) Así que cuando se crea el archivo 'lib' (es decir, una biblioteca estática), y sólo el compilador puede generar el' AP 'archivo porque el enlazador ya no es necesario, ¿significa que ahora el archivo' pdb' generado por el compilador es el necesario para la depuración? – Samaursa

+1

.Lib archivos no están involucrados en la ejecución o depuración de un programa. Son solo entradas para el enlazador. Las 'cosas' apropiadas en un archivo lib se hacen parte del binario (en el caso de una biblioteca estática) o se usan para crear enlaces dinámicos a archivos DLL (en el caso de una biblioteca de importación). En cualquiera de esos casos, el archivo .pdb que necesitaría para la depuración es el producido por el vinculador cuando se produce el archivo .exe o .dll real. –

+1

Genial, gracias por elaborar Michael, voy a seguir adelante y comprobar esto como la respuesta correcta. Aunque ya que estamos en el tema, si puede responder esto. Havok SDK está vinculado estáticamente, y todas sus bibliotecas vienen con sus respectivos archivos 'PDB'. Lo interesante es que, si enlazas las bibliotecas sin los archivos 'PDB' que las acompañan en el mismo directorio, entonces Visual Studio da un montón de advertencias de que' Falta información de depuración, compilando como si no hubiera información de depuración' (Yo soy paráfrasis) – Samaursa

Cuestiones relacionadas