Megosztás a következőn keresztül:


A SymStore használata

A SymStore (symstore.exe) szimbólumtárolók létrehozására szolgáló eszköz. A Hibakeresési eszközök Windows csomagban található.

A SymStore a szimbólumokat olyan formátumban tárolja, amely lehetővé teszi a hibakereső számára, hogy megkeresse a szimbólumokat a kép időbélyege és mérete (.dbg vagy végrehajtható fájl esetén), illetve aláírás és kor alapján (.pdb fájl esetén). A szimbólumtároló előnye a hagyományos szimbólumtároló formátummal szemben, hogy minden szimbólum tárolható vagy hivatkozható ugyanazon a kiszolgálón, és a hibakereső lekérheti anélkül, hogy előzetesen tudta, hogy melyik termék tartalmazza a megfelelő szimbólumot.

Vegye figyelembe, hogy a .pdb szimbólumfájlok több verziója (például nyilvános és privát verziók) nem tárolhatók ugyanazon a kiszolgálón, mert mindegyik azonos aláírást és kort tartalmaz.

SymStore-tranzakciók

A SymStore minden hívása tranzakcióként lesz rögzítve. Kétféle tranzakciótípus létezik: hozzáadás és törlés.

A szimbólumtároló létrehozásakor a rendszer létrehoz egy "000admin" nevű könyvtárat a kiszolgáló gyökerében. A 000admin könyvtár minden tranzakcióhoz egy fájlt tartalmaz, valamint a naplófájlokat Server.txt és History.txt. A Server.txt fájl tartalmazza a kiszolgálón jelenleg található összes tranzakció listáját. A History.txt fájl az összes tranzakció időrendi előzményeit tartalmazza.

Minden alkalommal, amikor a SymStore tárolja vagy eltávolítja a szimbólumfájlokat, létrejön egy új tranzakciószám. Ezután egy fájl, amelynek a neve ez a tranzakciószám, 000adminban jön létre. Ez a fájl tartalmazza a szimbólumtárolóhoz a tranzakció során hozzáadott összes fájlt vagy mutatót. Ha töröl egy tranzakciót, a SymStore beolvassa a tranzakciós fájlját annak meghatározásához, hogy mely fájlokat és mutatókat kell törölnie.

A hozzáadási és a del törlési lehetőségek határozzák meg, hogy hozzáadást vagy törléses tranzakciót kell-e végrehajtani. Ha a /p lehetőséget hozzáadja egy hozzáadási művelethez, az azt határozza meg, hogy hozzá kell adni egy mutatót; Ha kihagyja a /p beállítást, az azt határozza meg, hogy a tényleges szimbólumfájlt hozzá kell adni.

A szimbólumtárolót két külön szakaszban is létrehozhatja. Az első szakaszban a SymStore-t használja a /x beállítással indexfájl létrehozásához. A második szakaszban a SymStore-t használja az /y beállítással az indexfájl adataiból származó fájlok vagy mutatók tényleges tárolásához.

Ez számos okból lehet hasznos technika. Ez lehetővé teszi például, hogy a szimbólumtároló könnyen újra létrejönjön, ha az tároló valamilyen módon elveszett, feltéve, hogy az indexfájl továbbra is létezik. Vagy lehet, hogy a szimbólumfájlokat tartalmazó számítógép lassú hálózati kapcsolattal rendelkezik ahhoz a számítógéphez, amelyen a szimbólumtároló létrejön. Ebben az esetben létrehozhatja az indexfájlt ugyanazon a gépen, mint a szimbólumfájlok, átviheti az indexfájlt a második gépre, majd létrehozhatja a tárolót a második gépen.

Az összes SymStore-paraméter teljes listájáért tekintse meg SymStore Command-Line Beállításokcímű témakört.

Jegyzet

A SymStore nem támogatja több felhasználó egyidejű tranzakcióit. Javasoljuk, hogy egy felhasználó legyen a szimbólumtároló rendszergazdája, és legyen felelős minden hozzáadás és törlés tranzakcióért.

 

Tranzakciós példák

Íme két példa arra, hogy a SymStore szimbólummutatókat ad hozzá a Windows Server 2003 3790-es buildéhez a \\sampledir\symsrv fájlhoz:

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"

A következő példában a SymStore hozzáadja egy alkalmazásprojekt tényleges szimbólumfájljait a \\largeapp\appserver\bins fájlhoz a \\testdir\symsrv fájlhoz:

