¿Qué es el formato de archivo PDB?
Los archivos .pdb contienen una base de datos para un programa; específicamente, un almacén estructurado de símbolos de depuración, mapeos de archivos de origen e información de tipos producida por la cadena de herramientas de Microsoft Visual C++. Se utilizan junto con el .exe o .dll correspondiente con el que fueron compilados; no se incrustan dentro de esos binarios, sino que se distribuyen como archivos separados.
Información de depuración
Los símbolos de depuración almacenados en archivos .pdb permiten que los depuradores transmitan información importante sobre excepciones, mapeen direcciones de memoria de vuelta a números de línea de archivos de origen y expongan nombres de funciones y variables que se eliminan del binario final. Son útiles durante la resolución de problemas y el direccionamiento de errores tanto en entornos de desarrollo como de producción.
Cómo se crean los archivos .pdb
Los archivos .pdb se generan a partir de archivos de origen durante el proceso de compilación mediante el compilador de MSVC (cl.exe) y el enlazador (link.exe). *No* son producto de la compilación Just-In-Time (JIT); eso es un error común. Los archivos .pdb modernos utilizan el contenedor binario MSF 7.00 (Multi-Stream File) introducido con Visual Studio .NET. Cada .pdb está vinculado a su binario a través de un GUID y un contador de «Age» (edad); un .pdb de una compilación diferente no se cargará. Debido a que el formato es propietario, solo herramientas dedicadas como Visual Studio, WinDbg o llvm-pdbutil pueden leerlos, aunque Microsoft ha publicado una implementación de referencia.
Seguridad y protección
RIESGO: LOWUn PDB son datos pasivos leídos por depuradores - no contiene código ejecutable, por lo que abrir uno es seguro. La verdadera preocupación es la confidencialidad, no el malware: un PDB revela nombres de funciones internas, rutas de archivos de origen y estructura de código, por lo que enviar o filtrar uno expone información sobre las entrañas de su software (útil para ingenieros inversos). Mantenga los PDB de lanzamiento en un servidor de símbolos privado en lugar de incluirlos con el producto.
Detalles del formato
en pocas palabras- Base de datos Palm OS (PalmPilot / libro eReader) - Base de datos Palm PRC/PDB - libros electrónicos y datos de aplicaciones PDA (encabezado '...' en el desplazamiento 0x3C); abierto por herramientas de Palm/eReader, no por Visual Studio.
- Estructura molecular de Protein Data Bank - Un archivo PDB de texto plano que describe las coordenadas atómicas 3D de una molécula; abierto por PyMOL/Chimera/Jmol.
- Datos de precios/cartera de Quicken (.pdb) - Intuit Quicken escribía un archivo de datos .pdb - el significado al que la base de datos adjuntó erróneamente su abridor 'Quicken'.
Programas que abren archivos PDB
Detalles técnicos
especificación profunda| Formato de contenedor | MSF (Multi-Stream File) - un contenedor de flujo interno basado en páginas que contiene múltiples flujos de datos con nombre dentro de un solo archivo |
| Firma de archivo (magic bytes) | Comienza con la cadena ASCII `Microsoft C/C++ MSF 7.00` seguida de CR LF y bytes de control específicos en el desplazamiento 0; los archivos PDB 2.0 heredados comienzan con `Microsoft C/C++ program database 2.00` |
| Codificación | Binario, orden de bytes little-endian en todo momento |
| Flujos internos | DBI (Información de depuración), TPI/IPI (registros de tipo e ID), flujos de símbolos públicos y globales, flujos de símbolos por módulo y tablas de mapeo de origen/número de línea |
| Clave de enlace binario | Contador GUID + Age escrito tanto en el `.pdb` como en el directorio de depuración de su `.exe` o `.dll` emparejado; una discrepancia hace que el depurador rechace el archivo de símbolos |
| Tamaño de archivo típico | 100 KB a 500 MB; los proyectos grandes de C++ nativo producen rutinariamente archivos `.pdb` de cientos de megabytes |
| Compresión | Ninguna - los datos están estructurados por páginas pero no comprimidos |
| Tamaño de página | Páginas de 4 KB en MSF 7.00 (BigMsf); el contenedor MSF 2.0 más antiguo utilizaba tamaños de página más pequeños |
| Variantes de formato | PDB 2.00 (magia JG heredada, MSVC 6.0 y anteriores); MSF 7.00 / BigMsf (Visual Studio .NET en adelante, actual para C/C++); Portable PDB (formato multiplataforma separado utilizado por .NET/Roslyn) |
| Cadena de herramientas del productor | Compilador MSVC (`cl.exe`) y enlazador (`link.exe`); también emitido por Clang/LLVM cuando se dirige a Windows con los modificadores de compilador `/Z7` o `/Zi` |
| Herramientas de consumo | Depurador de Visual Studio, WinDbg, DIA SDK, `llvm-pdbutil`, `dumpbin`; herramientas de análisis de fallos como los convertidores de símbolos CrashPad y Breakpad |
| Soporte de servidor de símbolos | Los archivos `.pdb` son indexados por GUID + Age en un servidor de símbolos (vía `symstore.exe` o servidores compatibles); los depuradores obtienen la copia correcta bajo demanda utilizando la clave del directorio de depuración del binario |
| Soporte de plataforma | Nativo en Windows; lectura multiplataforma a través de herramientas LLVM (`llvm-pdbutil`, LLDB) en Linux y macOS |
| Tipo MIME | application/octet-stream (sin subtipo MIME registrado dedicado) |
| Patrón de despliegue | Un `.pdb` por objetivo de compilación (`.exe` o `.dll`); distribuido como un archivo separado junto al binario o almacenado en un servidor de símbolos privado/público - no se incrusta en el binario mismo |
| Lanzado | 1990s (Microsoft Visual C++); MSF 7.00 container since Visual Studio .NET era |
| Última versión | MSF 7.00 ('BigMsf'); portable PDB used by .NET/Roslyn alongside it |
| Estándar abierto | Sí · libre de regalías |
| Especificación | github.com |
Conversiones de PDB
Preguntas y respuestas de la comunidad
preguntado por usuariosAún no hay preguntas; sea el primero en preguntar sobre los archivos PDB.
Preguntas frecuentes
¿Qué es un archivo PDB en Visual Studio?
¿Cómo abro un archivo .pdb?
llvm-pdbutil o herramientas basadas en DIA para volcar sus símbolos como texto.