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.
Knihovna DbgHelp používá cestu hledání symbolů k vyhledání symbolů ladění (soubory .pdb a .dbg). Vyhledávací cesta může být tvořena jedním nebo více elementy cesty oddělenými středníky.
Určení cest hledání
Chcete-li určit, kde obslužná rutina symbolu bude prohledávat adresáře disků pro soubory symbolů, zavolejte SymSetSearchPath funkce. Alternativně můžete zadat cestu hledání symbolů v UserSearchPath parametr SymInitialize funkce.
Parametr UserSearchPath v SymInitialize a parametr SearchPath v SymSetSearchPath vezme ukazatel na řetězec ukončený hodnotou null, který určuje cestu nebo řadu cest oddělených středníkem. Obslužná rutina symbolů používá tyto cesty k vyhledání souborů symbolů. Pokud je tento parametr null, obslužná rutina symbolu vyhledá adresář obsahující modul, pro který se prohledávají symboly. Jinak pokud je tento parametr zadán jako hodnotaNULL, obslužná rutina symbolu nejprve prohledá cesty nastavené aplikací před prohledáváním adresáře modulu. Pokud nastavíte _NT_SYMBOL_PATH nebo _NT_ALT_SYMBOL_PATH proměnnou prostředí, obslužná rutina symbolů vyhledá soubory symbolů v následujícím pořadí:
- Proměnná prostředí _NT_SYMBOL_PATH.
- Proměnná prostředí _NT_ALT_SYMBOL_PATH.
- Adresář, který obsahuje odpovídající modul.
Chcete-li načíst cesty hledání, zavolejte funkci SymGetSearchPath.
Cesta hledání pro soubory databáze programu (.pdb) se liší od cesty pro soubory ladění (.dbg). Algoritmus je určen funkcí knihovny symbolů. Microsoft Visual C/C++ ve výchozím nastavení vytvoří symboly formátu Microsoftu, odstraní je z obrázku a umístí je do samostatného souboru .pdb. Soubor .pdb se obvykle nachází v adresáři, který obsahuje spustitelný obrázek. Visual C/C++ vloží absolutní cestu k souboru .pdb do spustitelného obrázku. Pokud obslužná rutina symbolu nemůže najít soubor PDB v tomto umístění nebo pokud byl soubor .pdb přesunut do jiného adresáře, obslužná rutina symbolu vyhledá soubor .pdb pomocí cesty hledání popsané pro soubory .dbg.
Typy elementů path
Existují tři typy prvků cesty.
Standardní element cesty
Standardní prvek cesty je prohledána tak, že hledáte v kořenovém adresáři určeném elementem path. Obslužná rutina symbolu také hledá v podadresáři "symboly", která odpovídá příponě souboru modulu, který symboly hledá. To je obvykle "dll", "exe" nebo "sys". Nakonec vypadá v podadresáři s názvem "symboly" s adresářem se stejným názvem jako přípona. Pokud je například element cesty symbolu "c:\mySymbols" a soubor, který symboly hledají, je "boo.dll", pak by se prohledály následující adresáře.
- c:\mySymbols
- c:\mySymbols\dll
- c:\mySymbols\symbols\dll
Obslužná rutina symbolů používá tuto logiku k vyhledání libovolného prvku cesty, který nesplňuje kritéria jako server symbolů nebo mezipaměti (popsáno níže).
Symbol Server Path Element
Server symbolů element cesty používá speciální technologii, která dokáže najít symbol, který je přesnou shodou pro příslušný modul. Další podrobnosti najdete v tématu použití SymSrv.
Obslužná rutina symbolu považuje prvek cesty za server symbolů, pokud začíná textem "srv*".
Poznámka
Pokud není zadaný text "srv*", ale skutečný prvek cesty je úložištěm serveru symbolů, obslužná rutina symbolů bude fungovat, jako by byla zadána "srv*". Obslužná rutina symbolu toto určení určí vyhledáním existence souboru s názvem "pingme.txt" v kořenovém adresáři zadané cesty.
Cache Path Element
Element cesty mezipaměti je variantou elementu cesty k serveru symbolů.
Tento adresář se prohledá jako jakýkoli jiný server symbolů. Pokud se zde ale symbol nenajde a nachází se v prvku cesty dále v řetězci cesty, zkopíruje se symbol a uloží se na server symbolů zadaný v tomto prvku.
Obslužná rutina symbolu zachází s elementem cesty jako s elementem mezipaměti, pokud začíná textem "cache*". Pokud chcete zadat mezipaměť v souboru c:\myCache, použijte prvek cesty symbolu "cache*c:\myCache".
Příklad cesty hledání
Pokud chcete zjistit, jak to funguje, nastavte tuto cestu hledání.
cache*c:\myCache;srv*\\symbols\symbols
Následuje seznam podrobného výstupu obslužné rutiny symbolů při hledání ntdll.pdb pomocí výše uvedené cesty hledání.
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
První tři řádky výstupu ukazují obslužnou rutinu symbolu zpracování prvního prvku cesty .. Toto je standardní prvek cesty.
Čtvrtý řádek zobrazuje obslužnou rutinu symbolu pomocí serveru symbolů k vyhledání souboru v druhém prvku cesty cache*c:\myCache, což je element cesty mezipaměti.
Pátý řádek ukazuje, že soubor je nalezen ve třetím prvku cesty srv*\\symbols\symbols, což je symbol server path element.
Šestý řádek ukazuje, že se soubor zkopíruje do mezipaměti.
Poslední dva řádky, které je soubor otevřen z mezipaměti.