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