シンボル ハンドラーの初期化
次のコードは、シンボル ハンドラーを初期化する方法を示しています。 SymSetOptions 関数は、シンボル情報が要求されるまでシンボルの読み込みを延期します。 このコードは、SymInitialize 関数の bInvade パラメーターに TRUE 値を渡すことによって、指定されたプロセス内の各モジュールのシンボルを読み込みます。 (この関数は、プロセスがアドレス空間にマップした各モジュールの SymLoadModule64 関数を呼び出します。)
指定したプロセスが SymInitialize を呼び出したプロセスでない場合、コードは SymInitialize の最初のパラメーターとしてプロセス識別子を渡します。
SymInitialize の 2 番目のパラメーターとして NULL を指定すると、シンボル ハンドラーは既定の検索パスを使用してシンボル ファイルを検索する必要があることを示します。 シンボル ハンドラーがシンボル ファイルを検索する方法、またはアプリケーションでシンボル検索パスを指定する方法の詳細については、「シンボル パス」を参照してください。
DWORD error;
HANDLE hCurrentProcess;
HANDLE hProcess;
SymSetOptions(SYMOPT_UNDNAME | SYMOPT_DEFERRED_LOADS);
hCurrentProcess = GetCurrentProcess();
if (!DuplicateHandle(hCurrentProcess, hCurrentProcess, hCurrentProcess, &hProcess, 0, FALSE, DUPLICATE_SAME_ACCESS))
{
// DuplicateHandle failed
error = GetLastError();
printf("DuplicateHandle returned error : %d\n", error);
return FALSE;
}
if (!SymInitialize(hProcess, NULL, TRUE))
{
// SymInitialize failed
error = GetLastError();
printf("SymInitialize returned error : %d\n", error);
return FALSE;
}