IDiaFrameData

Applies to: yesVisual Studio noVisual Studio for Mac

Exposes the details of a stack frame.

Syntax

IDiaFrameData : IUnknown

Methods in Vtable Order

The following table shows the methods of IDiaFrameData.

Method Description
IDiaFrameData::get_addressSection Retrieves the section part of the code address for the frame.
IDiaFrameData::get_addressOffset Retrieves the offset part of the code address for the frame.
IDiaFrameData::get_relativeVirtualAddress Retrieves the image relative virtual address (RVA) of the code for the frame.
IDiaFrameData::get_virtualAddress Retrieves the virtual address (VA) of the code for the frame.
IDiaFrameData::get_lengthBlock Retrieves the length, in bytes, of the block of code described by the frame.
IDiaFrameData::get_lengthLocals Retrieves the number of bytes of local variables pushed on the stack.
IDiaFrameData::get_lengthParams Retrieves the number of bytes of parameters pushed on the stack.
IDiaFrameData::get_maxStack Retrieves the maximum number of bytes pushed on the stack in the frame.
IDiaFrameData::get_lengthProlog Retrieves the number of bytes of prologue code in the block.
IDiaFrameData::get_lengthSavedRegisters Retrieves the number of bytes of saved registers pushed on the stack.
IDiaFrameData::get_program Retrieves the program string that is used to compute the register set before the call to the current function.
IDiaFrameData::get_systemExceptionHandling Retrieves a flag that indicates that system exception handling is in effect.
IDiaFrameData::get_cplusplusExceptionHandling Retrieves a flag that indicates that C++ exception handling is in effect.
IDiaFrameData::get_functionStart Retrieves a flag that indicates that the block contains the entry point of a function.
IDiaFrameData::get_allocatesBasePointer Retrieves a flag that indicates that the base pointer is allocated for code in this address range. This method is deprecated.
IDiaFrameData::get_type Retrieves the compiler-specific frame type.
IDiaFrameData::get_functionParent Retrieves frame data interface for enclosing function.
IDiaFrameData::execute Performs stack unwinding and returns the current state of registers in a stack walk frame interface.

Remarks

The details available for a frame are for execution points within the address range indicated by the address and block length.

Notes for Callers

Obtain this interface by calling the IDiaEnumFrameData::Next or IDiaEnumFrameData::Item methods. See the IDiaEnumFrameData interface for details.

Example

This example prints out the properties of an IDiaFrameData object. See the IDiaEnumFrameData interface for an example of how the IDiaFrameData interface is obtained.

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

Header: Dia2.h

Library: diaguids.lib

DLL: msdia80.dll

See also