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