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


IDiaStackFrame

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

IDiaStackFrame : IUnknown

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

Следующие методы, поддерживаемые этим интерфейсом.

Метод

Описание

IDiaStackFrame::get_allocatesBasePointer

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

IDiaStackFrame::get_base

Получает базовый адрес кадра.

IDiaStackFrame::get_cplusplusExceptionHandling

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

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 метод. См. IDiaEnumStackFrames интерфейс пример на получение IDiaStackFrame интерфейс.

Пример

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

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);
        }
    }
}

Требования

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

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

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

См. также

Ссылки

IDiaEnumStackFrames

IDiaEnumStackFrames::Next

IDiaStackWalkFrame

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

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