Qu'est-ce que le format de fichier PDB ?
Les fichiers .pdb contiennent une base de données pour un programme - plus précisément, un stockage structuré de symboles de débogage, de mappages de fichiers sources et d'informations de type produits par la chaîne d'outils Microsoft Visual C++. Ils sont utilisés conjointement avec le .exe ou la .dll correspondant à partir desquels ils ont été compilés ; ils ne sont pas intégrés dans ces binaires mais distribués sous forme de fichiers séparés.
Informations de débogage
Les symboles de débogage stockés dans les fichiers .pdb permettent aux débogueurs de relayer des informations importantes sur les exceptions, de mapper les adresses mémoire aux numéros de ligne des fichiers sources et d'exposer les noms de fonctions et de variables qui sont supprimés du binaire final. Ils sont utiles lors du dépannage du programme et de la résolution d'erreurs dans les environnements de développement et de production.
Comment les fichiers .pdb sont créés
Les fichiers .pdb sont générés à partir des fichiers sources pendant le processus de compilation par le compilateur MSVC (cl.exe) et l'éditeur de liens (link.exe). Ils ne sont *pas* le produit d'une compilation Just-In-Time (JIT) - c'est une idée reçue courante. Les fichiers .pdb modernes utilisent le conteneur binaire MSF 7.00 (Multi-Stream File) introduit avec Visual Studio .NET. Chaque .pdb est lié à son binaire via un GUID et un compteur d'âge (Age) ; un .pdb provenant d'une version différente ne se chargera pas. Comme le format est propriétaire, seuls des outils dédiés tels que Visual Studio, WinDbg ou llvm-pdbutil peuvent les lire, bien que Microsoft ait publié une implémentation de référence.
Sécurité et sûreté
RISQUE : LOWUn PDB est une donnée passive lue par les débogueurs - il ne contient aucun code exécutable, donc en ouvrir un est sûr. La véritable préoccupation est la confidentialité, pas les logiciels malveillants : un PDB révèle les noms de fonctions internes, les chemins des fichiers sources et la structure du code, donc en livrer ou en divulguer un expose des informations sur les rouages internes de votre logiciel (utiles pour l'ingénierie inverse). Conservez les PDB de version finale sur un serveur de symboles privé plutôt que de les regrouper avec le produit.
Détails du format
en bref- Base de données Palm OS (PalmPilot / livre eReader) - Base de données Palm PRC/PDB - livres électroniques et données d'applications PDA (en-tête '...' à l'offset 0x3C) ; ouvert par les outils Palm/eReader, pas Visual Studio.
- Structure moléculaire Protein Data Bank - Un fichier PDB en texte brut décrivant les coordonnées atomiques 3D d'une molécule ; ouvert par PyMOL/Chimera/Jmol.
- Données de prix/portefeuille Quicken (.pdb) - Intuit Quicken écrivait un fichier de données .pdb - la signification à laquelle la base de données a par erreur attaché son ouvreur « Quicken ».
Programmes qui ouvrent les fichiers PDB
Détails techniques
spécifications approfondies| Format de conteneur | MSF (Multi-Stream File) - un conteneur de flux interne basé sur des pages qui contient plusieurs flux de données nommés dans un seul fichier |
| Signature de fichier (octets magiques) | Commence par la chaîne ASCII `Microsoft C/C++ MSF 7.00` suivie de CR LF et d'octets de contrôle spécifiques à l'offset 0 ; les fichiers hérités PDB 2.0 commencent par `Microsoft C/C++ program database 2.00` |
| Encodage | Binaire, ordre des octets petit-boutiste (little-endian) partout |
| Flux internes | DBI (Debug Information), TPI/IPI (enregistrements de types et d'ID), flux de symboles publics et globaux, flux de symboles par module, et tables de mappage source/numéro de ligne |
| Clé de liaison binaire | GUID + compteur d'âge écrit à la fois dans le `.pdb` et dans le répertoire de débogage de son `.exe` ou `.dll` associé ; une discordance entraîne le rejet du fichier de symboles par le débogueur |
| Taille de fichier typique | 100 Ko à 500 Mo ; les grands projets C++ natifs produisent couramment des fichiers `.pdb` de plusieurs centaines de mégaoctets |
| Compression | Aucune - les données sont structurées en pages mais non compressées |
| Taille de page | Pages de 4 Ko dans MSF 7.00 (BigMsf) ; l'ancien conteneur MSF 2.0 utilisait des tailles de page plus petites |
| Variantes de format | PDB 2.00 (magie JG héritée, MSVC 6.0 et antérieur) ; MSF 7.00 / BigMsf (Visual Studio .NET et versions ultérieures, actuel pour C/C++) ; Portable PDB (format multiplateforme distinct utilisé par .NET/Roslyn) |
| Chaîne d'outils de production | Compilateur MSVC (`cl.exe`) et éditeur de liens (`link.exe`) ; également émis par Clang/LLVM lors du ciblage de Windows avec les drapeaux de compilation `/Z7` ou `/Zi` |
| Outils de consommation | Visual Studio Debugger, WinDbg, DIA SDK, `llvm-pdbutil`, `dumpbin` ; outils d'analyse de plantage tels que les convertisseurs de symboles CrashPad et Breakpad |
| Support de serveur de symboles | Les fichiers `.pdb` sont indexés par GUID + Age sur un serveur de symboles (via `symstore.exe` ou des serveurs compatibles) ; les débogueurs récupèrent la copie correcte à la demande en utilisant la clé du répertoire de débogage du binaire |
| Support plateforme | Natif sur Windows ; lecture multiplateforme via les outils LLVM (`llvm-pdbutil`, LLDB) sur Linux et macOS |
| Type MIME | application/octet-stream (pas de sous-type MIME enregistré dédié) |
| Modèle de déploiement | Un `.pdb` par cible de compilation (`.exe` ou `.dll`) ; distribué comme un fichier séparé à côté du binaire ou stocké sur un serveur de symboles privé/public - non intégré dans le binaire lui-même |
| Publié | 1990s (Microsoft Visual C++); MSF 7.00 container since Visual Studio .NET era |
| Dernière version | MSF 7.00 ('BigMsf'); portable PDB used by .NET/Roslyn alongside it |
| Standard ouvert | Oui · libre de droits |
| Spécification | github.com |
Conversions PDB
Q&R de la communauté
posées par les utilisateursPas encore de questions - soyez le premier à poser une question sur les fichiers PDB.