IDiaDataSource::loadDataForExe

打开并准备与 .exe/.dll 文件关联的调试数据。

语法

HRESULT loadDataForExe (
   LPCOLESTR executable,
   LPCOLESTR searchPath,
   IUnknown* pCallback
);

参数

可执行文件

[in] .exe 或 .dll 文件的路径。

SearchPath

[in] 用于搜索调试数据的备用路径。

pCallback

[in] 支持调试回调接口的对象的 IUnknown 接口,如 IDiaLoadCallbackIDiaLoadCallback2IDiaReadExeAtOffsetCallback 和/或 IDiaReadExeAtRVACallback 接口。

返回值

如果成功,则返回 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 的同一目录中,或者它必须存在于系统目录中。

此方法会读取调试头,然后搜索并准备调试数据。 搜索的进度可以选择通过回调进行报告和控制。 例如,当 IDiaDataSource::loadDataForExe 方法查找并处理调试目录时,将调用 IDiaLoadCallback::NotifyDebugDir

当无法通过标准文件 I/O 直接访问文件时,IDiaReadExeAtOffsetCallbackIDiaReadExeAtRVACallback 接口允许客户端应用程序提供从可执行文件读取数据的替代方法。

若要在不进行验证的情况下加载 .pdb 文件,请使用 IDiaDataSource::loadDataFromPdb 方法。

若要根据特定条件验证 .pdb 文件,请使用 IDiaDataSource::loadAndValidateDataFromPdb 方法。

若要直接从内存加载 .pdb 文件,请使用 IDiaDataSource::loadDataFromIStream 方法。

示例

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

另请参阅