シンボル ハンドラーの初期化

次のコードは、シンボル ハンドラーを初期化する方法を示しています。 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;
}