IDiaStackFrame
公开堆栈帧的属性。
语法
IDiaStackFrame : IUnknown
Vtable 顺序中的方法
下面是此接口支持的方法:
方法 | 说明 |
---|---|
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);
}
}
}
要求
标头:Dia2.h
库:diaguids.lib
DLL:msdia80.dll