次の方法で共有


IDiaStackFrame

スタック フレームのプロパティを公開します。

構文

IDiaStackFrame : IUnknown

Vtable 順序のメソッド

このインターフェイスでサポートされているメソッドを次に示します。

メソッド 説明
IDiaStackFrame::get_allocatesBasePointer このアドレス範囲にコードの基本ポインターが割り当てられていることを示すフラグを取得します。 このメソッドは非推奨です。
IDiaStackFrame::get_base フレームのアドレス ベースを取得します。
IDiaStackFrame::get_cplusplusExceptionHandling C++ 例外処理が有効であることを示すフラグを取得します。
IDiaStackFrame::get_functionStart ブロックに関数のエントリ ポイントが含まれていることを示すフラグを取得します。
IDiaStackFrame::get_lengthLocals スタックにプッシュされたローカル変数のバイト数を取得します。
IDiaStackFrame::get_lengthParams スタックにプッシュされたパラメーターのバイト数を取得します。
IDiaStackFrame::get_lengthProlog ブロック内のプロローグ コードのバイト数を取得します。
IDiaStackFrame::get_lengthSavedRegisters スタックにプッシュされた、保存されたレジスタのバイト数を取得します。
IDiaStackFrame::get_localsBase ローカルのアドレス ベースを取得します。
IDiaStackFrame::get_maxStack フレーム内のスタックにプッシュされた最大バイト数を取得します。
IDiaStackFrame::get_rawLVarInstanceValue 指定されたローカル変数の値を生バイトとして取得します。
IDiaStackFrame::get_registerValue 指定されたレジスタの値を取得します。
IDiaStackFrame::get_returnAddress フレームの返信先アドレスを取得します。
IDiaStackFrame::get_size フレームのサイズをバイト単位で取得します。
IDiaStackFrame::get_systemExceptionHandling システム例外処理が有効であることを示すフラグを取得します。
IDiaStackFrame::get_type フレームの種類を取得します。

解説

スタック フレームは、実行中の関数呼び出しを抽象化したものです。

呼び出し元に関する注意事項

このインターフェイスを取得するには、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

関連項目