Vad är filformatet PDB?
.pdb-filer innehåller en databas för ett program - specifikt ett strukturerat lager av felsökningssymboler, källkodsmappningar och typinformation som skapats av Microsoft Visual C++-verktygskedjan. De används tillsammans med den matchande .exe eller .dll de kompilerades ifrån; de är inte inbäddade i dessa binärfiler utan distribueras som separata filer.
Felsökningsinformation
Felsökningssymboler lagrade i .pdb-filer låter felsökare förmedla viktig information om undantag, mappa minnesadresser tillbaka till radnummer i källkodsfiler och exponera funktions- och variabelnamn som har rensats bort från den slutgiltiga binärfilen. De är till stor hjälp vid felsökning och åtgärdande av fel i både utvecklings- och produktionsmiljöer.
Hur .pdb-filer skapas
.pdb-filer genereras från källkodsfiler under kompileringsprocessen av MSVC-kompilatorn (cl.exe) och länkaren (link.exe). De är *inte* en produkt av Just-In-Time (JIT)-kompilering - vilket är en vanlig missuppfattning. Moderna .pdb-filer använder binärcontainern MSF 7.00 (Multi-Stream File) som introducerades med Visual Studio .NET. Varje .pdb är kopplad till sin binärfil via en GUID och en Age-räknare; en .pdb från en annan version kommer inte att läsas in. Eftersom formatet är proprietärt kan endast dedikerade verktyg som Visual Studio, WinDbg eller llvm-pdbutil läsa dem, även om Microsoft har publicerat en referensimplementering.
Säkerhet & trygghet
RISK: LOWEn PDB är passiv data som läses av felsökare - den innehåller ingen exekverbar kod, så det är säkert att öppna en. Den verkliga risken är konfidentialitet, inte skadlig kod: en PDB avslöjar interna funktionsnamn, sökvägar till källkodsfiler och kodstruktur, så att skicka med eller läcka en sådan exponerar information om din programvaras inre (vilket är användbart för reverse-engineering). Spara PDB-filer för lanseringsversioner på en privat symbolserver istället för att skicka med dem i produkten.
Formatdetaljer
i ett nötskal- Palm OS Database (PalmPilot / eReader-bok) - PRC/PDB Palm-databas - e-böcker och PDA-appdata (header '...' vid offset 0x3C); öppnas av Palm/eReader-verktyg, inte Visual Studio.
- Protein Data Bank molekylär struktur - En PDB-fil i klartext som beskriver 3D-atomkoordinater för en molekyl; öppnas av PyMOL/Chimera/Jmol.
- Quicken pris/portföljdata (.pdb) - Intuit Quicken skrev en .pdb-datafil - den betydelse som databasen felaktigt kopplade sitt «Quicken»-öppningsprogram till.
Program som öppnar PDB-filer
Tekniska detaljer
djup specifikation| Containerformat | MSF (Multi-Stream File) - en sidbaserad intern strömcontainer som håller flera namngivna dataströmmar inom en enda fil |
| Filsignatur (magic bytes) | Börjar med ASCII-strängen `Microsoft C/C++ MSF 7.00` följt av CR LF och specifika kontrollbytes vid offset 0; äldre PDB 2.0-filer börjar med `Microsoft C/C++ program database 2.00` |
| Kodning | Binär, little-endian byteordning genomgående |
| Interna strömmar | DBI (Debug Information), TPI/IPI (typ- och ID-poster), publika och globala symbolströmmar, symbolströmmar per modul samt tabeller för källkods- och radnummermappning |
| Binär länknyckel | GUID + Age-räknare skriven i både `.pdb` och felsökningskatalogen i dess parade `.exe` eller `.dll`; en missmatchning gör att felsökaren avvisar symbolfilen |
| Typisk filstorlek | 100 KB till 500 MB; stora nativa C++-projekt producerar rutinmässigt `.pdb`-filer på flera hundra megabyte |
| Komprimering | Ingen - data är sidstrukturerad men inte komprimerad |
| Sidstorlek | 4 KB-sidor i MSF 7.00 (BigMsf); den äldre MSF 2.0-containern använde mindre sidstorlekar |
| Formatvarianter | PDB 2.00 (äldre JG-magic, MSVC 6.0 och tidigare); MSF 7.00 / BigMsf (Visual Studio .NET och framåt, nuvarande för C/C++); Portable PDB (separat plattformsoberoende format som används av .NET/Roslyn) |
| Verktygskedja för produktion | MSVC-kompilatorn (`cl.exe`) och länkaren (`link.exe`); skapas även av Clang/LLVM vid målsättning för Windows med kompilatorflaggorna `/Z7` eller `/Zi` |
| Konsumentverktyg | Visual Studio Debugger, WinDbg, DIA SDK, `llvm-pdbutil`, `dumpbin`; kraschanalysverktyg som CrashPad och Breakpad-symbolkonverterare |
| Stöd för symbolserver | `.pdb`-filer indexeras med GUID + Age på en symbolserver (via `symstore.exe` eller kompatibla servrar); felsökare hämtar rätt kopia vid behov med hjälp av nyckeln från binärfilens felsökningskatalog |
| Plattformsstöd | Nativt på Windows; plattformsoberoende läsning via LLVM-verktyg (`llvm-pdbutil`, LLDB) på Linux och macOS |
| MIME-typ | application/octet-stream (ingen dedikerad registrerad MIME-undertyp) |
| Distributionsmönster | En `.pdb` per byggmål (`.exe` eller `.dll`); distribueras som en separat fil bredvid binärfilen eller lagras på en privat/offentlig symbolserver - inte inbäddad i själva binärfilen |
| Släppt | 1990s (Microsoft Visual C++); MSF 7.00 container since Visual Studio .NET era |
| Senaste version | MSF 7.00 ('BigMsf'); portable PDB used by .NET/Roslyn alongside it |
| Öppen standard | Ja · royaltyfri |
| Specifikation | github.com |
PDB-konverteringar
Frågor & svar
frågat av användareInga frågor än - bli den första att fråga om PDB-filer.