IDiaFrameData

显示堆栈帧的详细信息。

IDiaFrameData : IUnknown

方法按 Vtable 顺序

下表显示 IDiaFrameData方法。

方法

说明

IDiaFrameData::get_addressSection

检索代码地址的部分部件帧的。

IDiaFrameData::get_addressOffset

检索代码地址的偏移量部件帧的。

IDiaFrameData::get_relativeVirtualAddress

检索代码的图像相对 (RVA)虚拟地址 (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::NextIDiaEnumFrameData::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");
        }
    }
}

要求

标题:Dia2.h

库:diaguids.lib

DLL:msdia80.dll

请参见

参考

IDiaEnumFrameData

IDiaEnumFrameData::Item

IDiaEnumFrameData::Next

其他资源

接口(调试接口访问 SDK)