Dans VS2010, il existe une option pour générer des informations de débogage pour les exes/DLL sous linker mais aucune option de ce type sous bibliothécaire pour les bibliothèques. Les informations de débogage sont-elles intégrées dans la bibliothèque statique?
Il existe une option dans les propriétés C/C++ pour Program Database File Name pour les bibliothèques, les exes et les dll. Par défaut, il va dans mon répertoire intermédiaire et est nommé le nom du projet pour les bibliothèques, mais est nommé vc $ (PlatformToolsetVersion) .pdb pour exes/dlls. Quel est le pdb de cette option et en quoi diffère-t-il du pdb dans l'option de l'éditeur de liens?
Si je fournis une bibliothèque avec des bibliothèques et des en-têtes, comment puis-je fournir des symboles de débogage à un utilisateur de ma bibliothèque?
Si vous utilisez /ZI
Ou /Zi
(C/C++
-> General
-> Debug Information Format
), Alors la fonction vc$(PlatformToolsetVersion).pdb
est créé, qui contient les informations de débogage pour tous les fichiers .obj
créés. Si vous utilisez alternativement /Z7
, Les informations de débogage seront incorporées dans le fichier .obj
, Puis incorporées dans .lib
. C'est probablement le moyen le plus simple de distribuer les informations de débogage pour un bibliothèque statique.
Cependant, je ne conseillerais pas de distribuer une bibliothèque statique, car elle est généralement liée à une version spécifique du compilateur.
Développant les réponses précédentes, pour ceux qui ont besoin du mode d'emploi complet (VS 2013).
Notez que cela devrait répondre aux commentaires ^^ ci-dessus concernant les problèmes VS2013.
Méthode 1: La façon dont la base de données du programme (.pdb) (/ Zi ou/ZI)
Projet de bibliothèque statique: Générez une pdb avec le même nom que votre bibliothèque statique:
Solution Explorer
Dans le menu View
.Properties
Configuration Properties
-> C/C++
-> General
-> Debug Information
En /Zi
Ou /ZI
/ZI
Permet l'édition "Modifier et continuer" pendant le débogageConfiguration Properties
-> C/C++
-> Output Files
-> Program Database File Name
En $(OutDir)$(TargetName).pdb
Projet d'application: Liez votre exécutable à la bibliothèque statique et au nouveau fichier PDB :
Debug Information
Selon vos besoins.Configuration Properties
-> Linker
-> General
-> Additional Library Directories
, En ajoutant votre propre répertoire "libs", ou tout répertoire que vous prévoyez de conserver/copier votre Fichiers YourLib.lib et YourLib.pdb.Configuration Properties
-> Linker
-> Input
-> Additional Dependencies
, En ajoutant YourLib.lib
(Pas de chemin devant)Méthode 2: La méthode des symboles intégrés (pas de .pdb) (/ Z7)
Projet de bibliothèque statique: Générez une bibliothèque statique avec des symboles de débogage intégrés
Debug Information
, mais cette fois en /Z7
Projet d'application: Liez votre exécutable avec la bibliothèque statique
Debug Information
Selon vos besoinsAdditional Library Directories
Additional Dependencies
Additional Library Directories
Discussion:
Debug Information
Pour le projet d'application? Ce message concerne la façon de faire déboguer le code lib statique. Le même choix "Méthode 1 vs Méthode 2" s'applique également au projet Application.Je remarque dans VS2013 qu'il est possible de définir le nom du fichier de base de données du programme dans l'onglet Fichiers de sortie C/C++. Le changer par défaut en quelque chose comme $ (OutDir) $ (TargetName) .pdb résout le problème
Les bibliothèques statiques sont implémentées dans les programmes qui les utilisent.
Si le programme qui les utilise utilise des symboles de débogage, le code de bibliothèque compilé dans ce programme aura également des symboles.
Informations PDB de wikipedia:
Lorsque les symboles de débogage sont incorporés dans le binaire lui-même, le fichier peut alors devenir considérablement plus volumineux (parfois de plusieurs mégaoctets). Pour éviter cette taille supplémentaire, les compilateurs modernes et les premiers systèmes de débogage de mainframe produisent les informations symboliques dans un fichier séparé; pour les compilateurs Microsoft, ce fichier est appelé fichier PDB.
Comportement étrange dans VS2012. Construire à partir de zéro (ou avec l'option/A dans nmake) produira un fichier .pdb. Maintenant, supprimez les fichiers .lib et .pdb et réexécutez nmake (sans/A bien sûr, pour exécuter uniquement le lien) et aucun fichier .pdb n'est généré.