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

另请参阅