Formato de armazenamento de símbolos
O SymStore usa o próprio sistema de arquivos como um banco de dados. Ele cria uma grande árvore de diretórios, com nomes de diretório baseados em itens como carimbos de data/hora do arquivo de símbolo, assinaturas, idade e outros dados.
Por exemplo, depois que vários acpi.dbgs diferentes tiverem sido adicionados ao servidor, os diretórios poderão ter esta aparência:
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
Neste exemplo, o caminho de pesquisa para o arquivo de símbolo acpi.dbg pode ter esta aparência: \\mybuilds\symsrv\acpi.dbg\37cdb03962040.
Três arquivos podem existir dentro do diretório de pesquisa:
acpi.dbg, se o arquivo foi armazenado
file.ptr com um caminho para o arquivo de símbolo real, se um ponteiro foi armazenado
refs.ptr, que contém uma lista de todos os locais atuais para acpi.dbg com esse carimbo de data/hora e o tamanho da imagem adicionados atualmente ao repositório de símbolos
Exibir a listagem de diretório de \\mybuilds\symsrv\acpi.dbg\37cdb03962040 fornece o seguinte:
10/04/1999 01:54p 52 file.ptr
10/04/1999 01:54p 67 refs.ptr
O arquivo file.ptr contém a cadeia de caracteres de texto "\\mybuilds\symbols\x86\2128.chk\symbols\sys\acpi.dbg". Como não há nenhum arquivo chamado acpi.dbg neste diretório, o depurador tentará localizar o arquivo em \\mybuilds\symbols\x86\2128.chk\symbols\sys\acpi.dbg.
O conteúdo de refs.ptr é usado apenas pelo SymStore, não pelo depurador. Esse arquivo contém um registro de todas as transações que ocorreram neste diretório. Uma linha de exemplo de refs.ptr pode ser:
0000000026,ptr,\\mybuilds\symbols\x86\2128.chk\symbols\sys\acpi.dbg
Isso mostra que um ponteiro para \\mybuilds\symbols\x86\2128.chk\symbols\sys\acpi.dbg foi adicionado com a transação "0000000026".
Alguns arquivos de símbolo permanecem constantes em vários produtos ou builds ou em um produto específico. Um exemplo disso é o arquivo do Windows 2000 msvcrt.pdb. Uma listagem de diretório de \\mybuilds\symsrv\msvcrt.pdb mostra que apenas duas versões de msvcrt.pdb foram adicionadas ao 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
No entanto, uma listagem de diretório de \\mybuilds\symsrv\msvcrt.pdb\37a8f40e2 mostra que refs.ptr tem vários ponteiros.
Directory of \\mybuilds\symsrv\msvcrt.pdb\37a8f40e2
10/05/1999 02:50p 54 file.ptr
10/05/1999 02:50p 2,039 refs.ptr
O conteúdo de \\mybuilds\symsrv\msvcrt.pdb\37a8f40e2\refs.ptr é o seguinte:
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
Isso mostra que o mesmo msvcrt.pdb foi usado para vários builds de símbolos para Windows 2000 armazenados em \\mybuilds\symsrv.
Aqui está um exemplo de um diretório que contém uma combinação de adições de arquivo e ponteiro:
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
Nesse caso, refs.ptr tem o seguinte conteúdo:
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
Assim, as transações 43, 44 e 45 adicionaram o mesmo arquivo ao servidor e as transações 46 e 47 adicionaram ponteiros. Se as transações 43, 44 e 45 forem excluídas, o arquivo dbghelp.dbg será excluído do diretório. Em seguida, o diretório terá o seguinte conteúdo:
Directory of e:\symsrv\dbghelp.dbg\38039ff439000
10/13/1999 05:01p 49 file.ptr
10/13/1999 05:01p 130 refs.ptr
Agora file.ptr contém "\\foo2\bin\symbols\retail\dll\dbghelp.dbg", e refs.ptr contém
0000000046,ptr,\\MyDir\bin\symbols\retail\dll\dbghelp.dbg
0000000047,ptr,\\foo2\bin\symbols\retail\dll\dbghelp.dbg
Sempre que a entrada final em refs.ptr for um ponteiro, o arquivo file.ptr existirá e conterá o caminho para o arquivo associado. Sempre que a entrada final em refs.ptr for um arquivo, nenhum file.ptr existirá neste diretório. Portanto, qualquer operação de exclusão que remova a entrada final em refs.ptr pode resultar na criação, exclusão ou alteração de file.ptr.