IDiaFrameData
Предоставляет сведения о кадре стека.
Синтаксис
IDiaFrameData : IUnknown
Методы в порядке таблицы Vtable
В следующей таблице показаны методы IDiaFrameData
.
Метод | Description |
---|---|
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 | Извлекает флаг, указывающий, что обработка исключений C++ действует. |
IDiaFrameData::get_functionStart | Извлекает флаг, указывающий, что блок содержит точку входа функции. |
IDiaFrameData::get_allocatesBasePointer | Извлекает флаг, указывающий, что базовый указатель выделен для кода в этом диапазоне адресов. Этот метод является устаревшим. |
IDiaFrameData::get_type | Извлекает тип кадра для компилятора. |
IDiaFrameData::get_functionParent | Извлекает интерфейс данных кадра для включающей функции. |
IDiaFrameData::execute | Выполняет очистку стека и возвращает текущее состояние регистров в интерфейсе обхода стека. |
Замечания
Сведения, доступные для кадра, предназначены для точек выполнения в диапазоне адресов, указанных адресом и длиной блока.
Заметки для вызывающих абонентов
Получите этот интерфейс, вызвав методы IDiaEnumFrameData::Next или IDiaEnumFrameData::Item . Дополнительные сведения см. в интерфейсе IDiaEnumFrameData .
Пример
В этом примере выводятся свойства IDiaFrameData
объекта. Пример получения интерфейса см. в интерфейсе IDiaFrameData
IDiaEnumFrameData.
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");
}
}
}
Requirements
Заголовок: Dia2.h
Библиотека: diaguids.lib
DLL: msdia80.dll