SymChk の使用

SymChk の基本構文は次のとおりです。

symchk [/r] FileNames /s SymbolPath 

FileNames は、シンボルが必要な 1 つ以上のプログラム ファイルを指定します。 FileNames がディレクトリで、/r フラグが使用されている場合、このディレクトリは再帰的に調べられ、SymChk はこのディレクトリ ツリー内のすべてのプログラム ファイルのシンボルを見つけようとします。 SymbolPath は、SymChk がシンボルを検索する場所を指定します。

他にも多くのコマンド ライン オプションがあります。 完全な一覧については、「SymChk コマンド ライン オプション」を参照してください。

symchk の取得

Symchk は、他のデバッグ ツールと同様に、デバッガーの一部として提供されます。 詳細については、「 Windows 用デバッグ ツールのダウンロードとインストール」を参照してください。

デバッグ ツールがインストールされると、64 ビット Windows 用のこのディレクトリで symchk が利用できるようになります。

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 は常に SymSrv (Symsrv.dll) をシンボル サーバー DLL として使用します。 一方、デバッガーで SymSrv 以外のシンボル サーバー DLL を使用可能であれば選択できます。 (SymSrv は、Windows 用デバッグ ツール パッケージに含まれているシンボル サーバーです。)

SymChk を使用してシンボルがプライベートかパブリックかを特定する

シンボル ファイルがプライベートかパブリックかを特定するには、/v パラメーターを使用して SymChk が詳細な出力を表示するようにします。 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 オプションを /s パラメーターと共に使用します (/ss)。 次のコマンドでは、MyApp.pdb にパブリック シンボルのみが含まれている場合、一致が見つかります。 MyApp.pdb にプライベート シンボルが含まれている場合、一致は見つかりません。

symchk /v C:\sym\MyApp.exe /s 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

今度はシンボルが見つかりました。 詳細オプションを使用しない場合、SymChk ではシンボルを見つけられなかったファイルのみが一覧表示されます。 したがって、この例ではどのファイルも一覧表示されませんでした。 「passed」(成功) カテゴリに 1 つのファイルが一覧表示され、「failed」(失敗) カテゴリにはファイルが 1 つもないため、検索が成功したことがわかります。

プログラム ファイルは、実行可能なコードを含んでいなければ無視されます。 多くのリソース ファイルはこのタイプです。

すべてのプログラム ファイルのファイル名を確認する場合は、/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

参照

SymChk のコマンドライン オプション

シンボル サーバーとシンボル ストアの使用