Udostępnij za pośrednictwem


IDiaStackFrame

Uwidacznia właściwości ramki stosu.

Składnia

IDiaStackFrame : IUnknown

Metody w tabeli Vtable Order

Następujące metody są obsługiwane przez ten interfejs:

Metoda opis
IDiaStackFrame::get_allocatesBasePointer Pobiera flagę wskazującą, że wskaźnik podstawowy jest przydzielany do kodu w tym zakresie adresów. Ta metoda jest przestarzała.
IDiaStackFrame::get_base Pobiera bazę adresów ramki.
IDiaStackFrame::get_cplusplusExceptionHandling Pobiera flagę wskazującą, że obsługa wyjątków języka C++ jest w mocy.
IDiaStackFrame::get_functionStart Pobiera flagę wskazującą, że blok zawiera punkt wejścia funkcji.
IDiaStackFrame::get_lengthLocals Pobiera liczbę bajtów zmiennych lokalnych wypychanych na stos.
IDiaStackFrame::get_lengthParams Pobiera liczbę bajtów parametrów wypychanych na stosie.
IDiaStackFrame::get_lengthProlog Pobiera liczbę bajtów kodu prologu w bloku
IDiaStackFrame::get_lengthSavedRegisters Pobiera liczbę bajtów zapisanych rejestrów wypychanych na stos.
IDiaStackFrame::get_localsBase Pobiera bazę adresów ustawień lokalnych.
IDiaStackFrame::get_maxStack Pobiera maksymalną liczbę bajtów wypychanych na stos w ramce.
IDiaStackFrame::get_rawLVarInstanceValue Pobiera wartość określonej zmiennej lokalnej jako nieprzetworzone bajty.
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 flagę wskazującą, że obsługa wyjątków systemowych jest w mocy.
IDiaStackFrame::get_type Pobiera typ ramki.

Uwagi

Ramka stosu to abstrakcja wywołania funkcji podczas wykonywania.

Uwagi dotyczące wywoływania

Uzyskaj ten interfejs, wywołując metodę IDiaEnumStackFrames::Next . Zobacz interfejs IDiaEnumStackFrames, aby zapoznać się z przykładem uzyskiwania interfejsuIDiaStackFrame.

Przykład

W tym przykładzie przedstawiono 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

Biblioteka: diaguids.lib

BIBLIOTEKA DLL: msdia80.dll

Zobacz też