共用方式為


IDiaFrameData

公開 (expose) 的堆疊框架的詳細資料。

IDiaFrameData : IUnknown

方法 Vtable 順序

下表顯示的方法IDiaFrameData

方法

描述

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::NextIDiaEnumFrameData::Item方法。 請參閱IDiaEnumFrameData如需詳細資訊的介面。

範例

這個範例會列印出的內容IDiaFrameData物件。 請參閱IDiaEnumFrameData介面的方式,例如IDiaFrameData介面會取得。

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)