次の方法で共有


IDiaDataSourceEx::loadDataForExeEx

.exe/.dll ファイルに関連付けられているデバッグ データを開き、オプションのレコード プリフェッチを使用して準備します。

構文

HRESULT loadDataForExeEx (
   LPCOLESTR executable,
   LPCOLESTR searchPath,
   IUnknown* pCallback,
   BOOL      fPdbPrefetching
);

パラメーター

executable

[入力] .exe または .dll ファイルへのパス。

searchPath

[入力] デバッグ データを検索するための代替パス。 複数のパスはセミコロンで区切る必要があります。 パスには、末尾の \が含まれている場合があります。

pCallback

[in]IDiaLoadCallbackIDiaLoadCallback2IDiaReadExeAtOffsetCallbackIDiaReadExeAtRVACallback インターフェイスなどのデバッグ コールバック インターフェイスをサポートするオブジェクトのIUnknown インターフェイス。

fPdbPrefetching

[in] TRUEに設定すると、隣接するデバッグ レコードがメモリにプリフェッチされ、より小さいファイル I/O 操作の数が少なく、より大きな操作に置き換えられる可能性があるため、それらのレコードにアクセスすると、メモリ使用量が増加する可能性があるため、全体的なスループットが向上する可能性があります。 FALSEに設定すると、これはIDiaDataSource::loadDataForExeと同じように動作します。 他の値に設定すると、動作は指定されません。

戻り値

成功した場合は、S_OK を返します。それ以外の場合は、エラー コードを返します。 次の表に、このメソッドで発生する可能性のあるエラー コードの一部を示します。

説明
E_PDB_NOT_FOUND ファイルを開くことができなかったか、ファイルの形式が無効です。
E_PDB_FORMAT 古い形式のファイルにアクセスしようとしました。
E_PDB_INVALID_SIG シグネチャが一致しません。
E_PDB_INVALID_AGE 経過期間が一致しません。
E_INVALIDARG 無効なパラメーター。
E_UNEXPECTED データ ソースは既に準備されています。

解説

.exe/.dll ファイルのデバッグ ヘッダーには、関連付けられているデバッグ データの場所が指定されています。

シンボル サーバーからデバッグ データを読み込む場合、 symsrv.dll は、ユーザーのアプリケーションまたは msdia140.dll がインストールされているのと同じディレクトリに存在するか、システム ディレクトリに存在する必要があります。

このメソッドは、デバッグ ヘッダーを読み取り、デバッグ データを検索して準備します。 必要に応じて、コールバックを使用して、検索の進行状況をレポートおよび制御できます。 たとえば、 IDiaLoadCallback::NotifyDebugDir は、 IDiaDataSourceEx::loadDataForExeEx メソッドがデバッグ ディレクトリを検索して処理するときに呼び出されます。

IDiaReadExeAtOffsetCallbackインターフェイスとIDiaReadExeAtRVACallback インターフェイスを使用すると、クライアント アプリケーションは、標準ファイル I/O を介してファイルに直接アクセスできない場合に実行可能ファイルからデータを読み取るための代替方法を提供できます。

検証なしで .pdb ファイルを読み込むには、 IDiaDataSourceEx::loadDataFromPdbEx メソッドを使用します。

特定の条件に対して .pdb ファイルを検証するには、 IDiaDataSourceEx::loadAndValidateDataFromPdbEx メソッドを使用します。

.pdb ファイルをメモリから直接読み込むには、 IDiaDataSourceEx::loadDataFromIStreamEx メソッドを使用します。

読み込まずに .pdb ファイルを検証するには、 IDiaDataSourceEx::ValidatePdb メソッドを使用します。

class MyCallBack: public IDiaLoadCallback
{
...
};
MyCallBack callback;
...
HRESULT hr = pSource->loadDataForExeEx( L"myprog.exe", L".\debug", (IUnknown*)&callback, TRUE);
if (FAILED(hr))
{
    // Report error
}

関連項目