O que é o formato de ficheiro PDB?
Arquivos .pdb contêm um banco de dados para um programa - especificamente, um armazenamento estruturado de símbolos de depuração, mapeamentos de arquivos-fonte e informações de tipo produzidas pelo conjunto de ferramentas do Microsoft Visual C++. Eles são usados em conjunto com o .exe ou .dll correspondente de onde foram compilados; eles não são incorporados dentro desses binários, mas distribuídos como arquivos separados.
Informações de depuração
Símbolos de depuração armazenados em arquivos .pdb permitem que os depuradores transmitam informações importantes sobre exceções, mapeiem endereços de memória de volta para números de linha de arquivos-fonte e exponham nomes de funções e variáveis que são removidos do binário final. Eles são úteis durante a solução de problemas do programa e tratamento de erros em ambientes de desenvolvimento e produção.
Como os arquivos .pdb são criados
Arquivos .pdb são gerados a partir de arquivos-fonte durante o processo de compilação pelo compilador MSVC (cl.exe) e pelo vinculador (link.exe). Eles *não* são um produto da compilação Just-In-Time (JIT) - esse é um equívoco comum. Arquivos .pdb modernos usam o contêiner binário MSF 7.00 (Multi-Stream File) introduzido com o Visual Studio .NET. Cada .pdb é vinculado ao seu binário por meio de um GUID e um contador de Age; um .pdb de uma compilação diferente não será carregado. Como o formato é proprietário, apenas ferramentas dedicadas como Visual Studio, WinDbg ou llvm-pdbutil podem lê-los, embora a Microsoft tenha publicado uma implementação de referência.
Segurança e proteção
RISCO: LOWUm PDB consiste em dados passivos lidos por depuradores - não contém código executável, portanto, abrir um é seguro. A real preocupação é a confidencialidade, não malware: um PDB revela nomes de funções internas, caminhos de arquivos-fonte e estrutura de código, portanto, enviar ou vazar um expõe informações sobre as entranhas do seu software (úteis para engenheiros reversos). Mantenha os PDBs de lançamento em um servidor de símbolos privado em vez de agrupá-los com o produto.
Detalhes do formato
em resumo- Palm OS Database (PalmPilot / livro eReader) - Banco de dados PRC/PDB Palm - e-books e dados de aplicativos de PDA (cabeçalho '...' no deslocamento 0x3C); aberto por ferramentas Palm/eReader, não pelo Visual Studio.
- Estrutura molecular Protein Data Bank - Um arquivo PDB de texto simples que descreve as coordenadas atômicas 3D de uma molécula; aberto por PyMOL/Chimera/Jmol.
- Dados de preço/portfólio do Quicken (.pdb) - O Intuit Quicken gravava um arquivo de dados .pdb - o significado ao qual o banco de dados erroneamente anexou seu abridor 'Quicken'.
Programas que abrem arquivos PDB
Detalhes técnicos
especificação profunda| Formato do contêiner | MSF (Multi-Stream File) - um contêiner de fluxo interno baseado em páginas que contém vários fluxos de dados nomeados em um único arquivo |
| Assinatura do arquivo (magic bytes) | Começa com a string ASCII `Microsoft C/C++ MSF 7.00` seguida por CR LF e bytes de controle específicos no deslocamento 0; arquivos PDB 2.0 legados começam com `Microsoft C/C++ program database 2.00` |
| Codificação | Binário, ordem de bytes little-endian em todo o arquivo |
| Fluxos internos | DBI (Informações de Depuração), TPI/IPI (registros de tipo e ID), fluxos de símbolos públicos e globais, fluxos de símbolos por módulo e tabelas de mapeamento de fonte/número de linha |
| Chave de link binário | Contador GUID + Age gravado tanto no `.pdb` quanto no diretório de depuração de seu `.exe` ou `.dll` emparelhado; uma incompatibilidade faz com que o depurador rejeite o arquivo de símbolos |
| Tamanho de arquivo típico | 100 KB a 500 MB; grandes projetos nativos em C++ rotineiramente produzem arquivos `.pdb` na casa das centenas de megabytes |
| Compressão | Nenhuma - os dados são estruturados em páginas, mas não compactados |
| Tamanho da página | Páginas de 4 KB no MSF 7.00 (BigMsf); o contêiner MSF 2.0 mais antigo usava tamanhos de página menores |
| Variantes de formato | PDB 2.00 (magic JG legado, MSVC 6.0 e anteriores); MSF 7.00 / BigMsf (Visual Studio .NET em diante, atual para C/C++); Portable PDB (formato multiplataforma separado usado por .NET/Roslyn) |
| Conjunto de ferramentas produtor | Compilador MSVC (`cl.exe`) e vinculador (`link.exe`); também emitido pelo Clang/LLVM ao visar Windows com as flags de compilador `/Z7` ou `/Zi` |
| Ferramentas de consumo | Visual Studio Debugger, WinDbg, DIA SDK, `llvm-pdbutil`, `dumpbin`; ferramentas de análise de falhas como conversores de símbolos CrashPad e Breakpad |
| Suporte a servidor de símbolos | Arquivos `.pdb` são indexados por GUID + Age em um servidor de símbolos (via `symstore.exe` ou servidores compatíveis); depuradores buscam a cópia correta sob demanda usando a chave do diretório de depuração do binário |
| Suporte de plataforma | Nativo no Windows; leitura multiplataforma via ferramentas LLVM (`llvm-pdbutil`, LLDB) no Linux e macOS |
| Tipo MIME | application/octet-stream (sem sub-tipo MIME registrado dedicado) |
| Padrão de implantação | Um `.pdb` por alvo de compilação (`.exe` ou `.dll`); distribuído como um arquivo separado ao lado do binário ou armazenado em um servidor de símbolos privado/público - não incorporado no próprio binário |
| Lançado | 1990s (Microsoft Visual C++); MSF 7.00 container since Visual Studio .NET era |
| Versão mais recente | MSF 7.00 ('BigMsf'); portable PDB used by .NET/Roslyn alongside it |
| Padrão aberto | Sim · livre de royalties |
| Especificação | github.com |
Conversões de PDB
Perguntas e Respostas da Comunidade
perguntado por usuáriosAinda não há perguntas - seja o primeiro a perguntar sobre arquivos PDB.
Perguntas frequentes
O que é um arquivo PDB no Visual Studio?
Como faço para abrir um arquivo .pdb?
llvm-pdbutil ou ferramentas baseadas em DIA para extrair seus símbolos como texto.