Che cos'è il formato di file PDB?
I file .pdb contengono un database per un programma - nello specifico, un archivio strutturato di simboli di debug, mappature dei file sorgente e informazioni sui tipi prodotte dalla toolchain Microsoft Visual C++. Vengono utilizzati insieme al relativo .exe o .dll da cui sono stati compilati; non sono incorporati all'interno di tali binari ma distribuiti come file separati.
Informazioni di debug
I simboli di debug memorizzati nei file .pdb consentono ai debugger di trasmettere informazioni importanti sulle eccezioni, mappare gli indirizzi di memoria ai numeri di riga dei file sorgente ed esporre nomi di funzioni e variabili che vengono rimossi dal binario finale. Sono utili durante la risoluzione dei problemi del programma e la gestione degli errori sia in ambienti di sviluppo che di produzione.
Come vengono creati i file .pdb
I file .pdb vengono generati dai file sorgente durante il processo di compilazione dal compilatore MSVC (cl.exe) e dal linker (link.exe). *Non* sono un prodotto della compilazione Just-In-Time (JIT) - questo è un malinteso comune. I moderni file .pdb utilizzano il contenitore binario MSF 7.00 (Multi-Stream File) introdotto con Visual Studio .NET. Ogni .pdb è collegato al suo binario tramite un GUID e un contatore Age; un .pdb di una build diversa non verrà caricato. Poiché il formato è proprietario, solo strumenti dedicati come Visual Studio, WinDbg o llvm-pdbutil possono leggerli, sebbene Microsoft abbia pubblicato un'implementazione di riferimento.
Sicurezza e incolumità
RISCHIO: LOWUn PDB è un dato passivo letto dai debugger - non contiene codice eseguibile, quindi aprirne uno è sicuro. La vera preoccupazione è la riservatezza, non il malware: un PDB rivela nomi di funzioni interne, percorsi dei file sorgente e struttura del codice, quindi distribuire o far trapelare uno di essi espone informazioni sugli interni del software (utili per il reverse engineering). Conserva i PDB di rilascio su un server di simboli privato invece di includerli nel prodotto.
Dettagli del formato
in sintesi- Palm OS Database (PalmPilot / libro eReader) - Database Palm PRC/PDB - e-book e dati app PDA (header '...' all'offset 0x3C); aperto dagli strumenti Palm/eReader, non da Visual Studio.
- Struttura molecolare Protein Data Bank - Un file PDB in testo semplice che descrive le coordinate atomiche 3D di una molecola; aperto da PyMOL/Chimera/Jmol.
- Dati prezzi/portafoglio Quicken (.pdb) - Intuit Quicken scriveva un file di dati .pdb - il significato a cui il database ha erroneamente associato il suo programma di apertura «Quicken».
Programmi che aprono file PDB
Dettagli tecnici
specifiche approfondite| Formato contenitore | MSF (Multi-Stream File) - un contenitore di stream interni basato su pagine che ospita più flussi di dati denominati all'interno di un singolo file |
| Firma del file (magic bytes) | Inizia con la stringa ASCII `Microsoft C/C++ MSF 7.00` seguita da CR LF e byte di controllo specifici all'offset 0; i file legacy PDB 2.0 iniziano con `Microsoft C/C++ program database 2.00` |
| Codifica | Binaria, ordine dei byte little-endian |
| Stream interni | DBI (Debug Information), TPI/IPI (record di tipi e ID), stream di simboli pubblici e globali, stream di simboli per modulo e tabelle di mappatura sorgente/numero di riga |
| Chiave di collegamento binario | Contatore GUID + Age scritto sia nel `.pdb` che nella directory di debug del relativo `.exe` o `.dll`; una mancata corrispondenza causa il rifiuto del file dei simboli da parte del debugger |
| Dimensione tipica del file | Da 100 KB a 500 MB; i grandi progetti C++ nativi producono regolarmente file `.pdb` nell'ordine delle centinaia di megabyte |
| Compressione | Nessuna - i dati sono strutturati in pagine ma non compressi |
| Dimensione pagina | Pagine da 4 KB in MSF 7.00 (BigMsf); il vecchio contenitore MSF 2.0 utilizzava dimensioni di pagina inferiori |
| Varianti del formato | PDB 2.00 (legacy magic JG, MSVC 6.0 e precedenti); MSF 7.00 / BigMsf (da Visual Studio .NET in poi, attuale per C/C++); Portable PDB (formato multipiattaforma separato utilizzato da .NET/Roslyn) |
| Toolchain di produzione | Compilatore MSVC (`cl.exe`) e linker (`link.exe`); emesso anche da Clang/LLVM quando il target è Windows con i flag del compilatore `/Z7` o `/Zi` |
| Strumenti di consumo | Visual Studio Debugger, WinDbg, DIA SDK, `llvm-pdbutil`, `dumpbin`; strumenti di analisi dei crash come i convertitori di simboli CrashPad e Breakpad |
| Supporto server dei simboli | I file `.pdb` sono indicizzati per GUID + Age su un server di simboli (tramite `symstore.exe` o server compatibili); i debugger recuperano la copia corretta su richiesta utilizzando la chiave dalla directory di debug del binario |
| Supporto piattaforma | Nativo su Windows; lettura multipiattaforma tramite strumenti LLVM (`llvm-pdbutil`, LLDB) su Linux e macOS |
| Tipo MIME | application/octet-stream (nessun sottotipo MIME registrato dedicato) |
| Modello di distribuzione | Un `.pdb` per target di build (`.exe` o `.dll`); distribuito come file separato insieme al binario o memorizzato su un server di simboli privato/pubblico - non incorporato nel binario stesso |
| Rilasciato | 1990s (Microsoft Visual C++); MSF 7.00 container since Visual Studio .NET era |
| Ultima versione | MSF 7.00 ('BigMsf'); portable PDB used by .NET/Roslyn alongside it |
| Standard aperto | Sì · royalty-free |
| Specifica | github.com |
Conversioni PDB
Domande e risposte della community
chiesto dagli utentiAncora nessuna domanda - sii il primo a chiedere informazioni sui file PDB.