共用方式為


IDiaFrameData

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

語法

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 物件的屬性。 如需如何取得 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

另請參閱