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.
Cesta symbolu určuje umístění, kde ladicí programy systému Windows, jako jsou WinDbg, KD, CDB a NTST, vyhledá soubory symbolů.
Rychlý start:.symfix Pomocí příkazu nastavte výchozí cestu k serveru veřejných symbolů Microsoftu – to funguje dobře ve většině scénářů ladění.
Nakonfigurujte cestu symbolu správně tak, aby umožňovala efektivní ladění – ladicí programy pak můžou automaticky vyhledat a načíst soubory symbolů potřebné k analýze provádění kódu. V této příručce se dozvíte, jak nastavit cesty symbolů, používat server symbolů Microsoftu, ukládat symboly do mezipaměti místně a řešit běžné problémy. Další informace o symbolech a souborech symbolů naleznete v tématu Symboly.
Některé kompilátory, včetně sady Microsoft Visual Studio, umístí soubory symbolů do stejného adresáře jako binární soubory. Soubory symbolů a kontrolované binární soubory obsahují informace o cestě a názvu souboru, které ladicímu programu umožňují automaticky najít soubory symbolů. Pokud ladíte proces uživatelského režimu na počítači, na kterém jste vytvořili spustitelný soubor, a pokud jsou soubory symbolů v původním umístění, ladicí program může najít soubory symbolů bez nastavení cesty symbolu.
Ve většině jiných situací je potřeba nastavit cestu symbolů tak, aby odkazovala na umístění souborů symbolů.
Spropitné
Pomocí .symfix nastavte výchozí cestu k veřejnému serveru symbolů Microsoftu, který v mnoha situacích dobře funguje.
Syntaxe cesty symbolu
Cesta symbolů ladicího programu je řetězec, který se skládá z více cest adresářů oddělených středníkem. Například C:\Dir1;C:\Dir2\DirA;C:\Dir2\DirB.
Jsou podporovány relativní cesty. Před každou cestu byste ale měli přidat písmeno jednotky nebo sdílenou síťovou složku, pokud ladicí program nespustíte vždy ze stejného adresáře. Podporována jsou také síťová sdílení.
V každém adresáři na cestě symbolů ladicí program hledá ve třech adresářích. Pokud například cesta symbolu obsahuje C:\Dir1 a ladicí program hledá informace o symbolech pro knihovnu DLL, ladicí program hledá v tomto pořadí:
C:\Dir1\symbols\dllC:\Dir1\dllC:\Dir1
Ladicí program tento proces opakuje pro každý adresář v cestě symbolu.
Konečná záložní umístění:
- Aktuální adresář
- Aktuální adresář s připojeným
..\dll,..\exenebo..\sys(v závislosti na typu binárního souboru, který se ladí)
Soubory symbolů mají časové razítko a datum. Ladicí program vždy hledá symboly, které odpovídají časovému razítku v binárních souborech, které ladí. Nemusíte se obávat, že ladicí program použije nesprávné symboly, které najde jako první v této posloupnosti. Další informace o odpovědích, pokud soubory symbolů nejsou k dispozici, najdete v tématu Odpovídající názvy symbolů.
Jedním ze způsobů, jak nastavit cestu symbolů, je zadání příkazu .sympath. Další způsoby nastavení cesty symbolů najdete v části Řízení cesty symbolu dále v tomto tématu.
Ovládání cesty symbolů
Pokud chcete řídit cestu symbolu, vyberte jednu z následujících metod:
Pomocí příkazu .symfix set cesta k úložišti symbolů nastavit výchozí cestu k veřejnému serveru symbolů Microsoftu, který v mnoha situacích dobře funguje. Chcete-li nastavit místní mezipaměť, zadejte
.symfix C:\MyCache.Pomocí příkazu .sympath zobrazte, nastavte, změňte nebo přidejte cestu.
Před spuštěním ladicího programu nastavte cestu pomocí
_NT_SYMBOL_PATHa_NT_ALT_SYMBOL_PATHproměnných prostředí. Cesta symbolu se vytvoří připojením_NT_SYMBOL_PATHza_NT_ALT_SYMBOL_PATH. Obvykle nastavíte cestu přes_NT_SYMBOL_PATH. Můžete ale chtít použít_NT_ALT_SYMBOL_PATHk přepsání těchto nastavení ve speciálních případech, například pokud máte soukromé verze souborů se sdílenými symboly. Pokud se pokusíte přidat neplatný adresář prostřednictvím těchto proměnných prostředí, ladicí program tento adresář ignoruje.Když spouštíte ladicí program, použijte možnost příkazového řádku -y k nastavení cesty.
Pouze ve WinDbg použijte File | Symbol File Path nebo stiskněte
CTRL+Spro zobrazení, nastavení, změnu nebo přidání cesty.
Pokud použijete možnost příkazového řádku -sins, ladicí program ignoruje proměnnou prostředí pro cestu k symbolům.
Ukládání symbolů do mezipaměti lokálně
Doporučujeme místně ukládat symboly do mezipaměti, aby se zlepšil výkon ladicího programu a snížil síťový provoz. Pokud chcete symboly ukládat do mezipaměti, zahrňte cache*; nebo cache*localsymbolcache; do cesty symbolu.
Pokud do cesty symbolu zahrnete řetězec cache*; , ladicí program uloží symboly, které se načte z libovolného prvku, který se zobrazí napravo od tohoto řetězce v adresáři mezipaměti výchozích symbolů v místním počítači. Například následující příkaz říká ladicímu programu, aby získal symboly ze sdílené síťové složky s názvem \\someshare a uložil je do mezipaměti ve výchozím umístění v místním počítači.
.sympath cache*;\\someshare
Pokud do cesty symbolu zahrnete řetězec cache*localsymbolcache; , ladicí program uloží symboly, které načte z libovolného prvku, který se zobrazí napravo od tohoto řetězce v adresáři localsymbolcache .
Například následující příkaz říká ladicímu programu, aby získal symboly ze síťového sdíleného umístění \\someshare a uložil je do mezipaměti v adresáři c:\MySymbols.
.sympath cache*C:\MySymbols;\\someshare
Použití serveru symbolů: srv*
Pokud jste připojení k internetu nebo podnikové síti, nejúčinnější způsob, jak získat přístup k symbolům, je použít server symbolů, jako je veřejný server veřejných symbolů Společnosti Microsoft. Server symbolů můžete použít pomocí jednoho z následujících řetězců v cestě symbolu.
Řetězec
srv*Pokud do cesty symbolu zahrnete řetězec
srv*, ladicí program pomocí serveru symbolů získá symboly z výchozího úložiště symbolů. Například následující příkaz říká ladicímu programu, aby získal symboly z výchozího úložiště symbolů. Tyto symboly nejsou uloženy v mezipaměti místního počítače..sympath srv*Řetězec
srv*symbolstorePokud do cesty symbolu zahrnete řetězec
srv*symbolstore, ladicí program použije server symbolů ke stažení symbolů z úložiště symbolů . Například následující příkaz instruuje debugger, aby získal symboly ze serveru symbolů Microsoftu store. Tyto symboly nejsou uloženy v mezipaměti místního počítače..sympath srv*https://msdl.microsoft.com/download/symbolsŘetězec
srv*localsymbolcache*symbolstorePokud do cesty symbolu zahrnete řetězec
srv*localcache*symbolstore, ladicí program použije server symbolů ke stažení symbolů z úložiště a uloží je do mezipaměti v místním adresáři . Například následující příkaz říká ladicímu programu, aby získal symboly ze serveru symbolů Microsoftu –https://msdl.microsoft.com/download/symbolsa uložit symboly do mezipaměti vc:\MyServerSymbols..sympath srv*C:\MyServerSymbols*https://msdl.microsoft.com/download/symbols
Pokud máte v počítači adresář, do kterého ručně umístíte symboly, nepoužívejte tento adresář jako mezipaměť pro symboly získané ze serveru symbolů. Místo toho použijte dva samostatné adresáře. Můžete například ručně umístit symboly do c:\MyRegularSymbols a pak určit c:\MyServerSymbols jako mezipaměť pro symboly získané ze serveru. Následující příklad ukazuje, jak zadat oba adresáře pro cestu symbolů.
.sympath C:\MyRegularSymbols;srv*C:\MyServerSymbols*https://msdl.microsoft.com/download/symbols
Další informace o serverech symbolů a úložištích symbolů naleznete v tématu Vlastní úložiště symbolů a servery symbolů.
Kombinování mezipaměti* a srv*
Pokud do cesty symbolu zahrnete řetězec cache*; , ladicí program uloží symboly, které se načte z libovolného prvku, který se zobrazí napravo od tohoto řetězce v adresáři mezipaměti výchozích symbolů v místním počítači. Například následující příkaz říká ladicímu programu, aby získal symboly z úložiště symbolů Microsoftu , a uložil je do mezipaměti ve výchozím adresáři symbolů.
.sympath cache*;srv*https://msdl.microsoft.com/download/symbols
Pokud do cesty symbolu zahrnete řetězec cache*localsymbolcache; , ladicí program uloží symboly, které načte z libovolného prvku, který se zobrazí napravo od tohoto řetězce v adresáři localsymbolcache .
Například následující příkaz říká ladicímu programu, aby získal symboly ze serveru symbolů Microsoftu uložit a uložit symboly do mezipaměti v adresáři c:\MySymbols.
.sympath cache*C:\MySymbols;srv*https://msdl.microsoft.com/download/symbols
Zmenšení velikosti mezipaměti pomocí AgeStore
Pomocí nástroje AgeStore můžete odstranit soubory uložené v mezipaměti starší než zadané datum nebo odstranit dostatek starých souborů, aby výsledná velikost mezipaměti byla menší než zadaná velikost. Toto vyčištění souborů mezipaměti je užitečné, pokud je vaše podřízené úložiště příliš velké.
Opožděné načítání symbolů
Ladicí program ve výchozím nastavení používá odložené načítání symbolů. Tento druh načítání znamená, že ladicí program nenačte symboly, dokud je nepotřebuje.
Když změníte cestu symbolů, například pomocí příkazu .sympath, ladicí program se zpožděním znovu načte všechny načtené moduly s exportovanými symboly.
Ladicí program líně načítá symboly modulů s úplnými symboly PDB, pokud nová cesta již neobsahuje původní cestu, která byla použita k načtení symbolů PDB. Pokud nová cesta stále obsahuje původní cestu k souboru symbolů PDB, ladicí program tyto symboly znovu nenačte.
Opožděné načítání symbolů v CDB a KD můžete vypnout pomocí možnosti příkazového řádku -s. Načtení symbolů můžete také vynutit pomocí příkazu ld load symbols nebo pomocí příkazu .reload module společně s přepínačem /f.
Artefakty služby Azure DevOps
Server symbolů je k dispozici s Azure Artifacts ve službě Azure DevOps Services. Další informace o práci s Azure Artifacts ve WinDbg najdete v tématu Ladění pomocí symbolů vWinDbg (Azure Artifacts). Obecné informace o symbolech generovaných v Azure najdete v tématu přehled symbolů (Azure Artifacts).
Řešení problémů
Pomocí !sym s podrobným výpisem nebo -nWinDbg Command-Line Option zobrazte další podrobnosti, jakmile se načítají symboly. Další strategie řešení potíží najdete v tématu Ověřování symbolů.
Další kroky
Teď, když jste nakonfigurovali cestu symbolů, zjistěte, jak ověřit správné načítání symbolů a jak řešit běžné problémy:
Související úkoly:
Referenční informace k příkazům: