Sdílet prostřednictvím


IDiaStackFrame

Zveřejňuje vlastnosti rámce zásobníku.

Syntaxe

IDiaStackFrame : IUnknown

Metody v pořadí Vtable

Toto rozhraní podporuje následující metody:

metoda Popis
IDiaStackFrame::get_allocatesBasePointer Načte příznak označující, že základní ukazatel je přidělen pro kód v tomto rozsahu adres. Tato metoda je zastaralá.
IDiaStackFrame::get_base Načte základ adresy rámce.
IDiaStackFrame::get_cplusplusExceptionHandling Načte příznak označující, že zpracování výjimek jazyka C++ je v platnosti.
IDiaStackFrame::get_functionStart Načte příznak označující, že blok obsahuje vstupní bod funkce.
IDiaStackFrame::get_lengthLocals Načte počet bajtů místních proměnných nasdílených do zásobníku.
IDiaStackFrame::get_lengthParams Načte počet bajtů parametrů nasdílených do zásobníku.
IDiaStackFrame::get_lengthProlog Načte počet bajtů prologue kódu v bloku.
IDiaStackFrame::get_lengthSavedRegisters Načte počet bajtů uložených registrů nasdílených do zásobníku.
IDiaStackFrame::get_localsBase Načte základ adresy místních hodnot.
IDiaStackFrame::get_maxStack Načte maximální počet bajtů nasdílených do zásobníku v rámci.
IDiaStackFrame::get_rawLVarInstanceValue Načte hodnotu zadané místní proměnné jako nezpracované bajty.
IDiaStackFrame::get_registerValue Načte hodnotu zadaného registru.
IDiaStackFrame::get_returnAddress Načte zpáteční adresu rámce.
IDiaStackFrame::get_size Načte velikost rámce v bajtech.
IDiaStackFrame::get_systemExceptionHandling Načte příznak označující, že zpracování výjimek systému je v platnosti.
IDiaStackFrame::get_type Načte typ rámce.

Poznámky

Rámec zásobníku je abstrakce volání funkce během jejího spuštění.

Poznámky pro volající

Získejte toto rozhraní voláním IDiaEnumStackFrames::Next metoda. Příklad získání IDiaStackFrame rozhraní najdete v rozhraní IDiaEnumStackFrames.

Příklad

Tento příklad zobrazuje různé atributy rámce zásobníku.

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

Požadavky

Hlavička: Dia2.h

Knihovna: diaguids.lib

DLL: msdia80.dll

Viz také