Condividi tramite


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:

  1. acpi.dbg, se il file è stato archiviato

  2. file.ptr con un percorso del file di simboli effettivo, se è stato archiviato un puntatore

  3. 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.