Partager via


Format de stockage des symboles

SymStore utilise le système de fichiers lui-même comme base de données. Il crée une grande arborescence de répertoires, avec des noms de répertoires basés sur des éléments tels que les horodatages du fichier de symboles, les signatures, l’âge et d’autres données.

Par exemple, une fois que plusieurs acpi.dbgs différents ont été ajoutés au serveur, les répertoires peuvent ressembler à ceci :

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

Dans cet exemple, le chemin de recherche du fichier de symboles acpi.dbg peut ressembler à ceci : \\mybuilds\symsrv\acpi.dbg\37cdb03962040.

Trois fichiers peuvent exister dans le répertoire de recherche :

  1. acpi.dbg, si le fichier a été stocké

  2. file.ptr avec un chemin d’accès au fichier de symboles réel, si un pointeur a été stocké

  3. refs.ptr, qui contient une liste de tous les emplacements actuels pour acpi.dbg avec cet horodatage et la taille d’image actuellement ajoutée au magasin de symboles

L’affichage de la liste de répertoires de \\mybuilds\symsrv\acpi.dbg\37cdb03962040 donne les éléments suivants :

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

Le fichier file.ptr contient la chaîne de texte « \\mybuilds\symbols\x86\2128.chk\symbols\sys\acpi.dbg ». Étant donné qu’il n’existe aucun fichier appelé acpi.dbg dans ce répertoire, le débogueur tente de trouver le fichier dans \\mybuilds\symbols\x86\2128.chk\symbols\sys\acpi.dbg.

Le contenu de refs.ptr est utilisé uniquement par SymStore, et non par le débogueur. Ce fichier contient un enregistrement de toutes les transactions qui ont eu lieu dans ce répertoire. Un exemple de ligne de refs.ptr peut être :

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

Cela montre qu’un pointeur vers \\mybuilds\symbols\x86\2128.chk\symbols\sys\acpi.dbg a été ajouté avec la transaction « 0000000026 ».

Certains fichiers de symboles restent constants par le biais de différents produits ou builds ou d’un produit particulier. Voici un exemple de fichier msvcrt.pdb windows 2000. Une liste de répertoires de \\mybuilds\symsrv\msvcrt.pdb indique que seules deux versions de msvcrt.pdb ont été ajoutées au serveur de symboles :

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

Toutefois, une liste de répertoires de \\mybuilds\symsrv\msvcrt.pdb\37a8f40e2 montre que refs.ptr a plusieurs pointeurs.

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

Le contenu de \\mybuilds\symsrv\msvcrt.pdb\37a8f40e2\refs.ptr est le suivant :

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

Cela montre que le même msvcrt.pdb a été utilisé pour plusieurs builds de symboles pour Windows 2000 stockés sur \\mybuilds\symsrv.

Voici un exemple de répertoire qui contient un mélange d’ajouts de fichiers et de pointeurs :

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

Dans ce cas, refs.ptr a le contenu suivant :

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

Ainsi, les transactions 43, 44 et 45 ont ajouté le même fichier au serveur, et les transactions 46 et 47 ont ajouté des pointeurs. Si les transactions 43, 44 et 45 sont supprimées, le fichier dbghelp.dbg est supprimé du répertoire. Le répertoire aura ensuite le contenu suivant :

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

À présent, file.ptr contient « \\foo2\bin\symbols\retail\dll\dbghelp.dbg » et refs.ptr contient

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

Chaque fois que l’entrée finale dans refs.ptr est un pointeur, le fichier file.ptr existe et contient le chemin d’accès au fichier associé. Chaque fois que l’entrée finale dans refs.ptr est un fichier, aucun fichier.ptr n’existe dans ce répertoire. Par conséquent, toute opération de suppression qui supprime l’entrée finale dans refs.ptr peut entraîner la création, la suppression ou la modification de file.ptr.