.PDB

PDB File

Program Database (Visual C++ Debug Symbols)
Ask a question
QUICK ANSWER

A PDB file is a Program Database - a debug-symbol file the Visual Studio compiler creates next to a compiled EXE or DLL. You do not open it directly; Visual Studio or WinDbg loads it automatically when debugging. The main concern is not malware but confidentiality: a PDB reveals internal function names and source paths, so keep it off public release packages.

Developer: Microsoft Category: Developer Files Open standard MIME: application/octet-stream
OPENS ON Windows Linux
Related: .DO · .MD · .HEX · .XSD

On this page

19k+ extensions indexed
Last reviewed Aug 16, 2026

Not sure what your file is?

Drop any file into our identifier - we read just the first bytes to name the format.

Identify a file

What is the PDB file format?

.pdb files contain a database for a program - specifically, a structured store of debug symbols, source-file mappings, and type information produced by the Microsoft Visual C++ toolchain. They are used together with the matching .exe or .dll they were compiled from; they are not embedded inside those binaries but distributed as separate files.

Debugging information

Debug symbols stored in .pdb files let debuggers relay important information about exceptions, map memory addresses back to source-file line numbers, and expose function and variable names that are stripped from the final binary. They are helpful during program troubleshooting and error addressing in both development and production environments.

How .pdb files are created

.pdb files are generated from source files during the compilation process by the MSVC compiler (cl.exe) and linker (link.exe). They are *not* a product of Just-In-Time (JIT) compilation - that is a common misconception. Modern .pdb files use the MSF 7.00 (Multi-Stream File) binary container introduced with Visual Studio .NET. Each .pdb is keyed to its binary via a GUID and Age counter; a .pdb from a different build will not load. Because the format is proprietary, only dedicated tools such as Visual Studio, WinDbg, or llvm-pdbutil can read them, though Microsoft has published a reference implementation.

Security & safety

RISK: LOW

A PDB is passive data read by debuggers - it contains no executable code, so opening one is safe. The real concern is confidentiality, not malware: a PDB reveals internal function names, source file paths and code structure, so shipping or leaking one exposes information about your software's internals (useful to reverse-engineers). Keep release PDBs on a private symbol server rather than bundling them with the product.

Format details

in a nutshell
FULL NAMEProgram Database (Visual C++ Debug Symbols)aka PDB symbol file, Microsoft Program Database
DEVELOPERMicrosoftsince 1990s (Microsoft Visual C++); MSF 7.00 container since Visual Studio .NET era
MIME TYPEapplication/octet-stream
TYPEBinary debug-symbol container (Multi-Stream File / MSF) produced by the MSVC toolchain
STANDARDOpen · royalty-free
This extension is also used by…
  • Palm OS Database (PalmPilot / eReader book) - PRC/PDB Palm database - e-books and PDA app data (header '...' at offset 0x3C); opened by Palm/eReader tools, not Visual Studio.
  • Protein Data Bank molecular structure - A plain-text PDB file describing 3D atomic coordinates of a molecule; opened by PyMOL/Chimera/Jmol.
  • Quicken price/portfolio data (.pdb) - Intuit Quicken wrote a .pdb data file - the meaning the database mistakenly attached its 'Quicken' opener to.
MAGIC BYTES · FILE SIGNATURE
OFFSET
000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c
HEX
4D6963726F736F667420432F432B2B204D534620372E30300D0A1A4453
ASCII
Microsoft C/C++ MSF 7.00···DS
Modern MSVC PDBs start with the 0x20-byte MSF 7.00 SuperBlock magic "Microsoft C/C++ MSF 7.00\r\n\x1aDS\0\0\0". Older PDB 2.0 files begin "Microsoft C/C++ program database 2.00\r\n\x1aJG". (Unrelated: a Palm PDB and a Protein Data Bank PDB are different files sharing this extension - see also_used_by.)

Programs that open PDB files

Windows4 apps
Visual Studio Freemium PDBs load automatically when debugging a matching build; for a dump, File > Open > Crash Dump and point Tools > Options > Debugging > Symbols at the PDB folder. Community edition is free.
WinDbg (Debugging Tools for Windows) Free Set the symbol path (.sympath) to the PDB folder/symbol server, then load the dump or live target - WinDbg resolves symbols from the PDB.
llvm-pdbutil Open-source Command-line: 'llvm-pdbutil dump' inspects streams, types and symbols inside a PDB - useful to verify or explore one without a debugger.
dumpbin / DIA SDK tools Built-in Ships with Visual Studio; inspect a binary's debug directory and (via DIA) read PDB contents programmatically.
Linux1 app
llvm-pdbutil Open-source Inspect/dump a Windows PDB cross-platform from the command line (part of LLVM).

Technical details