symstore add /r /f \\largeapp\appserver\bins\*.* /s \\testdir\symsrv 
   /t "Large Application" /v "Build 432" /c "Sample add"

Íme egy példa egy indexfájl használatára. Először a SymStore létrehoz egy indexfájlt a \\largeapp\appserver\bins\ szimbólumfájlok gyűjteménye alapján. Ebben az esetben az indexfájl egy harmadik számítógépre, a \\hubserver\hubshare-re kerül. A /g beállítással megadhatja, hogy a "\\largeapp\appserver" fájlelőtag a jövőben megváltozhat:

symstore add /r /p /g \\largeapp\appserver /f 
   \\largeapp\appserver\bins\*.* 
   /x \\hubserver\hubshare\myindex.txt

Tegyük fel, hogy az összes szimbólumfájlt áthelyezi a (\\largeapp\appserver) gépről, és elhelyezi őket a \\myarchive\appserver kiszolgálón. Ezután az indexfájl \\hubserver\hubshare\myindex.txt alapján a következőképpen hozhatja létre a szimbólumtárolót:

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"

Végül íme egy példa a SymStore-ra egy korábbi tranzakció által hozzáadott fájl törlésére. A tranzakcióazonosító meghatározásának (ebben az esetben a 0000000096) meghatározásához tekintse meg a következő szakaszt.

symstore del /i 0000000096 /s \\sampledir\symsrv

Tömörített fájlok

A SymStore kétféleképpen használható tömörített fájlokkal.

  1. Használja a SymStore-t a /p beállítással a szimbólumfájlok mutatóinak tárolásához. A SymStore befejeződése után tömörítse azokat a fájlokat, amelyekre a mutatók hivatkoznak.
  2. Indexfájl létrehozásához használja a SymStore-t az /x beállítással. A SymStore befejezése után tömörítse az indexfájlban felsorolt fájlokat. Ezután használja a SymStore-t a /y beállítással (és ha szeretné, a /p beállítással) a szimbólumtárolóban lévő fájlok vagy mutatók tárolásához. (A SymStore-nak nem kell kibontania a fájlokat a művelet végrehajtásához.)

A szimbólumkiszolgáló felelős a fájlok szükség esetén történő kibontásáért.

Ha a SymSrv-et használja szimbólumkiszolgálóként, a tömörítést a Microsoft Windows Szoftverfejlesztői Készlettel (SDK) elosztott compress.exe eszközzel kell elvégezni. A tömörített fájloknak aláhúzásjelnek kell lennie a fájlkiterjesztések utolsó karaktereként (például module1.pd_ vagy module2.db_). További információ: SymSrvhasználata.

A server.txt és history.txt fájlok

Tranzakció hozzáadásakor a rendszer több információelemet is hozzáad a server.txt és history.txt a jövőbeli keresési képességekhez. Az alábbi példa egy sorra a server.txt-ban és a history.txt-ben egy hozzáadási tranzakcióhoz.

0000000096,add,ptr,10/09/99,00:08:32,Windows XP,x86 fre 1.156c-RTM-2,Added from \\mybuilds\symbols,

Ez egy vesszővel tagolt vonal. A mezők a következőképpen vannak definiálva.

Mező Leírás
0000000096 Tranzakcióazonosító száma a SymStore által létrehozott módon.
hozzáad Tranzakció típusa. Ez a mező lehet hozzáad vagy töröl.
ptr Fájlok vagy mutatók hozzáadása. Ez a mező lehet fájl vagy ptr.
10/09/99 A tranzakció bekövetkezésének dátuma.
00:08:32 A tranzakció indításának időpontja.
Windows XP Termék.
x86 fre Verzió (nem kötelező).
Hozzáadva innen: Megjegyzés (nem kötelező)
Használatlan (Későbbi használatra fenntartva.)

 

Íme néhány mintasor a tranzakciós fájlból 0000000096. Minden sor rögzíti a könyvtárat és a könyvtárhoz hozzáadott fájl vagy mutató helyét.

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

Ha del tranzakciót használ az eredeti hozzáadási tranzakciók visszavonásához, ezek a sorok törlődnek a server.txt-ből, és a következő sor hozzáadódik a history.txt-höz:

0000000105,del,0000000096

A törlési tranzakció mezői a következőképpen vannak definiálva.

Mező Leírás
0000000105 Tranzakcióazonosító száma a SymStore által létrehozott módon.
Del Tranzakció típusa. Ez a mező lehet hozzáad vagy töröl.
0000000096 Törölt tranzakció.

 

