Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
SymStore (symstore.exe) je nástroj pro vytváření úložišť symbolů. Je součástí balíčku Debugging Tools for Windows.
SymStore ukládá symboly ve formátu, který ladicímu programu umožňuje vyhledat symboly na základě časového razítka a velikosti obrázku (pro soubor .dbg nebo spustitelný soubor) nebo podpis a věk (pro soubor .pdb). Výhodou úložiště symbolů oproti tradičnímu formátu úložiště symbolů je, že všechny symboly lze uložit nebo odkazovat na tentýž server a ladicí program je může načíst bez předchozího vědomí, který produkt obsahuje odpovídající symbol.
Všimněte si, že na stejném serveru nelze uložit více verzí souborů symbolů .pdb (například veřejné a soukromé verze), protože každý z nich obsahuje stejný podpis a věk.
Transakce SymStore
Každé volání SymStore je zaznamenáno jako transakce. Existují dva typy transakcí: přidání a odstranění.
Při vytvoření úložiště symbolů se v kořenovém adresáři serveru vytvoří adresář s názvem 000admin. Adresář 000admin obsahuje jeden soubor pro každou transakci, stejně jako soubory protokolu Server.txt a History.txt. Soubor Server.txt obsahuje seznam všech transakcí, které jsou aktuálně na serveru. Soubor History.txt obsahuje chronologickou historii všech transakcí.
Při každém uložení nebo odebrání souborů symbolů SymStore se vytvoří nové číslo transakce. Potom se vytvoří soubor, jehož název je toto číslo transakce, v 000admin. Tento soubor obsahuje seznam všech souborů nebo ukazatelů, které byly přidány do úložiště symbolů během této transakce. Pokud je transakce odstraněna, SymStore přečte svůj transakční soubor, aby určil, které soubory a ukazatele má odstranit.
přidat a del možnosti určují, zda se má provést přidání nebo odstranění transakce. Zahrnutí možnosti /p s operací přidání určuje, že se má přidat ukazatel; Vynechání možnosti /p určuje, že se má přidat skutečný soubor symbolů.
Úložiště symbolů je také možné vytvořit ve dvou samostatných fázích. V první fázi použijete SymStore s možností /x k vytvoření indexového souboru. Ve druhé fázi použijete SymStore s možností /y k vytvoření skutečného úložiště souborů nebo ukazatelů z informací v souboru indexu.
To může být užitečná technika z různých důvodů. To například umožňuje snadné opětovné vytvoření úložiště symbolů, pokud se úložiště nějak ztratí, pokud soubor indexu stále existuje. Nebo třeba počítač obsahující soubory symbolů má pomalé síťové připojení k počítači, na kterém se vytvoří úložiště symbolů. V tomto případě můžete vytvořit indexový soubor na stejném počítači jako soubory symbolů, přenést indexový soubor do druhého počítače a pak vytvořit úložiště na druhém počítači.
Úplný seznam všech parametrů SymStore najdete viz SymStore Command-Line Možnosti.
Poznámka
SymStore nepodporuje souběžné transakce od více uživatelů. Doporučuje se, aby byl jeden uživatel označený jako "správce" úložiště symbolů a zodpovědný za všechny přidávat a del transakce.
Příklady transakcí
Tady jsou dva příklady přidání ukazatelů symbolů pro sestavení 3790 systému Windows Server 2003 do \\sampledir\symsrv:
symstore add /r /p /f \\BuildServer\BuildShare\3790free\symbols\*.*
/s \\sampledir\symsrv /t "Windows Server 2003" /v "Build 3790 x86 free"
/c "Sample add"
symstore add /r /p /f \\BuildServer\BuildShare\3790Chk\symbols\*.*
/s \\sampledir\symsrv /t "Windows Server 2003" /v "Build 3790 x86 checked"
/c "Sample add"
V následujícím příkladu přidá SymStore skutečné soubory symbolů pro projekt aplikace v \\largeapp\appserver\bins do \\testdir\symsrv:
symstore add /r /f \\largeapp\appserver\bins\*.* /s \\testdir\symsrv
/t "Large Application" /v "Build 432" /c "Sample add"
Tady je příklad použití indexového souboru. Nejprve SymStore vytvoří indexový soubor založený na kolekci souborů symbolů v \\largeapp\appserver\bins\. V tomto případě se indexový soubor umístí do třetího počítače \\hubserver\hubshare. Pomocí možnosti /g určíte, že předpona souboru \\largeapp\appserver se může v budoucnu změnit:
symstore add /r /p /g \\largeapp\appserver /f
\\largeapp\appserver\bins\*.*
/x \\hubserver\hubshare\myindex.txt
Teď předpokládejme, že přesunete všechny soubory symbolů z počítače \\largeapp\appserver a umístíte je na \\myarchive\appserver. Pak můžete vytvořit samotné úložiště symbolů z indexového souboru \\hubserver\hubshare\myindex.txt následujícím způsobem:
symstore add /y \\hubserver\hubshare\myindex.txt
/g \\myarchive\appserver /s \\sampledir\symsrv /p
/t "Large Application" /v "Build 432" /c "Sample Add from Index"
Nakonec zde je příklad odstranění souboru přidaného předchozí transakcí SymStore. Vysvětlení způsobu určení ID transakce (v tomto případě 0000000096) najdete v následující části.
symstore del /i 0000000096 /s \\sampledir\symsrv
Komprimované soubory
SymStore lze použít s komprimovanými soubory dvěma různými způsoby.
- Použijte SymStore s volbou /p k ukládání ukazatelů na soubory se symboly. Po dokončení aplikace SymStore komprimujte soubory, na které odkazují ukazatele.
- Pomocí aplikace SymStore s možností /x vytvořte indexový soubor. Po dokončení aplikace SymStore komprimujte soubory uvedené v indexovém souboru. Pak použijte SymStore s možností /y (a pokud chcete, /p) uložit soubory nebo ukazatele na soubory v úložišti symbolů. (SymStore nebude muset zrušit dekomprimování souborů k provedení této operace.)
Váš server symbolů bude zodpovědný za nekomprimování souborů v případě potřeby.
Pokud jako server symbolů používáte SymSrv, je potřeba provést jakoukoli kompresi pomocí nástroje compress.exe, který je distribuován se sadou Microsoft Windows Software Development Kit (SDK). Komprimované soubory by měly mít podtržítko jako poslední znak v příponách souborů (například module1.pd_ nebo module2.db_). Podrobnosti najdete v Použití SymSrv.
Soubory server.txt a history.txt
Při přidání transakce se do server.txt přidá několik položek informací a history.txt pro budoucí vyhledávání. Následuje příklad řádku v server.txt a history.txt pro přidání transakce:
0000000096,add,ptr,10/09/99,00:08:32,Windows XP,x86 fre 1.156c-RTM-2,Added from \\mybuilds\symbols,
Toto je čárkami oddělený řádek. Pole jsou definována následujícím způsobem.
| Pole | Popis |
|---|---|
| 0000000096 | Číslo ID transakce vytvořené pomocí SymStore. |
| přidat | Typ transakce. Toto pole může být buď přidat nebo odebrat. |
| ptr | Zda byly přidány soubory nebo ukazatele. Toto pole může být buď soubor , nebo ptr . |
| 10/09/99 | Datum, kdy došlo k transakci. |
| 00:08:32 | Čas, kdy byla transakce spuštěna. |
| Windows XP | Výrobek. |
| x86 fre | Verze (volitelné). |
| Přidáno z | Komentář (volitelné) |
| Nepoužitý | (Vyhrazeno pro pozdější použití.) |
Tady jsou některé ukázkové řádky z transakčního souboru 0000000096. Každý řádek zaznamenává adresář a umístění souboru nebo ukazatele, který byl přidán do adresáře.
canon800.dbg\35d9fd51b000,\\mybuilds\symbols\sp4\dll\canon800.dbg
canonlbp.dbg\35d9fd521c000,\\mybuilds\symbols\sp4\dll\canonlbp.dbg
certadm.dbg\352bf2f48000,\\mybuilds\symbols\sp4\dll\certadm.dbg
certcli.dbg\352bf2f1b000,\\mybuilds\symbols\sp4\dll\certcli.dbg
certcrpt.dbg\352bf04911000,\\mybuilds\symbols\sp4\dll\certcrpt.dbg
certenc.dbg\352bf2f7f000,\\mybuilds\symbols\sp4\dll\certenc.dbg
Pokud použijete transakci del k vrácení původní transakce add, tyto řádky budou odebrány z server.txta následující řádek bude přidán do history.txt:
0000000105,del,0000000096
Pole pro transakci odstranění jsou definována následujícím způsobem.
| Pole | Popis |
|---|---|
| 0000000105 | Číslo ID transakce vytvořené pomocí SymStore. |
| del | Typ transakce. Toto pole může být přidat nebo odstranit. |
| 0000000096 | Transakce, která byla odstraněna. |
Formát úložiště symbolů
SymStore používá samotný systém souborů jako databázi. Vytvoří velký strom adresářů s názvy adresářů na základě takových věcí, jako jsou časová razítka souboru symbolů, podpisy, věk a další data.
Například po přidání několika různých souborů acpi.dbg na server by adresáře mohly vypadat takto:
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
V tomto příkladu může vyhledávací cesta pro soubor symbolů acpi.dbg vypadat nějak takto: \\mybuilds\symsrv\acpi.dbg\37cdb03962040.
Ve vyhledávacím adresáři mohou existovat tři soubory:
- Pokud byl soubor uložen, bude tam existovat soubor acpi.dbg.
- Pokud byl ukazatel uložen, soubor s názvem file.ptr bude existovat a bude obsahovat cestu k skutečnému souboru symbolu.
- Soubor s názvem refs.ptr, který obsahuje seznam všech aktuálních umístění pro acpi.dbg s tímto časovým razítkem a velikostí obrázku, které jsou aktuálně přidány do úložiště symbolů.
Zobrazení výpisu adresáře \\mybuilds\symsrv\acpi.dbg\37cdb03962040 poskytuje následující:
10/04/1999 01:54p 52 file.ptr
10/04/1999 01:54p 67 refs.ptr
Soubor.ptr obsahuje textový řetězec "\\mybuilds\symbols\x86\2128.chk\symbols\sys\acpi.dbg". Vzhledem k tomu, že v tomto adresáři není žádný soubor s názvem acpi.dbg, ladicí program se pokusí najít soubor v umístění \\mybuilds\symbols\symbols\x86\2128.chk\symbols\sys\acpi.dbg.
Obsah refs.ptr používá pouze SymStore, nikoli ladicí program. Tento soubor obsahuje záznam všech transakcí, které proběhly v tomto adresáři. Vzorový řádek z refs.ptr může být:
0000000026,ptr,\\mybuilds\symbols\x86\2128.chk\symbols\sys\acpi.dbg
To ukazuje, že byl přidán ukazatel na \\mybuilds\symbols\x86\2128.chk\symbols\sys\acpi.dbg s transakcí "0000000026".
Některé soubory symbolů zůstávají konstantní prostřednictvím různých produktů nebo sestavení nebo konkrétního produktu. Jedním z příkladů je soubor msvcrt.pdb. Při zobrazení obsahu adresáře \\mybuilds\symsrv\msvcrt.pdb se ukazuje, že na server symbolů byla přidána pouze dvě verze msvcrt.pdb:
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
Při zobrazení obsahu adresáře \\mybuilds\symsrv\msvcrt.pdb\37a8f40e2 se však ukazuje, že refs.ptr obsahuje několik ukazatelů.
Directory of \\mybuilds\symsrv\msvcrt.pdb\37a8f40e2
10/05/1999 02:50p 54 file.ptr
10/05/1999 02:50p 2,039 refs.ptr
Obsah souboru \\mybuilds\symsrv\msvcrt.pdb\37a8f40e2\refs.ptr jsou následující:
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
To ukazuje, že stejný soubor msvcrt.pdb byl použit pro více sestavení symbolů uložených na \\mybuilds\symsrv.
Tady je příklad adresáře, který obsahuje kombinaci přidání souborů a odkazů:
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
V tomto případě má refs.ptr následující obsah:
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,\\sampledir\bin\symbols\retail\dll\dbghelp.dbg
0000000047,ptr,\\sampledir2\bin\symbols\retail\dll\dbghelp.dbg
Transakce 43, 44 a 45 tedy přidaly stejný soubor na server a transakce 46 a 47 přidaly ukazatele. Pokud jsou odstraněny transakce 43, 44 a 45, soubor dbghelp.dbg bude odstraněn z adresáře. Adresář bude mít následující obsah:
Directory of e:\symsrv\dbghelp.dbg\38039ff439000
10/13/1999 05:01p 49 file.ptr
10/13/1999 05:01p 130 refs.ptr
Soubor.ptr obsahuje "\\sampledir2\bin\symbols\retail\dll\dbghelp.dbg" a refs.ptr obsahuje
0000000046,ptr,\\sampledir\bin\symbols\retail\dll\dbghelp.dbg
0000000047,ptr,\\sampledir2\bin\symbols\retail\dll\dbghelp.dbg
Vždy, když je poslední položka v souboru refs.ptr ukazatel, soubor file.ptr bude existovat a bude obsahovat cestu k přidruženému souboru. Pokaždé, když je poslední položka v refs.ptr soubor, v tomto adresáři nebude existovat soubor.ptr. Proto jakákoli operace odstranění, která odebere konečnou položku v souboru refs.ptr, může vést k vytvoření, odstranění nebo změně souboru.ptr.