Udostępnij za pośrednictwem


IDiaStackFrame

Opisuje właściwości ramki stosu.

IDiaStackFrame : IUnknown

Metody w kolejności Vtable

Dostępne są następujące metody obsługiwane przez ten interfejs:

Metoda

Opis

IDiaStackFrame::get_allocatesBasePointer

Pobiera flaga oznaczająca, że wskaźnik podstawowy jest przydzielona dla kodu w tym zakresie adresów.Metoda ta została zaniechana.

IDiaStackFrame::get_base

Pobiera adres podstawy ramki.

IDiaStackFrame::get_cplusplusExceptionHandling

Pobiera flagi wskazujące obsługę wyjątków C++ jest aktywna.

IDiaStackFrame::get_functionStart

Pobiera flagi wskazujące, że blok zawiera punkt wejścia funkcji.

IDiaStackFrame::get_lengthLocals

Pobiera liczbę bajtów zmiennych lokalnych przesunięta na stosie.

IDiaStackFrame::get_lengthParams

Pobiera liczbę bajtów parametrów przesunięta na stosie.

IDiaStackFrame::get_lengthProlog

Pobiera liczbę bajtów prologu kod w bloku

IDiaStackFrame::get_lengthSavedRegisters

Pobiera liczba bajtów zapisanych rejestrów przesunięta na stosie.

IDiaStackFrame::get_localsBase

Pobiera adres podstawy zmiennych lokalnych.

IDiaStackFrame::get_maxStack

Pobiera maksymalną liczbę bajtów przesunięta na stosie w ramce.

IDiaStackFrame::get_rawLVarInstanceValue

Pobiera wartość określonej zmiennej lokalnej jako surowca bajtów.

IDiaStackFrame::get_registerValue

Pobiera wartość określonego rejestru.

IDiaStackFrame::get_returnAddress

Pobiera adres zwrotny ramki.

IDiaStackFrame::get_size

Pobiera rozmiar ramki w bajtach.

IDiaStackFrame::get_systemExceptionHandling

Pobiera flagi wskazujące obsługi wyjątków systemu jest aktywna.

IDiaStackFrame::get_type

Pobiera typ ramki.

Uwagi

Ramka stosu jest abstrakcji wywołanie funkcji podczas jej wykonywania.

Uwagi do wywoływania

Ten interfejs uzyskać, wywołując IDiaEnumStackFrames::Next metody.Zobacz IDiaEnumStackFrames interfejsu, na przykład uzyskał IDiaStackFrame interfejsu.

Przykład

W tym przykładzie wyświetla różne atrybuty ramki stosu.

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

Wymagania

Nagłówek: Dia2.h

Biblioteki: diaguids.lib

Biblioteka DLL: msdia80.dll

Zobacz też

Informacje

IDiaEnumStackFrames

IDiaEnumStackFrames::Next

IDiaStackWalkFrame

Inne zasoby

Interfejsy (dostęp do interfejsu SDK debugowanie)