Compartir a través de


Formato de almacenamiento de símbolos

SymStore usa el propio sistema de archivos como base de datos. Crea un árbol grande de directorios, con nombres de directorio basados en elementos como las marcas de tiempo del archivo de símbolos, las firmas, la antigüedad y otros datos.

Por ejemplo, después de agregar varios acpi.dbgs diferentes al servidor, los directorios podrían tener este aspecto:

Directory of \\mybuilds\symsrv\acpi.dbg
10/06/1999  05:46p      <DIR>          .
10/06/1999  05:46p      <DIR>          ..
10/04/1999  01:54p      <DIR>          37cdb03962040
10/04/1999  01:49p      <DIR>          37cdb04027740
10/04/1999  12:56p      <DIR>          37e3eb1c62060
10/04/1999  12:51p      <DIR>          37e3ebcc27760
10/04/1999  12:45p      <DIR>          37ed151662060
10/04/1999  12:39p      <DIR>          37ed15dd27760
10/04/1999  11:33a      <DIR>          37f03ce962020
10/04/1999  11:21a      <DIR>          37f03cf7277c0
10/06/1999  05:38p      <DIR>          37fa7f00277e0
10/06/1999  05:46p      <DIR>          37fa7f01620a0

En este ejemplo, la ruta de búsqueda del archivo de símbolo acpi.dbg podría tener este aspecto: \\mybuilds\symsrv\acpi.dbg\37cdb03962040.

Es posible que existan tres archivos dentro del directorio de búsqueda:

  1. acpi.dbg, si el archivo se almacenó

  2. file.ptr con una ruta de acceso al archivo de símbolos real, si se almacenó un puntero

  3. refs.ptr, que contiene una lista de todas las ubicaciones actuales de acpi.dbg con esta marca de tiempo y tamaño de imagen que se agregan actualmente al almacén de símbolos.

Mostrar la lista de directorios de \\mybuilds\symsrv\acpi.dbg\37cdb03962040 proporciona lo siguiente:

10/04/1999  01:54p                  52 file.ptr
10/04/1999  01:54p                  67 refs.ptr

El archivo file.ptr contiene la cadena de texto "\\mybuilds\symbols\x86\2128.chk\symbols\sys\acpi.dbg". Dado que no hay ningún archivo llamado acpi.dbg en este directorio, el depurador intentará encontrar el archivo en \\mybuilds\symbols\x86\2128.chk\symbols\sys\acpi.dbg.

SymStore usa el contenido de refs.ptr, no el depurador. Este archivo contiene un registro de todas las transacciones que se han realizado en este directorio. Una línea de ejemplo de refs.ptr podría ser:

0000000026,ptr,\\mybuilds\symbols\x86\2128.chk\symbols\sys\acpi.dbg

Esto muestra que se agregó un puntero a \\mybuilds\symbols\x86\2128.chk\symbols\sys\acpi.dbg con la transacción "0000000026".

Algunos archivos de símbolos permanecen constantes a través de varios productos o compilaciones o un producto determinado. Un ejemplo de esto es el archivo msvcrt.pdb de Windows 2000. Una lista de directorios de \\mybuilds\symsrv\msvcrt.pdb muestra que solo se han agregado dos versiones de msvcrt.pdb al servidor de símbolos:

Directory of \\mybuilds\symsrv\msvcrt.pdb
10/06/1999  05:37p      <DIR>          .
10/06/1999  05:37p      <DIR>          ..
10/04/1999  11:19a      <DIR>          37a8f40e2
10/06/1999  05:37p      <DIR>          37f2c2272

Sin embargo, una lista de directorios de \\mybuilds\symsrv\msvcrt.pdb\37a8f40e2 muestra que refs.ptr tiene varios punteros.

Directory of \\mybuilds\symsrv\msvcrt.pdb\37a8f40e2
10/05/1999  02:50p              54     file.ptr
10/05/1999  02:50p           2,039     refs.ptr

El contenido de \\mybuilds\symsrv\msvcrt.pdb\37a8f40e2\refs.ptr son los siguientes:

