次の方法で共有


シンボル モジュールの読み込み

アプリケーションが fInvadeProcess パラメーターを TRUE に設定して SymInitialize 関数を呼び出さない場合、必要なときにモジュールのシンボルを読み込む必要があります。 必要に応じてシンボル モジュールを読み込むには、アプリケーションはモジュール名への完全なパスを持つ SymLoadModuleEx 関数を呼び出すことができます。 モジュールが読み込まれると、シンボル ハンドラーは、SymSetOptions 関数を使用して設定されたオプションに応じて、シンボルを直ちに読み込むか、読み込みを延期します。

次のコードは、シンボル モジュールを読み込みます。 なお、この例では、「シンボル ハンドラーの初期化」のコード を使用してシンボル ハンドラーを初期化していることを前提としています。

TCHAR  szImageName[MAX_PATH] = TEXT("foo.dll");
DWORD64 dwBaseAddr = 0;

if (SymLoadModuleEx(hProcess,    // target process 
                    NULL,        // handle to image - not used
                    szImageName, // name of image file
                    NULL,        // name of module - not required
                    dwBaseAddr,  // base address - not required
                    0,           // size of image - not required
                    NULL,        // MODLOAD_DATA used for special cases 
                    0))          // flags - not required
{
    // SymLoadModuleEx returned success
}
else
{
    // SymLoadModuleEx failed
    DWORD error = GetLastError();
    printf("SymLoadModuleEx returned error : %d\n", error);
}

szImageName には、デバッグ情報 (.exe、.dll、.drv、.sys、.scr、.cpl、.com) を持つ任意の実行可能モジュールへのパスを指定できます。 また、dwBaseAddr は、読み込まれるシンボル モジュールのベース アドレスです。 この値が 0 の場合、シンボル ハンドラーは指定されたシンボル モジュールからベース アドレスを取得します。

シンボル モジュールのアンロード