Sdílet prostřednictvím


Cesta symbolů pro ladicí programy systému Windows

Cesta k symbolům specifikuje umístění, kde ladicí programy systému Windows, jako jsou WinDbg, KD, CDB a NTST, hledají soubory symbolů. 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 byl spustitelný soubor vytvořen, 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á informace o symbolech v následujících adresářích uvedených v uvedeném pořadí:

  • C:\Dir1\symbols\dll
  • C:\Dir1\dll
  • C:\Dir1

Ladicí program pak tento proces opakuje pro každý adresář v cestě symbolu. Nakonec ladicí program hledá v aktuálním adresáři a pak v aktuálním adresáři s připojeným ..\dll. Ladicí program připojí ..\dll, ..\exenebo ..\sysv závislosti na tom, které binární soubory 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, když soubory symbolů nejsou k dispozici, najdete v tématu Shodné 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.

Ukládání symbolů do mezipaměti lokálně

Symboly byste měli ukládat do místní mezipaměti. Jedním ze způsobů, jak symboly ukládat do mezipaměti místně, je zahrnout do vaší symbolové cesty cache*; nebo cache*localsymbolcache;*.

Pokud do cesty symbolu zahrnete řetězec cache*;, budou symboly načtené z libovolného prvku, který se zobrazí napravo od tohoto řetězce, uloženy ve výchozím adresáři mezipaměti 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;, budou symboly načtené z jakéhokoli prvku, který se zobrazí napravo od tohoto řetězce, uloženy v adresáři localsymbol cache.

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*symbolstore

    Pokud 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*symbolstore

    Pokud 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/symbols a uložit symboly do mezipaměti v c:\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*;, budou symboly načtené z libovolného prvku, který se zobrazí napravo od tohoto řetězce, uloženy ve výchozím adresáři mezipaměti 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;, budou symboly načtené z jakéhokoli prvku, který se zobrazí napravo od tohoto řetězce, uloženy v adresáři localsymbol cache.

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ů

Výchozí chování ladicího programu je použít opožděné načítání symbolů, označované také jako odložené načítání symbolů. Tento druh načítání znamená, že se symboly nenačtou, dokud nebudou potřeba.

Když se cesta symbolu změní, například pomocí příkazu .sympath, všechny načtené moduly se symboly exportu se líně znovu načtou.

Symboly modulů s úplnými symboly PDB se dynamicky znovu načtou, pokud nová cesta už neobsahuje původní cestu použitou k načtení symbolů PDB. Pokud nová cesta stále obsahuje původní cestu k souboru symbolů PDB, tyto symboly se nenačítají znovu automaticky.

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).

Ovládání cesty symbolů

Pokud chcete řídit cestu symbolu, můžete vybrat 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. Pokud chcete nastavit místní mezipaměť, stačí zadat .symfix C:\MyCache.

  • Pomocí příkazu .sympath zobrazit, nastavit, změnit nebo připojit cestu.

  • Před spuštěním ladicího programu nastavte cestu pomocí _NT_SYMBOL_PATH a _NT_ALT_SYMBOL_PATHproměnných prostředí. Cesta symbolu se vytvoří připojením _NT_SYMBOL_PATH za _NT_ALT_SYMBOL_PATH. Cesta je obvykle nastavena přes _NT_SYMBOL_PATH. Můžete ale chtít použít _NT_ALT_SYMBOL_PATH k 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 můžete použít příkaz Soubor | Cesta k souboru symbolu nebo stisknutím CTRL+S pro zobrazení, nastavení, změnu nebo připojení k cestě.

Pokud použijete možnost příkazového řádku -sins, ladicí program ignoruje proměnnou prostředí pro cestu k symbolům.

Ř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ů.

Viz také

symbolů

Pokročilé použití SymSrv

příkaz sympath

.symfix