0000000001,ptr,\\mybuilds\symbols\x86\2137\symbols\dll\msvcrt.pdb
0000000002,ptr,\\mybuilds\symbols\x86\2137.chk\symbols\dll\msvcrt.pdb
0000000003,ptr,\\mybuilds\symbols\x86\2138\symbols\dll\msvcrt.pdb
0000000004,ptr,\\mybuilds\symbols\x86\2138.chk\symbols\dll\msvcrt.pdb
0000000005,ptr,\\mybuilds\symbols\x86\2139\symbols\dll\msvcrt.pdb
0000000006,ptr,\\mybuilds\symbols\x86\2139.chk\symbols\dll\msvcrt.pdb
0000000007,ptr,\\mybuilds\symbols\x86\2140\symbols\dll\msvcrt.pdb
0000000008,ptr,\\mybuilds\symbols\x86\2140.chk\symbols\dll\msvcrt.pdb
0000000009,ptr,\\mybuilds\symbols\x86\2136\symbols\dll\msvcrt.pdb
0000000010,ptr,\\mybuilds\symbols\x86\2136.chk\symbols\dll\msvcrt.pdb
0000000011,ptr,\\mybuilds\symbols\x86\2135\symbols\dll\msvcrt.pdb
0000000012,ptr,\\mybuilds\symbols\x86\2135.chk\symbols\dll\msvcrt.pdb
0000000013,ptr,\\mybuilds\symbols\x86\2134\symbols\dll\msvcrt.pdb
0000000014,ptr,\\mybuilds\symbols\x86\2134.chk\symbols\dll\msvcrt.pdb
0000000015,ptr,\\mybuilds\symbols\x86\2133\symbols\dll\msvcrt.pdb
0000000016,ptr,\\mybuilds\symbols\x86\2133.chk\symbols\dll\msvcrt.pdb
0000000017,ptr,\\mybuilds\symbols\x86\2132\symbols\dll\msvcrt.pdb
0000000018,ptr,\\mybuilds\symbols\x86\2132.chk\symbols\dll\msvcrt.pdb
0000000019,ptr,\\mybuilds\symbols\x86\2131\symbols\dll\msvcrt.pdb
0000000020,ptr,\\mybuilds\symbols\x86\2131.chk\symbols\dll\msvcrt.pdb
0000000021,ptr,\\mybuilds\symbols\x86\2130\symbols\dll\msvcrt.pdb
0000000022,ptr,\\mybuilds\symbols\x86\2130.chk\symbols\dll\msvcrt.pdb
0000000023,ptr,\\mybuilds\symbols\x86\2129\symbols\dll\msvcrt.pdb
0000000024,ptr,\\mybuilds\symbols\x86\2129.chk\symbols\dll\msvcrt.pdb
0000000025,ptr,\\mybuilds\symbols\x86\2128\symbols\dll\msvcrt.pdb
0000000026,ptr,\\mybuilds\symbols\x86\2128.chk\symbols\dll\msvcrt.pdb
0000000027,ptr,\\mybuilds\symbols\x86\2141\symbols\dll\msvcrt.pdb
0000000028,ptr,\\mybuilds\symbols\x86\2141.chk\symbols\dll\msvcrt.pdb
0000000029,ptr,\\mybuilds\symbols\x86\2142\symbols\dll\msvcrt.pdb
0000000030,ptr,\\mybuilds\symbols\x86\2142.chk\symbols\dll\msvcrt.pdb

Esto muestra que se usó el mismo msvcrt.pdb para varias compilaciones de símbolos para Windows 2000 almacenados en \\mybuilds\symsrv.

Este es un ejemplo de un directorio que contiene una combinación de adiciones de archivo y puntero:

Directory of E:\symsrv\dbghelp.dbg\38039ff439000
10/12/1999  01:54p         141,232     dbghelp.dbg
10/13/1999  04:57p              49     file.ptr
10/13/1999  04:57p             306     refs.ptr

En este caso, refs.ptr tiene el siguiente contenido:

0000000043,file,e:\binaries\symbols\retail\dll\dbghelp.dbg
0000000044,file,f:\binaries\symbols\retail\dll\dbghelp.dbg
0000000045,file,g:\binaries\symbols\retail\dll\dbghelp.dbg
0000000046,ptr,\\MyDir\bin\symbols\retail\dll\dbghelp.dbg
0000000047,ptr,\\foo2\bin\symbols\retail\dll\dbghelp.dbg

Por lo tanto, las transacciones 43, 44 y 45 agregaron el mismo archivo al servidor, y las transacciones 46 y 47 agregaron punteros. Si se eliminan las transacciones 43, 44 y 45, el archivo dbghelp.dbg se eliminará del directorio. A continuación, el directorio tendrá el siguiente contenido:

Directory of e:\symsrv\dbghelp.dbg\38039ff439000
10/13/1999  05:01p                   49 file.ptr
10/13/1999  05:01p                 130 refs.ptr

Ahora file.ptr contiene "\\foo2\bin\symbols\retail\dll\dbghelp.dbg" y refs.ptr contiene

0000000046,ptr,\\MyDir\bin\symbols\retail\dll\dbghelp.dbg
0000000047,ptr,\\foo2\bin\symbols\retail\dll\dbghelp.dbg

Siempre que la entrada final de refs.ptr sea un puntero, el archivo file.ptr existirá y contendrá la ruta de acceso al archivo asociado. Siempre que la entrada final de refs.ptr sea un archivo, no existirá ningún archivo.ptr en este directorio. Por lo tanto, cualquier operación de eliminación que quite la entrada final en refs.ptr puede dar lugar a que file.ptr se cree, elimine o cambie.