Hier, j'ai parcouru les projets de notre société et les ai mis à jour pour corriger une erreur (AFAIK) dans la façon dont nous les avons configurés.Générer des fichiers PDB correctement pour une DLL native en utilisant Visual Studio 2013
Le problème est que dans les pages de propriétés pour les projets, sous Configuration Properties -> C/C++ -> Output Files
, nous avons mis Program Database File Name
-$(OutDir)$(TargetName).pdb
, la même valeur nous avions mis Configuration Properties -> Linker -> Debugging -> Generate Program Database File
. Ma compréhension est que la première propriété définit l'emplacement du fichier pdb qui contient des symboles pour les fichiers objets créés lors de la compilation de la source, tandis que le second définit l'emplacement du fichier pdb qui contient des symboles pour la DLL générée. Est-ce exact? Pour éviter qu'ils ne soient en conflit (je suppose que c'est indésirable), j'ai mis la première propriété à $(IntDir)$(TargetName).pdb
, mais cela a brisé le fichier pdb résultant (ie un débogueur ne le reconnaît pas comme le fichier pdb de la DLL, et un collègue a exécuté un outil dessus, et la signature ne correspond pas à celle contenue dans le binaire).
La chose étrange est que l'utilisation de la valeur $(IntDir)$(TargetName)2.pdb
(notez le suffixe '2') résout le problème. Je ne comprends pas pourquoi le nom du fichier intermédiaire aurait de l'importance?
Notez que Configuration Properties -> C/C++ -> General -> Debug Information Format
est réglé sur Program Database (/Zi)
Les symboles du module actuel sont contenus dans le fichier: Linker -> Debugging -> Générer le fichier de base de données du programme. (https://msdn.microsoft.com/en-us/library/kwx19e36(v=vs.120).aspx) Ce que vous devez utiliser lors du débogage. – Nandu
Microsoft a fait une erreur il y a très, très longtemps, le genre qu'ils ne peuvent jamais réparer. Ce fichier .pdb n'est pas destiné au débogueur et ne contient pas d'informations de débogage. Le compilateur l'utilise pour garder trace des builds, destinées à accélérer les builds suivants. Changer le réglage n'est pas utile. –
Lequel, l'un sous l'éditeur de liens, ou celui sous C++? Avez-vous un lien vers la documentation pertinente? – Bwmat