Was ist das PDB-Dateiformat?
.pdb-Dateien enthalten eine Datenbank für ein Programm - konkret einen strukturierten Speicher von Debug-Symbolen, Quelldatei-Zuordnungen und Typinformationen, der vom Microsoft-Visual-C++-Toolchain erzeugt wird. Sie werden zusammen mit der passenden .exe- oder .dll-Datei verwendet, mit der sie kompiliert wurden; sie sind nicht in diese Binärdateien eingebettet, sondern als separate Dateien verteilt.
Debugging-Informationen
In .pdb-Dateien gespeicherte Debug-Symbole ermöglichen es Debuggern, wichtige Informationen zu Ausnahmen weiterzugeben, Speicheradressen auf Quelldatei-Zeilennummern zurückzuverfolgen und Funktions- und Variablennamen offenzulegen, die aus der finalen Binärdatei entfernt wurden. Sie sind bei der Fehlerbehebung sowohl in Entwicklungs- als auch in Produktionsumgebungen hilfreich.
Wie .pdb-Dateien erstellt werden
.pdb-Dateien werden während des Kompilierungsprozesses vom MSVC-Compiler (cl.exe) und Linker (link.exe) aus Quelldateien generiert. Sie sind *kein* Produkt der Just-in-Time-Kompilierung (JIT) - das ist ein weit verbreitetes Missverständnis. Moderne .pdb-Dateien verwenden den mit Visual Studio .NET eingeführten MSF-7.00-Container (Multi-Stream File). Jede .pdb ist über eine GUID und einen Age-Zähler mit ihrer Binärdatei verknüpft; eine .pdb aus einem anderen Build wird nicht geladen. Da das Format proprietär ist, können es nur dedizierte Werkzeuge wie Visual Studio, WinDbg oder llvm-pdbutil lesen, obwohl Microsoft eine Referenzimplementierung veröffentlicht hat.
Sicherheit
RISIKO: LOWEine PDB ist passive Daten, die von Debuggern gelesen werden - sie enthält keinen ausführbaren Code, daher ist das Öffnen sicher. Das eigentliche Problem ist Vertraulichkeit, nicht Schadsoftware: Eine PDB enthüllt interne Funktionsnamen, Quelldateipfade und Codestruktur - das Ausliefern oder Preisgeben einer PDB legt Informationen über die Interna Ihrer Software offen (nützlich für Reverse-Engineer). Bewahren Sie Release-PDBs auf einem privaten Symbolserver auf, anstatt sie mit dem Produkt zu bündeln.
Formatdetails
kurz gefasst- Palm OS Database (PalmPilot / eReader-E-Book) - PRC/PDB Palm-Datenbank - E-Books und PDA-App-Daten (Header '...' bei Offset 0x3C); mit Palm/eReader-Werkzeugen geöffnet, nicht mit Visual Studio.
- Protein Data Bank Molekülstruktur - Eine Klartextdatei im PDB-Format, die 3D-Atomkoordinaten eines Moleküls beschreibt; geöffnet von PyMOL/Chimera/Jmol.
- Quicken Preis-/Portfoliodaten (.pdb) - Intuit Quicken schrieb eine .pdb-Datendatei - die Bedeutung, die die Datenbank fälschlicherweise an den „Quicken“-Öffner geknüpft hat.
Programme zum Öffnen von PDB-Dateien
Technische Details
technische Spezifikation| Container-Format | MSF (Multi-Stream File) - ein seitenbasierter interner Stream-Container, der mehrere benannte Datenströme in einer einzigen Datei enthält |
| Dateisignatur (Magic Bytes) | Beginnt mit der ASCII-Zeichenkette `Microsoft C/C++ MSF 7.00` gefolgt von CR LF und spezifischen Steuer-Bytes bei Offset 0; ältere PDB-2.0-Dateien beginnen mit `Microsoft C/C++ program database 2.00` |
| Codierung | Binär, Little-Endian-Bytereihenfolge durchgehend |
| Interne Streams | DBI (Debug-Informationen), TPI/IPI (Typ- und ID-Datensätze), öffentliche und globale Symbol-Streams, modulbezogene Symbol-Streams und Quell-/Zeilennummer-Zuordnungstabellen |
| Binärer Verknüpfungsschlüssel | GUID + Age-Zähler, sowohl in die `.pdb` als auch in das Debug-Verzeichnis der zugehörigen `.exe` oder `.dll` geschrieben; eine Nichtübereinstimmung führt dazu, dass der Debugger die Symboldatei ablehnt |
| Typische Dateigröße | 100 KB bis 500 MB; große native C++-Projekte erzeugen routinemäßig `.pdb`-Dateien mit mehreren Hundert Megabyte |
| Komprimierung | Keine - Daten sind seitenstrukturiert, aber nicht komprimiert |
| Seitengröße | 4-KB-Seiten in MSF 7.00 (BigMsf); der ältere MSF-2.0-Container verwendete kleinere Seitengrößen |
| Formatvarianten | PDB 2.00 (Legacy-JG-Magic, MSVC 6.0 und früher); MSF 7.00 / BigMsf (Visual Studio .NET und später, aktuell für C/C++); Portable PDB (separates plattformübergreifendes Format für .NET/Roslyn) |
| Erzeugender Toolchain | MSVC-Compiler (`cl.exe`) und Linker (`link.exe`); auch von Clang/LLVM ausgegeben, wenn Windows mit den Compiler-Flags `/Z7` oder `/Zi` als Ziel verwendet wird |
| Verwendende Werkzeuge | Visual Studio Debugger, WinDbg, DIA SDK, `llvm-pdbutil`, `dumpbin`; Absturzanalyse-Werkzeuge wie CrashPad und Breakpad-Symbol-Konverter |
| Symbolserver-Unterstützung | `.pdb`-Dateien werden auf einem Symbolserver nach GUID + Age indiziert (über `symstore.exe` oder kompatible Server); Debugger rufen auf Anfrage die richtige Kopie mithilfe des Schlüssels aus dem Debug-Verzeichnis der Binärdatei ab |
| Plattformunterstützung | Nativ unter Windows; plattformübergreifendes Lesen über LLVM-Werkzeuge (`llvm-pdbutil`, LLDB) unter Linux und macOS |
| MIME-Typ | application/octet-stream (kein eigener registrierter MIME-Untertyp) |
| Verteilungsmuster | Eine `.pdb` pro Build-Ziel (`.exe` oder `.dll`); als separate Datei neben der Binärdatei verteilt oder auf einem privaten/öffentlichen Symbolserver gespeichert - nicht in die Binärdatei eingebettet |
| Veröffentlicht | 1990s (Microsoft Visual C++); MSF 7.00 container since Visual Studio .NET era |
| Neueste Version | MSF 7.00 ('BigMsf'); portable PDB used by .NET/Roslyn alongside it |
| Offener Standard | Ja · lizenzgebührenfrei |
| Spezifikation | github.com |
PDB-Konvertierungen
Community Q&A
von Nutzern gefragtNoch keine Fragen - stellen Sie die erste Frage zu PDB-Dateien.