IDiaDataSource::loadDataFromMiscInfo
打开并准备与 .exe
/.dll
文件关联的调试数据。
语法
HRESULT loadDataFromMiscInfo (
LPCOLESTR executable,
LPCOLESTR searchPath,
DWORD timeStampExe,
DWORD timeStampDbg,
DWORD sizeOfExe,
DWORD cbMiscInfo,
BYTE* pbMiscInfo,
IUnknown* pCallback
);
参数
executable
[in] .exe
或 .dll
文件的路径。
searchPath
[in]用于搜索调试数据的备用路径。 多个路径应以分号分隔。 路径可能包含尾随 \
。
timeStampExe
[in]可执行映像的备用时间戳。
timeStampDbg
[in]调试信息的备用时间戳。
sizeOfExe
[in]可执行映像的备用大小(以字节为单位)。
cbMiscInfo
[in]参数的大小(以字节为单位 pbMiscInfo
)。
pbMiscInfo
[in]替代的调试标头 IMAGE_DEBUG_MISC
,格式为文件名提供调试信息。
pCallback
[in] IUnknown
支持调试回调接口的对象接口,例如 IDiaLoadCallback
、 IDiaLoadCallback2
、 IDiaReadExeAtOffsetCallback
和/或 IDiaReadExeAtRVACallback
接口。
返回值
如果成功,则返回 S_OK
;否则,返回错误代码。 下表显示了此方法的一些可能的错误代码。
值 | 说明 |
---|---|
E_PDB_NOT_FOUND |
无法打开文件或该文件的格式无效。 |
E_PDB_FORMAT |
尝试访问采用过时格式的文件。 |
E_PDB_INVALID_SIG |
签名不匹配。 |
E_PDB_INVALID_AGE |
年限不匹配。 |
E_INVALIDARG |
参数无效。 |
E_UNEXPECTED |
数据源已准备好。 |
注解
pbMiscInfo 替换可执行映像中的调试信息,并将关联的调试数据位置命名。 时间戳和大小用于匹配调试信息。
如果要从符号服务器加载调试数据, symsrv.dll 必须存在于安装了用户应用程序或 msdia140.dll 的同一目录中,或者它必须存在于系统目录中。
此方法搜索并准备调试数据。 搜索的进度可以选择通过回调进行报告和控制。 例如, IDiaLoadCallback::NotifyDebugDir
当方法查找和处理调试目录时 IDiaDataSource::loadDataForExe
,将调用该目录。
IDiaReadExeAtRVACallback
当IDiaReadExeAtOffsetCallback
无法通过标准文件 I/O 直接访问文件时,客户端应用程序允许客户端应用程序提供从可执行文件读取数据的替代方法。
若要在不验证的情况下加载 .pdb 文件,请使用 IDiaDataSource::loadDataFromPdb
该方法。
若要根据特定条件验证 .pdb 文件,请使用 IDiaDataSource::loadAndValidateDataFromPdb
该方法。
若要直接从内存中加载 .pdb 文件,请使用 IDiaDataSource::loadDataFromIStream
该方法。
若要在不加载 .pdb 文件的情况下验证该文件,请使用 IDiaDataSourceEx::ValidatePdb 方法。
示例
DWORD dwTimeStamp = 0x3BF1C039;
DWORD dwSizeImage = 0x0000A000;
BYTE pbMiscInfo[0x110] = {
...
};
HRESULT hr = pSource->loadDataFromMiscInfo( L"myprog.exe", L".\debug", dwTimeStamp, dwTimeStamp, dwSizeOfImage, sizeof(pbMiscInfo), pbMiscInfo, nullptr);
if (FAILED(hr))
{
// Report error
}