IDiaSessionEx
为调试符号提供扩展查询上下文。
语法
IDiaSessionEx : IDiaSession
方法
下表显示了 IDiaSessionEx
的方法。
方法 | 描述 |
---|---|
IDiaSessionEx::isFastLinkPDB |
检索一个布尔值,指示源调试信息是使用 /DEBUG:fastlink 生成的。 |
IDiaSessionEx::isPortablePDB |
检索一个布尔值,指示源调试信息正在使用 可移植 PDB 格式。 |
“IDiaSessionEx::getSourceLinkInfo” | 检索源链接信息的枚举。 |
言论
创建 IDiaSession
对象后调用 IDiaSession::put_loadAddress
方法非常重要,并且传递给 put_loadAddress
方法的值必须是非零的,才能访问符号的任何虚拟地址(VA)属性。 加载地址来自加载正在调试的可执行文件的任何程序。 例如,你可以调用 Win32 函数 GetModuleInformation
来检索可执行文件的加载地址,给定可执行文件的句柄。
由于 IDiaSessionEx
继承自 IDiaSession
,因此它具有相同的方法,并且可以传递给接受 IDiaSession
的任何函数。
例
此示例演示如何在调试接口访问 (DIA) SDK 的一般初始化过程中获取 IDiaSessionEx
接口。
CComPtr<IDiaDataSource> pSource;
ComPtr<IDiaSessionEx> psessionex;
void InitializeDIA(const char *szFilename)
{
HRESULT hr = CoCreateInstance( CLSID_DiaSource,
NULL,
CLSCTX_INPROC_SERVER,
__uuidof( IDiaDataSource ),
(void **) &pSource);
if (FAILED(hr))
{
Fatal("Could not CoCreate CLSID_DiaSource. Register msdia140.dll." );
}
wchar_t wszFilename[ _MAX_PATH ];
mbstowcs( wszFilename,
szFilename,
sizeof( wszFilename )/sizeof( wszFilename[0] ) );
if ( FAILED( pSource->loadDataFromPdb( wszFilename ) ) )
{
if ( FAILED( pSource->loadDataForExe( wszFilename, NULL, NULL ) ) )
{
Fatal( "loadDataFromPdb/Exe" );
}
}
ComPtr<IDiaSession> psession;
if ( FAILED( pSource->openSession( &psession ) ) )
{
Fatal( "openSession" );
}
if ( FAILED( psession.QueryInterface(&psessionex) ) )
{
Fatal( "Failed to upgrade from IDiaSession to IDiaSessionEx, are you using an older version of msdia140.dll?" );
}
}
要求
标头:Dia2.h
库:diaguids.lib
DLL:msdia140.dll