stringtranslate.com

Base de datos del programa

La base de datos de programas ( PDB ) es un formato de archivo (desarrollado por Microsoft ) para almacenar información de depuración sobre un programa (o, comúnmente, módulos de programa como una DLL o un EXE ). Los archivos PDB suelen tener una extensión .pdb . Un archivo PDB se crea normalmente a partir de archivos de origen durante la compilación. Almacena una lista de todos los símbolos de un módulo con sus direcciones y, posiblemente, el nombre del archivo y la línea en la que se declaró el símbolo. Esta información de símbolos no se almacena en el propio módulo, porque ocupa mucho espacio. [ cita requerida ]

Aplicaciones

Cuando se depura un programa, el depurador carga información de depuración del archivo PDB y la utiliza para localizar símbolos o relacionar el estado de ejecución actual del código fuente de un programa. Microsoft Visual Studio utiliza archivos PDB como su formato de archivo principal para la información de depuración.

Otro uso de los archivos PDB es en servicios que recopilan datos de fallas de los usuarios y los relacionan con las partes específicas del código fuente que causan (o están involucradas en) la falla.

Los compiladores de Microsoft almacenarán, con las opciones adecuadas, información en un único PDB sobre los tipos que se encuentran en las fuentes compiladas. La información de depuración específica de cada fuente se almacena en el archivo de objeto compilado y contiene referencias a los tipos del PDB. Cada compilación agregará al PDB los tipos que aún no se encuentren allí, de modo que las referencias en los archivos de objeto ya compilados sigan siendo válidas.

El enlazador de Microsoft, con las opciones adecuadas, crea un PDB completamente nuevo que combina la información de depuración que se encuentra en sus módulos de entrada, los tipos a los que hacen referencia esos módulos y otra información generada por el enlazador. Si el enlace se realiza de forma incremental, se modifica un PDB existente agregando o reemplazando únicamente la información correspondiente a los módulos agregados o reemplazados, y agregando cualquier tipo nuevo que no esté ya en el PDB.

Los archivos PDB suelen eliminarse del paquete de distribución de los programas. Los desarrolladores los utilizan durante la depuración para ahorrar tiempo y obtener información.

Extrayendo información

El formato PDB se documenta aquí, la información se puede extraer de un archivo PDB utilizando las interfaces DIA (Debug Interface Access), disponibles en Microsoft Windows . También existen herramientas de terceros que también pueden extraer información de PDB, como radare2 y pdbparse.

Formato de transmisión múltiple

El PDB es un archivo único que se compone lógicamente de varios subarchivos, llamados streams . Está diseñado para optimizar el proceso de realizar cambios en el PDB, como se realiza mediante compilaciones y enlaces incrementales. Los streams se pueden eliminar, agregar o reemplazar sin reescribir ningún otro stream, y también se minimizan los cambios en los metadatos que describen los streams.

El PDB está organizado en páginas de tamaño fijo , normalmente 1K, 2K o 4K, numeradas consecutivamente comenzando en 0.

Nota : Se supone que toda la información numérica ( por ejemplo, números de secuencia y de página) se almacena en formato little-endian, el formato nativo de los procesadores basados ​​en Intel x86. El código Python de pdbparse hace esta suposición.

Arroyo

Cada flujo del PDB ocupa varias páginas, que no necesariamente están numeradas consecutivamente. El flujo tiene un número y una longitud. El contenido del flujo es la concatenación de sus páginas, truncada a la longitud del flujo.

Formato de metadatos

La función de los metadatos del PDB es identificar todos los flujos de componentes, indicando la longitud y la secuencia de páginas de cada flujo. Los flujos se numeran consecutivamente a partir del 0. También hay un flujo raíz, sin numerar, que contiene algunos de los metadatos.

El PDB comienza con un encabezado, que consta de:

El encabezado puede ser más largo que una sola página.

Las herramientas de Microsoft utilizan dos formatos PDB:

Versión 2

La firma es "Microsoft C/C++ program database 2.00\r\n\032JG\0\0"(44 bytes).

El resto del encabezado consta de:

Versión 7

La firma es "Microsoft C/C++ MSF 7.00\r\n\x1ADS\0\0\0"(32 bytes).

El resto del encabezado consta de:

Corriente de raíz

La secuencia raíz describe todas las secuencias PDB comenzando con la secuencia 0. Su contenido varía según la versión del formato PDB.

Versión 2

La secuencia raíz consta de:

Versión 7

La secuencia raíz consta de:

Contenido del stream

Las herramientas de Microsoft almacenan distintos tipos de información en secuencias numeradas diferentes. Algunos números de secuencia tienen un tipo de información fijo asociado a ellos, y otras secuencias se identifican en las secuencias de tipo fijo mencionadas anteriormente.

La secuencia 1 se utiliza para verificar que el PDB sea el mismo archivo al que se hace referencia en una secuencia de archivo ejecutable o de objeto.

Los flujos 2 y 4 contienen información de tipos. Los registros de tipos reales definen los tipos utilizados en el programa. La estructura de estos registros se puede encontrar en el archivo cvinfo.h proporcionado por Microsoft. Hay dos tipos de registros, cada uno con su propio conjunto de números de índice: identificadores de tipo y tipos; solo los tipos se almacenan en el flujo 2 y solo los identificadores de tipo se almacenan en el flujo 4. Los índices se utilizan para hacer referencia a estos registros desde dentro de los registros de símbolos y otros registros de tipo.

El flujo 3 es un directorio para otros flujos. Tenga en cuenta que no está presente en la versión 2 ni en un PDB producido por un compilador. El flujo comienza con un encabezado que se rellena para tener un total de 64 bytes.

Véase también

Enlaces externos