Wat is het PDB-bestandsformaat?
.pdb-bestanden bevatten een database voor een programma - specifiek een gestructureerde opslag van debug-symbolen, bronbestand-mappings en type-informatie geproduceerd door de Microsoft Visual C++ toolchain. Ze worden gebruikt in combinatie met de bijbehorende .exe of .dll waarvan ze zijn gecompileerd; ze zijn niet ingebed in die binaire bestanden, maar worden als afzonderlijke bestanden gedistribueerd.
Debugging-informatie
Debug-symbolen opgeslagen in .pdb-bestanden laten debuggers belangrijke informatie over uitzonderingen doorgeven, geheugenadressen terugkoppelen naar regelnummers in bronbestanden en functie- en variabelenamen blootleggen die uit het uiteindelijke binaire bestand zijn verwijderd. Ze zijn nuttig bij het oplossen van programmafouten en het aanpakken van fouten in zowel ontwikkel- als productieomgevingen.
Hoe .pdb-bestanden worden gemaakt
.pdb-bestanden worden gegenereerd uit bronbestanden tijdens het compilatieproces door de MSVC-compiler (cl.exe) en linker (link.exe). Ze zijn *geen* product van Just-In-Time (JIT) compilatie - dat is een veelvoorkomend misverstand. Moderne .pdb-bestanden gebruiken de MSF 7.00 (Multi-Stream File) binaire container die werd geïntroduceerd met Visual Studio .NET. Elke .pdb is gekoppeld aan zijn binaire bestand via een GUID en Age-teller; een .pdb van een andere build zal niet laden. Omdat het formaat eigendomsrechtelijk is beschermd, kunnen alleen speciale tools zoals Visual Studio, WinDbg of llvm-pdbutil ze lezen, hoewel Microsoft een referentie-implementatie heeft gepubliceerd.
Beveiliging & veiligheid
RISICO: LOWEen PDB bevat passieve gegevens die door debuggers worden gelezen - het bevat geen uitvoerbare code, dus het openen ervan is veilig. De echte zorg is vertrouwelijkheid, niet malware: een PDB onthult interne functienamen, bronbestandspaden en codestructuur, dus het verzenden of lekken ervan stelt informatie over de interne werking van uw software bloot (nuttig voor reverse-engineers). Bewaar release-PDB's op een privé-symboolserver in plaats van ze met het product te bundelen.
Formaatdetails
in een notendop- Palm OS Database (PalmPilot / eReader boek) - PRC/PDB Palm-database - e-books en PDA-app-gegevens (header '...' op offset 0x3C); geopend door Palm/eReader-tools, niet door Visual Studio.
- Protein Data Bank moleculaire structuur - Een PDB-bestand in platte tekst dat de 3D-atomaire coördinaten van een molecuul beschrijft; geopend door PyMOL/Chimera/Jmol.
- Quicken prijs/portfolio-gegevens (.pdb) - Intuit Quicken schreef een .pdb-gegevensbestand - de betekenis waaraan de database per vergissing zijn 'Quicken'-opener heeft gekoppeld.
Programma's die PDB-bestanden openen
Technische details
diepe specificaties| Containerformaat | MSF (Multi-Stream File) - een op pagina's gebaseerde interne stream-container die meerdere benoemde datastreams binnen één bestand bevat |
| Bestandssignatuur (magic bytes) | Begint met de ASCII-tekenreeks `Microsoft C/C++ MSF 7.00` gevolgd door CR LF en specifieke controlevariabelen op offset 0; legacy PDB 2.0-bestanden beginnen met `Microsoft C/C++ program database 2.00` |
| Codering | Binair, overal little-endian bytevolgorde |
| Interne streams | DBI (Debug Information), TPI/IPI (type- en ID-records), publieke en globale symboolstreams, symboolstreams per module, en mappingtabellen voor bronbestanden/regelnummers |
| Binaire koppelingssleutel | GUID + Age-teller geschreven in zowel de `.pdb` als de debug-directory van de bijbehorende `.exe` of `.dll`; een mismatch zorgt ervoor dat de debugger het symboolbestand weigert |
| Typische bestandsgrootte | 100 KB tot 500 MB; grote native C++ projecten produceren routinematig `.pdb`-bestanden van honderden megabytes |
| Compressie | Geen - gegevens zijn paginagestructureerd maar niet gecomprimeerd |
| Paginagrootte | 4 KB pagina's in MSF 7.00 (BigMsf); de oudere MSF 2.0-container gebruikte kleinere paginagrootten |
| Formaatvarianten | PDB 2.00 (legacy JG magic, MSVC 6.0 en eerder); MSF 7.00 / BigMsf (Visual Studio .NET en later, huidig voor C/C++); Portable PDB (afzonderlijk cross-platform formaat gebruikt door .NET/Roslyn) |
| Producent toolchain | MSVC-compiler (`cl.exe`) and linker (`link.exe`); ook uitgegeven door Clang/LLVM bij het targeten van Windows met `/Z7` of `/Zi` compiler-flags |
| Consumer tools | Visual Studio Debugger, WinDbg, DIA SDK, `llvm-pdbutil`, `dumpbin`; crash-analysetools zoals CrashPad en Breakpad symboolconverters |
| Ondersteuning voor symboolservers | `.pdb`-bestanden worden geïndexeerd op GUID + Age op een symboolserver (via `symstore.exe` of compatibele servers); debuggers halen de juiste kopie op aanvraag op met de sleutel uit de debug-directory van het binaire bestand |
| Platformondersteuning | Native op Windows; cross-platform uitlezen via LLVM-tools (`llvm-pdbutil`, LLDB) op Linux en macOS |
| MIME-type | application/octet-stream (geen specifiek geregistreerd MIME-subtype) |
| Implementatiepatroon | Eén `.pdb` per build-target (`.exe` of `.dll`); gedistribueerd als een apart bestand naast het binaire bestand of opgeslagen op een privé/publieke symboolserver - niet ingebed in het binaire bestand zelf |
| Uitgebracht | 1990s (Microsoft Visual C++); MSF 7.00 container since Visual Studio .NET era |
| Laatste versie | MSF 7.00 ('BigMsf'); portable PDB used by .NET/Roslyn alongside it |
| Open standaard | Ja · royaltyvrij |
| Specificatie | github.com |
PDB conversies
Community V&A
gevraagd door gebruikersNog geen vragen - wees de eerste om iets te vragen over PDB-bestanden.