Szimbólumtároló formátuma

A SymStore magát a fájlrendszert használja adatbázisként. Létrehoz egy nagy könyvtárfát, amelynek könyvtárnevei olyan dolgokon alapulnak, mint a szimbólumfájl időbélyegei, az aláírások, az életkor és más adatok.

Ha például több különböző acpi.dbg fájlt adtak hozzá a kiszolgálóhoz, a könyvtárak a következőképpen nézhetnek ki:

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

Ebben a példában az acpi.dbg szimbólumfájl keresési útvonala a következőhöz hasonló lehet: \\mybuilds\symsrv\acpi.dbg\37cdb03962040.

A keresési könyvtárban három fájl lehet:

  1. Ha a fájlt tárolták, akkor az acpi.dbg ott fog létezni.
  2. Ha egy mutatót tároltak, akkor létezik egy file.ptr nevű fájl, amely tartalmazza a tényleges szimbólumfájl elérési útját.
  3. Egy refs.ptr nevű fájl, amely tartalmazza az acpi.dbg összes aktuális helyének listáját, ezzel az időbélyeggel és képmérettel, amelyek jelenleg hozzá vannak adva a szimbólumtárhoz.

A \\mybuilds\symsrv\acpi.dbg\37cdb03962040 könyvtárlista megjelenítése a következőket adja:

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

A file.ptr fájl a "\\mybuilds\symbols\x86\2128.chk\symbols\sys\acpi.dbg" szöveges sztringet tartalmazza. Mivel ebben a könyvtárban nincs acpi.dbg nevű fájl, a hibakereső megpróbálja megtalálni a fájlt a következő helyen: \\mybuilds\symbols\x86\2128.chk\symbols\sys\acpi.dbg.

A refs.ptr tartalmát csak a SymStore használja, a hibakereső nem. Ez a fájl a könyvtárban végrehajtott összes tranzakció rekordját tartalmazza. A refs.ptr mintavonala a következő lehet:

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

Ez azt mutatja, hogy a \\mybuilds\symbols\x86\2128.chk\symbols\sys\acpi.dbg mutató a "0000000026" tranzakcióval lett hozzáadva.

Egyes szimbólumfájlok állandóak maradnak különböző termékeken, buildeken vagy egy adott terméken keresztül. Erre példa az msvcrt.pdb fájl. A \\mybuilds\symsrv\msvcrt.pdb könyvtárban látható, hogy az msvcrt.pdb fájlnak csak két verziója lett hozzáadva a szimbólumkiszolgálóhoz:

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

A \\mybuilds\symsrv\msvcrt.pdb\37a8f40e2 könyvtár megjelenítése azonban azt mutatja, hogy a refs.ptr-ban több mutató is van.

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

A \\mybuilds\symsrv\msvcrt.pdb\37a8f40e2\refs.ptr tartalma a következő:

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

Ez azt mutatja, hogy ugyanazt az msvcrt.pdb fájlt használták a \\mybuilds\symsrv fájlban tárolt szimbólumok több buildjeihez.

Íme egy példa egy könyvtárra, amely fájl- és mutatóbeadások keverékét tartalmazza:

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

Ebben az esetben a refs.ptr tartalma a következő:

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

Így a 43., a 44. és a 45. tranzakció ugyanazt a fájlt adta hozzá a kiszolgálóhoz, a 46-os és a 47-s tranzakciók pedig mutatót adtak hozzá. Ha a 43., a 44. és a 45. tranzakció törölve van, akkor a dbghelp.dbg fájl törlődik a könyvtárból. A könyvtár ekkor a következő tartalommal rendelkezik:

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

A file.ptr most a következőt tartalmazza: "\\sampledir2\bin\symbols\retail\dll\dbghelp.dbg", a refs.ptr pedig

0000000046,ptr,\\sampledir\bin\symbols\retail\dll\dbghelp.dbg
0000000047,ptr,\\sampledir2\bin\symbols\retail\dll\dbghelp.dbg

Amikor a refs.ptr fájl utolsó bejegyzése egy mutató, a fájl.ptr létezik, és tartalmazza a társított fájl elérési útját. Amikor a refs.ptr utolsó bejegyzése egy fájl, ebben a könyvtárban nem fog létezni fájl.ptr. Ezért minden olyan törlési művelet, amely eltávolítja a refs.ptr végleges bejegyzését, a file.ptr létrehozását, törlését vagy módosítását eredményezheti.