Sdílet prostřednictvím


Použití SymChk

Základní syntaxe pro SymChk je následující:

symchk [/r] FileNames /s SymbolPath 

FileNames určuje jeden nebo více programových souborů, jejichž symboly jsou potřeba. Pokud fileNames je adresář a použije se příznak /r , tento adresář se zkoumá rekurzivně a SymChk se pokusí najít symboly pro všechny programové soubory v tomto adresářovém stromu. SymbolPath určuje, kde má SymChk hledat symboly.

Existuje mnoho dalších možností příkazového řádku. Úplný výpis najdete v tématu SymChk Command-Line Možnosti.

Získání symchk

Symchk, podobně jako jiné ladicí nástroje, se dodává jako součást ladicího programu. Další informace naleznete v tématu Nástroje ladění pro systém Windows.

Po instalaci nástrojů pro ladění je nástroj symchk k dispozici v tomto adresáři pro 64bitovou verzi Windows.

C:\Program Files (x86)\Windows Kits\10\Debuggers\x64

Příklad použití

Zadaná cesta symbolu může obsahovat libovolný počet místních adresářů, adresářů UNC nebo serverů symbolů. Místní adresáře a adresáře UNC se rekurzivně neprohledají. Prohledávají se pouze zadané adresáře a podadresáře založené na rozšíření spustitelného souboru. Například dotaz

symchk thisdriver.sys /s G:\symbols 

bude hledat G:\mysymbols a G:\mysymbols\sys.

Server symbolů můžete zadat pomocí některé z následujících syntaxí v rámci cesty symbolu:

srv*DownstreamStore*\\Server\Share
srv*\\Server\Share

To se velmi podobá použití serveru symbolů v cestě symbolů ladicího programu. Podrobnosti najdete v tématu Použití serverů symbolů a úložišť symbolů.

Pokud je zadané podřízené úložiště, SymChk vytvoří kopie všech platných souborů symbolů nalezených serverem symbolů a umístí je do podřízeného úložiště. Kopírovány jsou pouze soubory symbolů, které jsou úplnou shodou.

SymChk vždy prohledá podřízené úložiště před dotazováním serveru symbolů. Proto byste měli být opatrní při používání podřízeného úložiště, když někdo jiný udržuje úložiště symbolů. Pokud spustíte SymChk jednou a najde soubory symbolů, zkopíruje je do podřízeného úložiště. Pokud pak spustíte SymChk znovu po změně nebo odstranění těchto souborů v úložišti symbolů, SymChk si nevšimne této změny, protože najde, co hledá, v podřízeném úložišti a nebude hledat dál.

Poznámka SymChk vždy používá SymSrv (Symsrv.dll) jako knihovnu DLL serveru se symboly. Na druhou stranu, pokud je k dispozici, můžou ladicí programy zvolit jinou knihovnu DLL serveru symbolů než SymSrv. (SymSrv je server symbolů zahrnutý v balíčku Nástroje ladění pro Windows.)

Použití nástroje SymChk k určení, jestli jsou symboly soukromé nebo veřejné

Pokud chcete zjistit, jestli je soubor symbolu soukromý nebo veřejný, použijte parametr /v , aby SymChk zobrazoval podrobný výstup. Předpokládejme, že MyApp.exe a MyApp.pdb jsou ve složce c:\sym. Zadejte tento příkaz.

symchk /v C:\sym\MyApp.exe /s C:\sym**

Pokud soubor MyApp.pdb obsahuje privátní symboly, výstup SymChk vypadá takto.

[SYMCHK] Searching for symbols to c:\sym\MyApp.exe in path c:\sym
...
DBGHELP: MyApp - private symbols & lines
        c:\sym\MyApp.pdb
...
SYMCHK: FAILED files = 0
SYMCHK: PASSED + IGNORED files = 1

Pokud soubor MyApp.pdb obsahuje pouze veřejné symboly, vypadá výstup SymChk takto.

[SYMCHK] Searching for symbols to c:\sym\MyApp.exe in path c:\sym
...
DBGHELP: MyApp - public symbols
        c:\sym\MyApp.pdb
...
SYMCHK: FAILED files = 0
SYMCHK: PASSED + IGNORED files = 1

Pokud chcete hledání omezit tak, aby vyhledaly pouze veřejné soubory symbolů, použijte možnost s parametrem /s (/ss). Následující příkaz najde shodu, pokud MyApp.pdb obsahuje pouze veřejné symboly. Nenajde shodu, pokud myApp.pdb obsahuje privátní symboly.

symchk /v C:\sym\MyApp.exe /s C:\sym

Další informace najdete v tématu Veřejné a soukromé symboly.

Příklady

Tady je několik příkladů. Následující příkaz vyhledá symboly pro program Myapp.exe:

E:\debuggers> symchk F:\myapp.exe /s F:\symbols\applications 

SYMCHK: Myapp.exe           FAILED  - Myapp.pdb is missing

SYMCHK: FAILED files = 1
SYMCHK: PASSED + IGNORED files = 0

Můžete to zkusit znovu s jinou cestou symbolu:

E:\debuggers> symchk F:\myapp.exe /s F:\symbols\newdirectory 

SYMCHK: FAILED files = 0
SYMCHK: PASSED + IGNORED files = 1

Tentokrát bylo hledání úspěšné. Pokud se podrobná možnost nepoužívá, SymChk zobrazí pouze soubory, pro které se nepodařilo najít symboly. V tomto příkladu tedy nebyly uvedeny žádné soubory. Můžete zjistit, že hledání proběhlo úspěšně, protože teď je v kategorii "úspěšný" uvedený jeden soubor a v kategorii "neúspěšný" není žádný.

Programový soubor se ignoruje, pokud neobsahuje žádný spustitelný kód. Mnoho souborů prostředků je tohoto typu.

Pokud chcete zobrazit názvy souborů všech programových souborů, můžete k vygenerování podrobného výstupu použít možnost /v :

E:\debuggers> symchk /v F:\myapp.exe /s F:\symbols\newdirectory 

SYMCHK: MyApp.exe           PASSED

SYMCHK: FAILED files = 0
SYMCHK: PASSED + IGNORED files = 1

Následující příkaz vyhledá velký počet symbolů Windows na serveru symbolů. Existuje celá řada možných chybových zpráv:

E:\debuggers> symchk /r C:\windows\system32 /s srv*\\manysymbols\windows 

SYMCHK: msisam11.dll         FAILED  - MSISAM11.pdb is missing
SYMCHK: msuni11.dll          FAILED  - msuni11link.pdb is missing
SYMCHK: msdxm.ocx            FAILED  - Image is split correctly, but msdxm.dbg i
s missing
SYMCHK: expsrv.dll           FAILED  - Checksum doesn't match with expsrv.DBG
SYMCHK: imeshare.dll         FAILED  - imeshare.opt.pdb is missing
SYMCHK: ir32_32.dll          FAILED  - Built with no debugging information
SYMCHK: author.dll           FAILED  - rpctest.pdb is missing
SYMCHK: msvcrt40.dll         FAILED  - Built with no debugging information
......
SYMCHK: FAILED files = 211
SYMCHK: PASSED + IGNORED files = 4809

Viz také

SymChk Command-Line Možnosti

Použití serverů symbolů a úložišť symbolů