Поделиться через


IDiaSessionEx

Предоставляет расширенный контекст запроса для символов отладки.

Синтаксис

IDiaSessionEx : IDiaSession

Методика

В следующей таблице показаны методы IDiaSessionEx.

Метод Описание
IDiaSessionEx::isFastLinkPDB Извлекает логическое значение, указывающее, что исходная отладочная информация была создана с /DEBUG:fastlink.
IDiaSessionEx::isPortablePDB Извлекает логическое значение, указывающее, что исходная отладочная информация использует формат переносимого PDB.
"IDiaSessionEx::getSourceLinkInfo" Извлекает перечисление сведений о исходной ссылке.

Замечания

Важно вызвать метод IDiaSession::put_loadAddress после создания объекта IDiaSession , а значение, переданное методу put_loadAddress, должно быть ненулевым — для доступа к любым свойствам символов виртуального адреса (VA). Адрес загрузки поступает из любой программы, загружаемой исполняемым файлом, отлаживаемым. Например, можно вызвать функцию Win32 GetModuleInformation, чтобы получить адрес нагрузки для исполняемого файла, учитывая дескриптор исполняемого файла.

Так как IDiaSessionEx наследуется от IDiaSession, он alos имеет все те же методы и может передаваться любой функции, которая принимает IDiaSession.

Пример

В этом примере показано, как получить интерфейс IDiaSessionEx в рамках общей инициализации пакета SDK для доступа к интерфейсу отладки (DIA).

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

См. также