Formato archiviazione simboli
SymStore usa il file system stesso come database. Crea un grande albero di directory, con nomi di directory basati su elementi quali i timestamp dei file dei simboli, le firme, l'età e altri dati.
Ad esempio, dopo l'aggiunta di diversi acpi.dbgs al server, le directory potrebbero essere simili al seguente:
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
In questo esempio il percorso di ricerca per il file di simboli acpi.dbg potrebbe essere simile al seguente: \\mybuilds\symsrv\acpi.dbg\37cdb03962040.
Tre file possono esistere all'interno della directory di ricerca:
acpi.dbg, se il file è stato archiviato
file.ptr con un percorso del file di simboli effettivo, se è stato archiviato un puntatore
refs.ptr, che contiene un elenco di tutte le posizioni correnti per acpi.dbg con questo timestamp e dimensioni dell'immagine attualmente aggiunte all'archivio simboli
Visualizzazione dell'elenco di directory di \\mybuilds\symsrv\acpi.dbg\37cdb03962040 fornisce quanto segue:
10/04/1999 01:54p 52 file.ptr
10/04/1999 01:54p 67 refs.ptr
Il file.ptr contiene la stringa di testo "\\mybuilds\symbols\x86\2128.chk\symbols\sys\acpi.dbg". Poiché non è presente alcun file denominato acpi.dbg in questa directory, il debugger tenterà di trovare il file in \\mybuilds\symbols\x86\2128.chks\symbols\sys\acpi.dbg.
Il contenuto di refs.ptr viene usato solo da SymStore, non dal debugger. Questo file contiene un record di tutte le transazioni eseguite in questa directory. Una riga di esempio da refs.ptr potrebbe essere:
0000000026,ptr,\\mybuilds\symbols\x86\2128.chk\symbols\sys\acpi.dbg
Questo indica che un puntatore a \\mybuilds\symbols\x86\2128.chk\symbols\sys\acpi.dbg è stato aggiunto con la transazione "0000000026".
Alcuni file di simboli rimangono costanti attraverso vari prodotti o compilazioni o un determinato prodotto. Un esempio di questo è il file msvcrt.pdb di Windows 2000. Un elenco di directory di \\mybuilds\symsrv\msvcrt.pdb mostra che sono state aggiunte solo due versioni di msvcrt.pdb al server simboli:
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
Tuttavia, un elenco di directory di \\mybuilds\symsrv\msvcrt.pdb\37a8f40e2 mostra che refs.ptr ha diversi puntatori.
Directory of \\mybuilds\symsrv\msvcrt.pdb\37a8f40e2
10/05/1999 02:50p 54 file.ptr
10/05/1999 02:50p 2,039 refs.ptr
Il contenuto di \\mybuilds\symsrv\msvcrt.pdb\37a8f40e2\refs.ptr sono i seguenti:
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
Ciò mostra che la stessa msvcrt.pdb è stata usata per più build di simboli per Windows 2000 archiviata in \\mybuilds\symsrv.
Di seguito è riportato un esempio di directory che contiene una combinazione di aggiunte di file e puntatori:
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
In questo caso, refs.ptr ha il contenuto seguente:
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
Pertanto, le transazioni 43, 44 e 45 hanno aggiunto lo stesso file al server e transazioni 46 e 47 puntatori aggiunti. Se le transazioni 43, 44 e 45 vengono eliminate, il file dbghelp.dbg verrà eliminato dalla directory. La directory avrà quindi il contenuto seguente:
Directory of e:\symsrv\dbghelp.dbg\38039ff439000
10/13/1999 05:01p 49 file.ptr
10/13/1999 05:01p 130 refs.ptr
Ora file.ptr contiene "\\foo2\bin\symbols\retail\dll\dbghelp.dbg" e refs.ptr contiene
0000000046,ptr,\\MyDir\bin\symbols\retail\dll\dbghelp.dbg
0000000047,ptr,\\foo2\bin\symbols\retail\dll\dbghelp.dbg
Ogni volta che la voce finale in refs.ptr è un puntatore, il file file.ptr esisterà e conterrà il percorso del file associato. Ogni volta che la voce finale in refs.ptr è un file, nessun file.ptr esisterà in questa directory. Pertanto, qualsiasi operazione di eliminazione che rimuove la voce finale in refs.ptr può causare la creazione, l'eliminazione o la modifica di file.ptr.