Hva er PDB-filformatet?
.pdb-filer inneholder en database for et program - spesifikt et strukturert lager av feilsøkingssymboler, kildekodemappinger og typeinformasjon produsert av Microsoft Visual C++-verktøykjeden. De brukes sammen med den samsvarende .exe eller .dll de ble kompilert fra; de er ikke innebygd i disse binærfilene, men distribuert som separate filer.
Feilsøkingsinformasjon
Feilsøkingssymboler lagret i .pdb-filer lar feilsøkingsverktøy (debuggere) formidle viktig informasjon om unntak, mappe minneadresser tilbake til linjenummer i kildekoden, og eksponere funksjons- og variabelnavn som er fjernet fra den endelige binærfilen. De er nyttige under feilsøking og feilretting i både utviklings- og produksjonsmiljøer.
Hvordan .pdb-filer opprettes
.pdb-filer genereres fra kildekofiler under kompileringsprosessen av MSVC-kompilatoren (cl.exe) og linkeren (link.exe). De er *ikke* et produkt av Just-In-Time (JIT)-kompilering - det er en vanlig misforståelse. Moderne .pdb-filer bruker den binære MSF 7.00 (Multi-Stream File)-beholderen introdusert med Visual Studio .NET. Hver .pdb er knyttet til sin binærfil via en GUID og en «Age»-teller; en .pdb fra et annet bygg vil ikke lastes. Fordi formatet er proprietært, kan bare dedikerte verktøy som Visual Studio, WinDbg eller llvm-pdbutil lese dem, selv om Microsoft har publisert en referanseimplementering.
Sikkerhet og trygghet
RISIKO: LOWEn PDB er passive data som leses av debuggere - den inneholder ingen kjørbar kode, så det er trygt å åpne en. Den virkelige bekymringen er konfidensialitet, ikke skadevare: en PDB avslører interne funksjonsnavn, kildekodestier og kodestruktur, så det å sende med eller lekke en eksponerer informasjon om programvarens indre (nyttig for de som driver med reverse-engineering). Hold utgivelses-PDB-er på en privat symbolserver i stedet for å bunte dem med produktet.
Formatdetaljer
i et nøtteskall- Palm OS Database (PalmPilot / eReader-bok) - PRC/PDB Palm-database - e-bøker og PDA-appdata (header '...' ved offset 0x3C); åpnes av Palm/eReader-verktøy, ikke Visual Studio.
- Protein Data Bank molekylær struktur - En PDB-fil i ren tekst som beskriver 3D-atomkoordinater for et molekyl; åpnes av PyMOL/Chimera/Jmol.
- Quicken pris/porteføljedata (.pdb) - Intuit Quicken skrev en .pdb-datafil - betydningen databasen feilaktig knyttet sin «Quicken»-åpner til.
Programmer som åpner PDB-filer
Tekniske detaljer
dyp spesifikasjon| Beholderformat | MSF (Multi-Stream File) - en sidebasert intern strømbeholder som holder flere navngitte datastrømmer i én enkelt fil |
| Filsignatur (magic bytes) | Starter med ASCII-strengen `Microsoft C/C++ MSF 7.00` etterfulgt av CR LF og spesifikke kontrollbyte ved offset 0; eldre PDB 2.0-filer starter med `Microsoft C/C++ program database 2.00` |
| Koding | Binær, «little-endian» bytereferanse gjennomgående |
| Interne strømmer | DBI (Debug Information), TPI/IPI (type- og ID-poster), offentlige og globale symbolstrømmer, symbolstrømmer per modul, og tabeller for kildekode/linjenummer-mapping |
| Binær koblingsnøkkel | GUID + Age-teller skrevet inn i både `.pdb` og feilsøkingsmappen til den tilhørende `.exe` eller `.dll`; et misforhold fører til at debuggeren avviser symbolfilen |
| Typisk filstørrelse | 100 KB til 500 MB; store native C++-prosjekter produserer rutinemessig `.pdb`-filer på flere hundre megabyte |
| Komprimering | Ingen - data er sidestrukturert, men ikke komprimert |
| Sidestørrelse | 4 KB sider i MSF 7.00 (BigMsf); den eldre MSF 2.0-beholderen brukte mindre sidestørrelser |
| Formatvarianter | PDB 2.00 (eldre JG-magi, MSVC 6.0 og tidligere); MSF 7.00 / BigMsf (Visual Studio .NET og fremover, gjeldende for C/C++); Portable PDB (separat plattformuavhengig format brukt av .NET/Roslyn) |
| Produserende verktøykjede | MSVC-kompilator (`cl.exe`) og linker (`link.exe`); utstedes også av Clang/LLVM når man målretter Windows med `/Z7` eller `/Zi` kompilatorflagg |
| Forbrukerverktøy | Visual Studio Debugger, WinDbg, DIA SDK, `llvm-pdbutil`, `dumpbin`; krasjanalyseverktøy som CrashPad og Breakpad symbolkonverterere |
| Støtte for symbolserver | `.pdb`-filer indekseres etter GUID + Age på en symbolserver (via `symstore.exe` eller kompatible servere); debuggere henter riktig kopi ved behov ved hjelp av nøkkelen fra binærfilens feilsøkingsmappe |
| Plattformstøtte | Innfødt på Windows; plattformuavhengig lesing via LLVM-verktøy (`llvm-pdbutil`, LLDB) på Linux og macOS |
| MIME-type | application/octet-stream (ingen dedikert registrert MIME-undertype) |
| Distribusjonsmønster | Én `.pdb` per byggmål (`.exe` eller `.dll`); distribuert som en separat fil ved siden av binærfilen eller lagret på en privat/offentlig symbolserver - ikke innebygd i selve binærfilen |
| Utgitt | 1990s (Microsoft Visual C++); MSF 7.00 container since Visual Studio .NET era |
| Siste versjon | MSF 7.00 ('BigMsf'); portable PDB used by .NET/Roslyn alongside it |
| Åpen standard | Ja · royalty-fri |
| Spesifikasjon | github.com |
PDB-konverteringer
Spørsmål og svar fra fellesskapet
spurt av brukereIngen spørsmål ennå - vær den første til å spørre om PDB-filer.
Ofte stilte spørsmål
Hva er en PDB-fil i Visual Studio?
Hvordan åpner jeg en .pdb-fil?
llvm-pdbutil eller DIA-baserte verktøy for å dumpe symbolene som tekst.