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


IDiaFrameData

Предоставляет кадр стека.

IDiaFrameData : IUnknown

Методы в том порядке Vtable

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

Метод

Описание

IDiaFrameData::get_addressSection

Извлекает часть раздела адреса кода для кадра.

IDiaFrameData::get_addressOffset

Извлекает часть смещения адреса кода для кадра.

IDiaFrameData::get_relativeVirtualAddress

Получает относительный виртуальный адрес образа (RVA) кода для кадра.

IDiaFrameData::get_virtualAddress

Получает виртуальный адрес () VA кода для кадра.

IDiaFrameData::get_lengthBlock

Извлекает длина в байтах, блока кода, описанного кадром.

IDiaFrameData::get_lengthLocals

Извлекает число байтов локальных переменных отправлянных в стеке.

IDiaFrameData::get_lengthParams

Возвращает число байтов отправлянных параметров в стеке.

IDiaFrameData::get_maxStack

Получает максимальное число байтов отправлянных в стеке во фрейме.

IDiaFrameData::get_lengthProlog

Извлекает число байтов кода в прологе в блоке.

IDiaFrameData::get_lengthSavedRegisters

Извлекает число байт, сохраненных регистров отправлянных в стеке.

IDiaFrameData::get_program

Извлекает строку программы, которая используется для вычисления набор регистров перед вызовом текущей функции.

IDiaFrameData::get_systemExceptionHandling

Извлекает пометить который указывает на то, что обработка ошибок системы.

IDiaFrameData::get_cplusplusExceptionHandling

Извлекает пометить который указывает на то, что обработка исключений С++.

IDiaFrameData::get_functionStart

Извлекает пометить который указывает на то, что блок содержит точку входа функции.

IDiaFrameData::get_allocatesBasePointer

Извлекает пометить который указывает на то, что базовый указатель установлен для кода в этом диапазоне адресов. Этот метод является устаревшим.

IDiaFrameData::get_type

Извлекает тип кадра компилятор-специфического.

IDiaFrameData::get_functionParent

Извлечение информации фрейма интерфейс для наиболее узкую функцию.

IDiaFrameData::execute

Выполняет стек разматывая и возвращает текущее состояние регистров в интерфейсе кадра проверки стека.

Заметки

Сведения, доступные для фрейма для точек выполнения в диапазон адресов, показанный адресом блока и длиной.

Замечания для вызывающих объектов

Для получения этого интерфейса нужно вызвать метод IDiaEnumFrameData::Next OR IDiaEnumFrameData::Item методы. См. IDiaEnumFrameData интерфейс.

Пример

Этот пример выводит свойства IDiaFrameData объект. См. IDiaEnumFrameData интерфейс пример IDiaFrameData интерфейс получен.

void PrintFrameData(IDiaFrameData* pFrameData){
    DWORD dwSect;
    DWORD dwOffset;
    DWORD cbBlock;
    DWORD cbLocals; // Number of bytes reserved for the function locals
    DWORD cbParams; // Number of bytes reserved for the function arguments
    DWORD cbMaxStack;
    DWORD cbProlog;
    DWORD cbSavedRegs;
    BOOL  bSEH;
    BOOL  bEH;
    BOOL  bStart;
    BSTR  wszProgram;

    if(pFrameData->get_addressSection(&dwSect) == S_OK && 
       pFrameData->get_addressOffset(&dwOffset) == S_OK &&
       pFrameData->get_lengthBlock(&cbBlock) == S_OK &&
       pFrameData->get_lengthLocals(&cbLocals) == S_OK &&
       pFrameData->get_lengthParams(&cbParams) == S_OK &&
       pFrameData->get_maxStack(&cbMaxStack) == S_OK &&
       pFrameData->get_lengthProlog(&cbProlog) == S_OK &&
       pFrameData->get_lengthSavedRegisters(&cbSavedRegs) == S_OK &&
       pFrameData->get_systemExceptionHandling(&bSEH) == S_OK &&
       pFrameData->get_cplusplusExceptionHandling(&bEH) == S_OK &&
       pFrameData->get_functionStart(&bStart) == S_OK )
    {
        wprintf(L"Frame address  : %04X:%08X\n", dwSect, dwOffset);
        wprintf(L"Block size     : 0x%8X\n", cbBlock);
        wprintf(L"Locals size    : 0x%8X\n", cbLocals);
        wprintf(L"Parms size     : 0x%8X\n", cbParams);
        wprintf(L"Max stack used : 0x%8X\n", cbMaxStack);
        wprintf(L"Prolog size    : 0x%8X\n", cbProlog);
        wprintf(L"Saved regs size: 0x%8X\n", cbSavedRegs);
        wprintf(L"System Exception Handling: %c\n", bSEH ? L'Y' : L'N');
        wprintf(L"C++ Exception Handling   : %c\n", bEH ? L'Y' : L'N');
        wprintf(L"Function starts in block : %c\n", bStart ? L'Y' : L'N');

        if (pFrameData->get_program(&wszProgram) == S_OK)
        {
            wprintf(L"Program used for register set: %s\n", wszProgram);
            SysFreeString(wszProgram);
        }
        else
        {
            wprintf(L"\n");
        }
    }
}

Требования

Заголовок: Dia2.h

Библиотеки: diaguids.lib

Библиотеки DLL: msdia80.dll

См. также

Ссылки

IDiaEnumFrameData

IDiaEnumFrameData::Item

IDiaEnumFrameData::Next

Другие ресурсы

Интерфейсы (SDK для доступа к интерфейсу отладки)