IDiaStackFrame
Предоставляет свойства кадра стека.
IDiaStackFrame : IUnknown
Методы в том порядке Vtable
Следующие методы, поддерживаемые этим интерфейсом.
Метод |
Описание |
---|---|
Извлекает пометить указывающее, что базовый указатель установлен для кода в этом диапазоне адресов. Этот метод является устаревшим. |
|
Получает базовый адрес кадра. |
|
Извлекает пометить показывающее, что обработка исключений С++. |
|
Извлекает пометить указывающее, что блок содержит точку входа функции. |
|
Извлекает число байтов локальных переменных отправлянных в стеке. |
|
Возвращает число байтов отправлянных параметров в стеке. |
|
Извлекает число байтов в блоке кода в прологе |
|
Извлекает число байт, сохраненных регистров отправлянных в стеке. |
|
Получает базовый адрес локальные переменные. |
|
Получает максимальное число байтов отправлянных в стеке во фрейме. |
|
Получает значение заданной локальной переменной в виде необработанных байт. |
|
Извлекает значение указанного регистра. |
|
Получает обратный адрес кадра. |
|
Извлекает размер кадра, в байтах. |
|
Извлекает пометить показывающее, что обработка ошибок системы. |
|
Извлекает тип кадра. |
Заметки
Абстракция кадр стека вызова функции во время его выполнения.
Замечания для вызывающих объектов
Для получения этого интерфейса нужно вызвать метод 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