Hvad er PDB-filformatet?
.pdb-filer indeholder en database for et program - specifikt et struktureret lager af debug-symboler, kilde-fil-mappings og typeinformation produceret af Microsoft Visual C++-toolchainen. De bruges sammen med den matchende .exe eller .dll, de blev kompileret fra; de er ikke indlejret i disse binære filer, men distribueres som separate filer.
Debugging-information
Debug-symboler gemt i .pdb-filer lader debuggere videregive vigtige oplysninger om undtagelser, mappe hukommelsesadresser tilbage til kilde-fil-linjenumre og eksponere funktions- og variabelnavne, der er fjernet fra den endelige binære fil. De er nyttige under fejlfinding af programmer og fejlhåndtering i både udviklings- og produktionsmiljøer.
Hvordan .pdb-filer oprettes
.pdb-filer genereres fra kilde-filer under kompileringsprocessen af MSVC-compileren (cl.exe) og linkeren (link.exe). De er *ikke* et produkt af Just-In-Time (JIT) kompilering - det er en almindelig misforståelse. Moderne .pdb-filer bruger MSF 7.00 (Multi-Stream File) binær-containeren introduceret med Visual Studio .NET. Hver .pdb er knyttet til sin binære fil via en GUID og Age-tæller; en .pdb fra et andet build vil ikke blive indlæst. Da formatet er proprietært, kan kun dedikerede værktøjer som Visual Studio, WinDbg eller llvm-pdbutil læse dem, selvom Microsoft har udgivet en referenceimplementering.
Sikkerhed og tryghed
RISIKO: LOWEn PDB er passive data, der læses af debuggere - den indeholder ingen eksekverbar kode, så det er sikkert at åbne en. Den reelle bekymring er fortrolighed, ikke malware: en PDB afslører interne funktionsnavne, kilde-filstier og kodestruktur, så forsendelse eller lækage af en eksponerer oplysninger om din softwares indre (nyttigt for reverse-engineers). Gem release-PDB-filer på en privat symbol-server i stedet for at pakke dem sammen med produktet.
Formatdetaljer
kort fortalt- Palm OS Database (PalmPilot / eReader bog) - PRC/PDB Palm-database - e-bøger og PDA-app-data (header '...' ved offset 0x3C); åbnes af Palm/eReader-værktøjer, ikke Visual Studio.
- Protein Data Bank molekylær struktur - En almindelig tekst-PDB-fil, der beskriver 3D-atomkoordinater for et molekyle; åbnes af PyMOL/Chimera/Jmol.
- Quicken pris/portefølje-data (.pdb) - Intuit Quicken skrev en .pdb-datafil - betydningen som databasen fejlagtigt knyttede sin 'Quicken'-åbner til.
Programmer der åbner PDB-filer
Tekniske detaljer
dyb specifikation| Containerformat | MSF (Multi-Stream File) - en sidebaseret intern stream-container, der indeholder flere navngivne datastrømme i en enkelt fil |
| Filsignatur (magic bytes) | Starter med ASCII-strengen `Microsoft C/C++ MSF 7.00` efterfulgt af CR LF og specifikke kontrol-bytes ved offset 0; ældre PDB 2.0-filer begynder med `Microsoft C/C++ program database 2.00` |
| Kodning | Binær, little-endian byte-rækkefølge overalt |
| Interne strømme | DBI (Debug Information), TPI/IPI (type- og ID-poster), offentlige og globale symbolstrømme, symbolstrømme pr. modul og kilde-/linjenummer-mappingtabeller |
| Binær link-nøgle | GUID + Age-tæller skrevet i både `.pdb` og debug-mappen i dens parrede `.exe` eller `.dll`; et mismatch får debuggeren til at afvise symbolfilen |
| Typisk filstørrelse | 100 KB til 500 MB; store native C++-projekter producerer rutinemæssigt `.pdb`-filer på flere hundrede megabyte |
| Komprimering | Ingen - data er sidestruktureret, men ikke komprimeret |
| Sidestørrelse | 4 KB sider i MSF 7.00 (BigMsf); den ældre MSF 2.0-container brugte mindre sidestørrelser |
| Formatvarianter | PDB 2.00 (ældre JG-magic, MSVC 6.0 og tidligere); MSF 7.00 / BigMsf (Visual Studio .NET og frem, nuværende for C/C++); Portable PDB (separat cross-platform format brugt af .NET/Roslyn) |
| Producent-toolchain | MSVC-compiler (`cl.exe`) og linker (`link.exe`); udsendes også af Clang/LLVM, når der målrettes mod Windows med `/Z7` eller `/Zi` compiler-flags |
| Forbrugerværktøjer | Visual Studio Debugger, WinDbg, DIA SDK, `llvm-pdbutil`, `dumpbin`; crash-analyseværktøjer såsom CrashPad og Breakpad symbol-konvertere |
| Symbol-server support | `.pdb`-filer indekseres efter GUID + Age på en symbol-server (via `symstore.exe` eller kompatible servere); debuggere henter den korrekte kopi efter behov ved hjælp af nøglen fra den binære fils debug-mappe |
| Platformsupport | Native på Windows; cross-platform læsning via LLVM-værktøjer (`llvm-pdbutil`, LLDB) på Linux og macOS |
| MIME-type | application/octet-stream (ingen dedikeret registreret MIME-undertype) |
| Implementeringsmønster | Én `.pdb` pr. build-mål (`.exe` eller `.dll`); distribueret som en separat fil sammen med den binære fil eller gemt på en privat/offentlig symbol-server - ikke indlejret i selve den binære fil |
| Udgivet | 1990s (Microsoft Visual C++); MSF 7.00 container since Visual Studio .NET era |
| Seneste version | MSF 7.00 ('BigMsf'); portable PDB used by .NET/Roslyn alongside it |
| Åben standard | Ja · royaltyfri |
| Specifikation | github.com |
PDB-konverteringer
Fællesskabets Q&A
spurgt af brugereIngen spørgsmål endnu - vær den første til at spørge om PDB-filer.