SymChk の使用
SymChk の基本的な構文は次のとおりです。
symchk [/r] FileNames /s SymbolPath
FileNames は 、シンボルが必要な 1 つ以上のプログラム ファイルを指定します。 FileNames がディレクトリであり、/r フラグが使用されている場合、このディレクトリは再帰的に探索され、SymChk は、このディレクトリ ツリー内のすべてのプログラム ファイルのシンボルの検索を試みます。 SymbolPath は、SymChk がシンボルを検索する場所を指定します。
さらに多くのコマンド ライン オプションがあります。 完全な一覧については、「 SymChk のオプション」をCommand-Lineしてください。
symchk の取得
Symchk は、他のデバッグ ツールと同様に、デバッガーの一部として出荷されます。 詳細については、「 Download Debugging Tools for Windows」を参照してください。
デバッグ ツールがインストールされた後は、このディレクトリで 64 ビットバージョンの symchk をWindows。
C:\Program Files (x86)\Windows Kits\10\Debuggers\x64
使用例
指定したシンボル パスには、任意の数のローカル ディレクトリ、UNC ディレクトリ、またはシンボル サーバーを含めできます。 ローカル ディレクトリと UNC ディレクトリは再帰的に検索されません。 指定されたディレクトリと、実行可能ファイルの拡張機能に基づくサブディレクトリだけが検索されます。 たとえば、クエリ
symchk thisdriver.sys /s g:\symbols
は g:\mysymbols と g:\mysymbols\sys を検索します。
シンボル パスの一部として次のいずれかの構文を使用して、シンボル サーバーを指定できます。
srv*DownstreamStore*\\Server\Share
srv*\\Server\Share
これは、デバッガーのシンボル パスでシンボル サーバーを使用する場合と非常に似ています。 詳細については、「シンボル サーバーと シンボル ストアの使用」を参照してください。
ダウンストリーム ストアが指定されている場合、SymChk はシンボル サーバーによって検出された有効なすべてのシンボル ファイルのコピーを作成し、ダウンストリーム ストアに配置します。 完全一致のシンボル ファイルだけがダウンストリームにコピーされます。
SymChk は、シンボル サーバーに対してクエリを実行する前に、常にダウンストリーム ストアを検索します。 そのため、他のユーザーがシンボル ストアを管理している場合は、ダウンストリーム ストアの使用に注意する必要があります。 SymChk を 1 回実行すると、シンボル ファイルが見つから、ダウンストリーム ストアにコピーされます。 シンボル ストアでこれらのファイルが変更または削除された後に SymChk を再度実行した場合、SymChk はダウンストリーム ストアで探しているファイルを見つけてそれ以上探す必要がなされないので、この事実に気付くことはありません。
メモ SymChk では、シンボル サーバー DLL として SymSrv (Symsrv.dll) が常に使用されます。 一方、デバッガーは SymSrv 以外のシンボル サーバー DLL を選択できます (使用可能な場合)。 (SymSrv は、パッケージのデバッグ ツールに含まれるシンボル Windowsです)。
SymChk を使用してシンボルがプライベートかパブリックかを判断する
シンボル ファイルがプライベートかパブリックかを判断するには、SymChk に詳細出力が表示される /v パラメーターを使用します。 たとえばMyApp.exe MyApp.pdb が c:\sym フォルダーにあるとします。 次のコマンドを入力します。
symchk /v c:\sym\MyApp.exe /s c:\sym**
MyApp.pdb にプライベート シンボルが含まれている場合、SymChk の出力は次のように表示されます。
[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
MyApp.pdb にパブリック シンボルだけが含まれている場合、SymChk の出力は次のように表示されます。
[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
パブリック シンボル ファイルのみを検索するために検索を制限するには、/s パラメーター (/ss) と一緒に s オプションを使用します。 MyApp.pdb にパブリック シンボルだけが含まれている場合、次のコマンドは一致を検索します。 MyApp.pdb にプライベート シンボルが含まれている場合、一致は見つけ出しません。
symchk /v c:\sym\MyApp.exe /ss c:\sym
詳細については、「パブリックシンボルと プライベート シンボル」を参照してください。
例
次に例をいくつか示します。 次のコマンドは、プログラムのシンボルを検索し、次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
別のシンボル パスでもう一度やり直してください。
e:\debuggers> symchk f:\myapp.exe /s f:\symbols\newdirectory
SYMCHK: FAILED files = 0
SYMCHK: PASSED + IGNORED files = 1
今回は検索に成功しました。 verbose オプションを使用しない場合、SymChk はシンボルの検索に失敗したファイルのみを一覧表示します。 したがって、この例では、ファイルは一覧に含め "されません"。 "成功" カテゴリに 1 つのファイルが表示され、"failed" カテゴリには何も表示されないので、検索が成功したと伝えることができます。
実行可能コードが含まれているプログラム ファイルは無視されます。 多くのリソース ファイルは、この種類です。
すべてのプログラム ファイルのファイル名を表示する場合は、 /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
次のコマンドは、シンボル サーバー内の多数Windowsシンボルを検索します。 考えられるさまざまなエラー メッセージがあります。
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