Aracılığıyla paylaş


IDiaStackFrame

Bir yığın çerçevesinin özelliklerini kullanıma sunar.

Sözdizimi

IDiaStackFrame : IUnknown

Vtable Sırasına Göre Yöntemler

Bu arabirim tarafından desteklenen yöntemler şunlardır:

Metot Açıklama
IDiaStackFrame::get_allocatesBasePointer Temel işaretçinin bu adres aralığındaki kod için ayrıldığını belirten bir bayrak alır. Bu yöntem kullanım dışıdır.
IDiaStackFrame::get_base Çerçevenin adres tabanını alır.
IDiaStackFrame::get_cplusplusExceptionHandling C++ özel durum işlemenin etkin olduğunu belirten bir bayrak alır.
IDiaStackFrame::get_functionStart Bloğun bir işlevin giriş noktasını içerdiğini belirten bir bayrak alır.
IDiaStackFrame::get_lengthLocals Yığına gönderilen yerel değişkenlerin bayt sayısını alır.
IDiaStackFrame::get_lengthParams Yığına gönderilen parametrelerin bayt sayısını alır.
IDiaStackFrame::get_lengthProlog Bloktaki prologue kodunun bayt sayısını alır
IDiaStackFrame::get_lengthSavedRegisters Yığına gönderilen kayıtlı yazmaçların bayt sayısını alır.
IDiaStackFrame::get_localsBase Yerel ayarların adres tabanını alır.
IDiaStackFrame::get_maxStack Çerçevedeki yığına gönderilen en fazla bayt sayısını alır.
IDiaStackFrame::get_rawLVarInstanceValue Belirtilen yerel değişkenin değerini ham bayt olarak alır.
IDiaStackFrame::get_registerValue Belirtilen bir yazmaç değerini alır.
IDiaStackFrame::get_returnAddress Çerçevenin dönüş adresini alır.
IDiaStackFrame::get_size Çerçevenin boyutunu bayt cinsinden alır.
IDiaStackFrame::get_systemExceptionHandling Sistem özel durum işlemenin etkin olduğunu belirten bir bayrak alır.
IDiaStackFrame::get_type Çerçeve türünü alır.

Açıklamalar

Yığın çerçevesi, yürütme sırasında bir işlev çağrısının soyutlamasıdır.

Arayanlar İçin Notlar

IDiaEnumStackFrames::Next yöntemini çağırarak bu arabirimi alın. Arabirimi elde etme örneği için IDiaEnumStackFrames arabirimine IDiaStackFrame bakın.

Örnek

Bu örnekte bir yığın çerçevesinin çeşitli öznitelikleri görüntülenir.

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);
        }
    }
}

Gereksinimler

Üst bilgi: Dia2.h

Kitaplık: diaguids.lib

DLL: msdia80.dll

Ayrıca bkz.