シンボルの読み込み
シンボル ハンドラーがシンボルを読み込むのは、fInvadeProcess パラメーターを TRUE に設定して SymInitialize 関数を呼び出すときか、SymLoadModuleEx 関数を呼び出してモジュールを指定するときです。 どちらの場合も、シンボル ハンドラーは、SymSetOptions 関数によって設定されたオプションに応じて、シンボルを読み込むか、シンボルが要求されるまでシンボルの読み込みを延期します。
シンボル ハンドラーを使用して、任意のモジュールのシンボル情報を取得できます。SymInitialize 呼び出しで指定されたプロセスに関連付ける必要はありません。 任意のモジュールを使用するには、ImageName パラメーターにモジュール イメージへの完全パスを指定します。 デバッグ情報がある任意の実行可能モジュール (.exe、.dll、.drv、.sys、.scr、.cpl、.com) へのパスを指定できます。 BaseOfDll パラメーターを使用して読み込みアドレスを指定すると、そのアドレスがシンボルのアドレスのベースになります。
アプリケーションの期間中ずっとシンボル モジュールを読み込んだままにしておく必要がない場合があります。 シンボル ハンドラーのモジュールの一覧からシンボル モジュールを解放するには、SymUnloadModule64 関数を使用します。 この関数によって、シンボル モジュールに割り当てられたメモリが解放されます。 そのモジュールのシンボルを再び使用するには、シンボルの遅延読み込みオプションが設定されている場合でも、SymLoadModuleEx 関数を呼び出す必要があります。
シンボル読み込みの問題の診断
シンボル読み込みのすべての試行を表示するには、SYMOPT_DEBUG を指定して symSetOptions を呼び出します。 これにより、DbgHelp は、シンボル検索に関する詳細情報 (検索対象のディレクトリやエラー メッセージなど) を使用して、OutputDebugString 関数を呼び出します。 コードで SymRegisterCallback64 が使用される場合、DbgHelp は OutputDebugString を呼び出す代わりにコールバック関数を呼び出します。 ActionCode パラメーターは CBA_DEBUG_INFO に設定されます。また、CallbackData パラメーターは表示できる文字列です。
ソース コードを変更せずに、このデバッグ出力をコンソールに表示できるようにするには、SymInitialize 関数を呼び出す前に、DBGHELP_DBGOUT 環境変数を NULL 以外の値に設定します。 情報をファイルに記録するには、使用するログ ファイルの名前を DBGHELP_LOG 環境変数に設定します。
これらの機能は、必要な場合にのみ使用する必要があることに注意してください。 多くのシンボルを含むモジュールのシンボル読み込みが遅くなる可能性があります。