deep spec
Container formatMSF (Multi-Stream File) - a page-based internal stream container that holds multiple named data streams within a single file
File signature (magic bytes)Starts with the ASCII string `Microsoft C/C++ MSF 7.00` followed by CR LF and specific control bytes at offset 0; legacy PDB 2.0 files begin with `Microsoft C/C++ program database 2.00`
EncodingBinary, little-endian byte order throughout
Internal streamsDBI (Debug Information), TPI/IPI (type and ID records), public and global symbol streams, per-module symbol streams, and source/line-number mapping tables
Binary link keyGUID + Age counter written into both the `.pdb` and the debug directory of its paired `.exe` or `.dll`; a mismatch causes the debugger to reject the symbol file
Typical file size100 KB to 500 MB; large native C++ projects routinely produce `.pdb` files in the hundreds of megabytes
CompressionNone - data is page-structured but not compressed
Page size4 KB pages in MSF 7.00 (BigMsf); the older MSF 2.0 container used smaller page sizes
Format variantsPDB 2.00 (legacy JG magic, MSVC 6.0 and earlier); MSF 7.00 / BigMsf (Visual Studio .NET onward, current for C/C++); Portable PDB (separate cross-platform format used by .NET/Roslyn)
Producer toolchainMSVC compiler (`cl.exe`) and linker (`link.exe`); also emitted by Clang/LLVM when targeting Windows with `/Z7` or `/Zi` compiler flags
Consumer toolsVisual Studio Debugger, WinDbg, DIA SDK, `llvm-pdbutil`, `dumpbin`; crash-analysis tools such as CrashPad and Breakpad symbol converters
Symbol server support`.pdb` files are indexed by GUID + Age on a symbol server (via `symstore.exe` or compatible servers); debuggers fetch the correct copy on demand using the key from the binary's debug directory
Platform supportNative on Windows; cross-platform reading via LLVM tools (`llvm-pdbutil`, LLDB) on Linux and macOS
MIME typeapplication/octet-stream (no dedicated registered MIME sub-type)
Deployment patternOne `.pdb` per build target (`.exe` or `.dll`); distributed as a separate file alongside the binary or stored on a private/public symbol server - not embedded in the binary itself
Released1990s (Microsoft Visual C++); MSF 7.00 container since Visual Studio .NET era
Latest versionMSF 7.00 ('BigMsf'); portable PDB used by .NET/Roslyn alongside it
Open standardYes · royalty-free
Specificationgithub.com

PDB conversions

Community Q&A

asked by users
Ask a quick question
Get help from people who work with PDB files. Be specific - include your system and software version.
No account needed · answers usually within a day

No questions yet - be the first to ask about PDB files.

Frequently asked questions

What is a PDB file in Visual Studio?
It's a Program Database - a debug-symbol file the compiler creates next to your EXE/DLL. It maps machine code back to source files, line numbers and names so the debugger can show readable stack traces and let you step through code.
How do I open a .pdb file?
You normally don't open it directly - Visual Studio or WinDbg loads it automatically when it matches the binary you're debugging. To inspect one, use llvm-pdbutil or DIA-based tools to dump its symbols as text.
Why does my debugger say the PDB doesn't match the binary?
Each PDB carries a GUID+Age stamp tied to one specific build. If the EXE/DLL was recompiled, the old PDB no longer matches and the debugger refuses it. Rebuild to get a matching PDB, or fetch the exact PDB for that build.
Can I convert a .pdb to PDF?
Not for a Visual C++ PDB - it's binary debug data, not a document. (If your .pdb is actually a Palm/eReader e-book, which shares the extension, Calibre can convert that one to PDF - but it's a different file type.)
Do I need to ship PDB files with my program?
No - your app runs without them. PDBs are only for debugging. Many teams keep them on a private symbol server so they can analyze crash dumps later without exposing source structure to users.
Can a PDB recover my source code?
No. It maps to source files and line numbers and stores names/types, but it doesn't contain the source itself. It makes debugging readable; it doesn't reconstruct your code.

References

1Microsoft Learn - Symbol (.pdb) files in the debuggerlearn.microsoft.com
2microsoft/microsoft-pdb - PDB format informationgithub.com

Keep exploring

across the database

Top extensions this week

1.AQQAQQ Instant Messenger File
2.CRDOWNLOADChrome Partial Download File
3.BINCD/DVD Disc Image (BIN/CUE)
4.DATProgram Data File (generic)
5.PARTPartial Download File
6.EXEWindows Executable (Portable Executable)
7.RPMSGRestricted Permission Message
8.NOMEDIAAndroid No-Media Marker File
9.MDMarkdown Document
10.TXTPlain Text File

Related extensions

.DOStata Do-File
.MDMarkdown Document
.HEXIntel HEX File
.XSDXML Schema Definition
.MAPSource Map (JavaScript / CSS)
.CONFIGConfiguration File

Free file tools

An in-browser file identifier and image converter - everything runs on your device.

Open the toolbox

Browse file extensions A-Z