显示堆栈帧的属性。
IDiaStackFrame : IUnknown
方法按 Vtable 顺序
下面是此接口支持的方法:
方法 |
说明 |
---|---|
检索指示的标志基本指针对于此地址范围的代码分配。此方法已被否决。 |
|
检索帧的地址基础。 |
|
检索指示的标志 C++ 异常处理有效。 |
|
检索指示的标志块包含入口点函数。 |
|
检索字节数在堆栈驱动器的局部变量。 |
|
检索字节数堆栈上推入的参数。 |
|
检索字节数在块的序言码 |
|
检索字节数在堆栈驱动器中保存的注册。 |
|
检索本地的地址基础。 |
|
检索在帧的堆栈驱动器的最大字节数。 |
|
检索指定的局部变量的值作为原始的字节。 |
|
检索指定的寄存器值。 |
|
检索框架的返回地址。 |
|
在字节检索框架的大小。 |
|
检索指示的标志系统异常处理有效。 |
|
检索帧类型。 |
备注
堆栈帧是的抽象在执行时函数调用。
调用方的说明
通过调用 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