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


IDiaStackFrame

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

Синтаксис

IDiaStackFrame : IUnknown

Методы в порядке таблицы Vtable

Ниже приведены методы, поддерживаемые этим интерфейсом:

Метод Description
IDiaStackFrame::get_allocatesBasePointer Извлекает флаг, указывающий, что базовый указатель выделен для кода в этом диапазоне адресов. Этот метод является устаревшим.
IDiaStackFrame::get_base Извлекает базу адресов кадра.
IDiaStackFrame::get_cplusplusExceptionHandling Извлекает флаг, указывающий, что обработка исключений C++ действует.
IDiaStackFrame::get_functionStart Извлекает флаг, указывающий, что блок содержит точку входа функции.
IDiaStackFrame::get_lengthLocals Извлекает количество байтов локальных переменных, отправленных в стек.
IDiaStackFrame::get_lengthParams Извлекает количество байт параметров, отправленных в стек.
IDiaStackFrame::get_lengthProlog Извлекает количество байтов кода пролога в блоке
IDiaStackFrame::get_lengthSavedRegisters Извлекает количество байт сохраненных регистров, отправленных в стек.
IDiaStackFrame::get_localsBase Извлекает базу адресов локальных параметров.
IDiaStackFrame::get_maxStack Извлекает максимальное количество байтов, отправленных в стек в кадре.
IDiaStackFrame::get_rawLVarInstanceValue Извлекает значение указанной локальной переменной в виде необработанных байтов.
IDiaStackFrame::get_registerValue Извлекает значение указанного регистра.
IDiaStackFrame::get_returnAddress Извлекает возвращаемый адрес кадра.
IDiaStackFrame::get_size Извлекает размер кадра в байтах.
IDiaStackFrame::get_systemExceptionHandling Извлекает флаг, указывающий, что обработка системных исключений действует.
IDiaStackFrame::get_type Извлекает тип кадра.

Замечания

Кадр стека — это абстракция вызова функции во время его выполнения.

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

Получите этот интерфейс, вызвав метод IDiaEnumStackFrames::Next . Пример получения IDiaStackFrame интерфейса см. в интерфейсе IDiaEnumStackFrames.

Пример

В этом примере отображаются различные атрибуты кадра стека.

void PrintStackFrame(IDiaStackFrame* pFrame)
{
    if (pFrame != NULL)
    {
        ULONGLONG bottom = 0;
        ULONGLONG top    = 0;

        if (pFrame->get_base(&bottom) == S_OK &&
            pFrame->get_registerValue( CV_REG_ESP, &top ) == S_OK )
        {
            printf("range = 0x%08I64x - 0x%08I64x\n", bottom, top);
        }

        ULONGLONG returnAddress = 0;
        if (pFrame->get_returnAddress(&returnAddress) == S_OK)
        {
            printf("return address = 0x%08I64x\n", returnAddress);
        }

        DWORD lengthFrame     = 0;
        DWORD lengthLocals    = 0;
        DWORD lengthParams    = 0;
        DWORD lengthProlog    = 0;
        DWORD lengthSavedRegs = 0;
        if (pFrame->get_size(&lengthFrame) == S_OK &&
            pFrame->get_lengthLocals(&lengthLocals) == S_OK &&
            pFrame->get_lengthParams(&lengthParams) == S_OK &&
            pFrame->get_lengthProlog(&lengthProlog) == S_OK &&
            pFrame->get_lengthSavedRegisters(&lengthSavedRegs) == S_OK)
        {
            printf("stack frame size          = 0x%08lx bytes\n", lengthFrame);
            printf("length of locals          = 0x%08lx bytes\n", lengthLocals);
            printf("length of parameters      = 0x%08lx bytes\n", lengthParams);
            printf("length of prolog          = 0x%08lx bytes\n", lengthProlog);
            printf("length of saved registers = 0x%08lx bytes\n", lengthSavedRegs);
        }
    }
}

Requirements

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

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

DLL: msdia80.dll

См. также