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


Szimbólum elérési útjai

A DbgHelp-kódtár a szimbólumkeresési útvonallal keresi meg a hibakeresési szimbólumokat (.pdb és .dbg fájlok). A keresési útvonal egy vagy több, pontosvesszővel elválasztott elérési útelemből áll.

Keresési útvonalak megadása

Ha meg szeretné adni, hogy a szimbólumkezelő hol keres lemezkönyvtárakat a szimbólumfájlokban, hívja meg a SymSetSearchPath függvényt. Másik lehetőségként megadhat egy szimbólumkeresési útvonalat a SymInitializefüggvényUserSearchPath paraméterében.

A SymInitializeUserSearchPath paramétere és a SymSetSearchPath SearchPath paramétere egy null értékű sztringre mutat, amely pontosvesszővel elválasztott elérési utat vagy elérési utak sorozatát határozza meg. A szimbólumkezelő ezeket az útvonalakat használja a szimbólumfájlok kereséséhez. Ha ez a paraméter NULL, a szimbólumkezelő abban a könyvtárban keres, amely tartalmazza azt a modult, amelyben a szimbólumok keresése folyamatban van. Ellenkező esetben, ha ez a paraméter nemNULL értékként van megadva, a szimbólumkezelő először megkeresi az alkalmazás által megadott elérési utakat a modulkönyvtárban való keresés előtt. Ha beállítja a _NT_SYMBOL_PATH vagy _NT_ALT_SYMBOL_PATH környezeti változót, a szimbólumkezelő a következő sorrendben keres szimbólumfájlokat:

  1. A _NT_SYMBOL_PATH környezeti változó.
  2. A _NT_ALT_SYMBOL_PATH környezeti változó.
  3. A megfelelő modult tartalmazó könyvtár.

A keresési útvonalak lekéréséhez hívja meg a SymGetSearchPath függvényt.

A programadatbázis -fájlok (.pdb) keresési útvonala eltér a hibakeresési (.dbg) fájlok elérési úttól. Az algoritmust a szimbólumtár funkciói határozzák meg. A Microsoft Visual C/C++ alapértelmezés szerint microsoftos formátumszimbólumokat hoz létre, eltávolítja őket a rendszerképből, és egy külön .pdb fájlba helyezi őket. A .pdb fájl általában a végrehajtható lemezképet tartalmazó könyvtárban található. A Visual C/C++ beágyazza a .pdb fájl abszolút elérési útját a végrehajtható képbe. Ha a szimbólumkezelő nem találja a .pdb fájlt ezen a helyen, vagy ha a .pdb fájlt egy másik könyvtárba helyezték át, a szimbólumkezelő a .dbg fájlok keresési útvonalával fogja megkeresni a .pdb fájlt.

Útvonalelem-típusok

Háromféle elérésiút-elem létezik.

Standard elérési útelem

A standard elérési útelemek kereséséhez az elérési út elem által megadott könyvtár gyökerét kell keresni. A szimbólumkezelő a "szimbólumok" alkönyvtárában is megjelenik, amely megfelel a keresett modul fájlkiterjesztésének. Ez általában "dll", "exe" vagy "sys". Végül egy "szimbólumok" nevű alkönyvtárban néz ki, amelynek neve megegyezik a bővítmény nevével. Ha például a szimbólum elérési útja "c:\mySymbols" elem, és a keresett fájl "boo.dll", akkor a rendszer a következő könyvtárakat keresi.

  • c:\mySymbols
  • c:\mySymbols\dll
  • c:\mySymbols\symbols\dll

A szimbólumkezelő ezzel a logikával keres minden olyan elérési útelemet, amely nem felel meg az szimbólumkiszolgálói vagy gyorsítótár- (az alábbiakban ismertetjük).

Szimbólumkiszolgáló elérési útja elem

A szimbólumkiszolgáló útvonalelem speciális technológiát használ, amely képes megtalálni a kérdéses modulhoz pontosan illeszkedő szimbólumot. További részletekért lásd: A SymSrv használata.

A szimbólumkezelő az elérési út elemet szimbólumkiszolgálóként kezeli, ha az "srv*" szöveggel kezdődik.

Jegyzet

Ha az "srv*" szöveg nincs megadva, de a tényleges elérési útelem egy szimbólumkiszolgáló-tároló, akkor a szimbólumkezelő úgy fog működni, mintha "srv*" lett volna megadva. A szimbólumkezelő úgy határozza meg ezt a meghatározást, hogy megkeresi a megadott elérési út gyökérkönyvtárában található "pingme.txt" nevű fájlt.

 

Gyorsítótár elérési útja elem

A gyorsítótár elérési út eleme a szimbólumkiszolgáló elérési útelemének változata.

Ez a könyvtár a többi szimbólumkiszolgálóhoz hasonlóan keresve van. Ha azonban a szimbólum nem található itt, és a szimbólum elérési útjának láncától távolabb található elérésiút-elemben található, akkor a rendszer a szimbólumot az elemben megadott szimbólumkiszolgálón másolja és tárolja.

A szimbólumkezelő gyorsítótárelemként kezeli az elérési utat, ha a "cache*" szöveggel kezdődik. A "c:\myCache" gyorsítótár megadásához használja a "cache*c:\myCache" jelútvonal-elemét.

Példa keresési útvonalra

Ennek működéséhez állítsa be ezt a keresési útvonalat.

cache*c:\myCache;srv*\\symbols\symbols

Az alábbiakban a szimbólumkezelő részletes kimenetét mutatjuk be az ntdll.pdb keresésekor, a fenti keresési útvonal használatával.

DBGHELP: .\ntdll.pdb - file not found
DBGHELP: .\dll\ntdll.pdb - file not found
DBGHELP: .\symbols\dll\ntdll.pdb - file not found
SYMSRV: c:\myCache\ntdll.pdb\0F7FCF88442F4B0E9FB51DC4A754D9DE2\ntdll.pdb not found
SYMSRV: ntdll.pdb from \\symbols\symbols: 10497024 bytes - copied
DBGHELP: c:\myCache\ntdll.pdb\0F7FCF88442F4B0E9FB51DC4A754D9DE2\ntdll.pdb already cached
DBGHELP: ntdll - private symbols & lines
c:\myCache\ntdll.pdb\0F7FCF88442F4B0E9FB51DC4A754D9DE2\ntdll.pdb

A kimenet első három sora a szimbólumkezelőt jeleníti meg, amely a .első elérési útját dolgozza fel. Ez egy szabványos elérési útelem.

A negyedik sor a szimbólumkezelőt jeleníti meg a szimbólumkiszolgáló használatával, hogy megkeresse a fájlt a cache*c:\myCache második elérési útjának elemében, amely egy gyorsítótár elérési útja elem.

Az ötödik sor azt mutatja, hogy a fájl a srv*\\symbols\symbolsharmadik elérési útjának elemében található, amely egy szimbólumkiszolgáló elérési útja elem.

A hatodik sor azt mutatja, hogy a fájl át lesz másolva a gyorsítótárba.

Az utolsó két sor, amelyet a fájl megnyit a gyorsítótárból.