2010-09-26 5 views
13

Je reçois confus quant à ce qui est la différence entre le compilateur et les fichiers de liaison PDB respectivement (par exemple dans Visual Studio, Project Properties > C/C++ > Output Files > Program Database File NamevsProject Properties > Linker > Debugging). J'ai essayé de trouver la réponse en ligne et jusqu'ici je sais (peut-être tort) qu'un fichier PDB par le compilateur est généré pour les fichiers obj tandis que le fichier PDB par l'éditeur de liens est généré pour le binaire (exe ou dll) et est le un utilisé pour le débogage.compilateur fichier PDB et le fichier Linker APB

Si ce n'est pas vrai, veuillez expliquer la différence. Que faire quand je crée un DLL où j'ai l'option pour sélectionner le fichier de sortie PDB pour le compilateur ainsi que l'éditeur de liens et quoi faire quand je crée un fichier LIB où seul le compilateur génère les fichiers PDB car il n'y a pas de liaison effectuée.

Contexte: Les bibliothèques/dll sont utilisés par plusieurs projets, qui doivent ensuite les PDB fichiers pour le débogage. Dans le cas d'un fichier lib, il n'y a aucune ambiguïté car il n'y a qu'un seul fichier PDB généré. Mais dans le cas d'un DLL cependant, ai-je besoin des deux fichiers PDB pour déboguer correctement ou juste celui généré par l'éditeur de liens?

Répondre

12

Honnêtement, je ne sais pas exactement ce que le fichier pdb généré par l'étape de compilation est utilisé pour - Je suppose que c'est des informations intermédiaire SEAOG tiré dans le fichier .pdb finale par l'éditeur de liens. Toutefois, la ligne de fond est que pour le débogage, tout ce dont vous avez besoin est le fichier .pdb produit par l'éditeur de liens.


Mise à jour: creuser un peu de ce http://blogs.msdn.com/b/yash/archive/2007/10/12/pdb-files-what-are-they-and-how-to-generate-them.aspx compensés:

Quels sont les deux types de fichiers .pdb?

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

Il existe deux types de fichiers PDB. Un généré par le compilateur nommé VCx0.PDB (par exemple vc80.pdb), et un autre le .PDB. Le fichier VCx0.PDB est généré par le compilateur et il est associé au fichier .OBJ . Il contient uniquement les informations de type .

Les fichiers .pdb sont générés par l'éditeur de liens et il est lié avec l'exécutable cible ou la DLL. Ce fichier contient les informations complètes de débogage . Lorsque nous sommes débogage, nous avons besoin de ce fichier '.pdb' pour l'alignement aux symboles. L'horodatage du fichier cible et le PDB doivent correspondre.

+0

(publié ce billet avant votre mise à jour, mais il en va de la mise à jour aussi) Alors, quand je crée le fichier 'lib' (qui est une bibliothèque statique), et seul le compilateur peut générer le' pdb 'fichier puisque le lieur n'est plus nécessaire, cela signifie-t-il que maintenant le fichier' pdb' généré par le compilateur est celui nécessaire au débogage? – Samaursa

+1

Les fichiers .lib ne sont pas impliqués dans l'exécution ou le débogage d'un programme. Ils ne sont que des entrées pour l'éditeur de liens. Le 'stuff' approprié dans un fichier lib est fait partie du binaire (dans le cas d'une bibliothèque statique) ou est utilisé pour créer des liens dynamiques vers des DLL (dans le cas d'une bibliothèque d'importation). Dans l'un de ces cas, le fichier .pdb dont vous avez besoin pour le débogage est celui produit par l'éditeur de liens lorsque le fichier .exe ou .dll réel est produit. –

+1

Génial, merci d'avoir élaboré Michael, je vais aller de l'avant et vérifier cela comme la bonne réponse. Bien que nous soyons sur le sujet, si vous pouvez répondre à cela. Havok SDK est lié statiquement, et toutes ses bibliothèques viennent avec leurs fichiers respectifs 'PDB'. Ce qui est intéressant, c'est que si vous liez les bibliothèques sans les fichiers 'PDB' qui les accompagnent dans le même répertoire, Visual Studio donne une tonne d'avertissements que' Info de débogage est manquante, compilant comme si aucune information de débogage n'était fournie '(je suis paraphrasant) – Samaursa

Questions connexes