Partager via


IDiaStackFrame

expose les propriétés d'un frame de pile.

IDiaStackFrame : IUnknown

méthodes en commande de Vtable

Voici les méthodes prises en charge par cette interface :

Méthode

Description

IDiaStackFrame::get_allocatesBasePointer

Extrait une balise qui indique que le pointeur de base est alloué pour le code dans cette plage d'adresses. Cette méthode est déconseillée.

IDiaStackFrame::get_base

Extrait la base de l'adresse du frame.

IDiaStackFrame::get_cplusplusExceptionHandling

Extrait une balise qui indique cette gestion des exceptions C++ est appliquée.

IDiaStackFrame::get_functionStart

Extrait une balise qui indique que le bloc contient le point d'entrée d'une fonction.

IDiaStackFrame::get_lengthLocals

Récupère le nombre d'octets de variables locales qui font l'objet d'un push sur la pile.

IDiaStackFrame::get_lengthParams

Récupère le nombre d'octets de paramètres l'objet d'un push sur la pile.

IDiaStackFrame::get_lengthProlog

Récupère le nombre d'octets du code de prologue dans le bloc

IDiaStackFrame::get_lengthSavedRegisters

Récupère le nombre d'octets de registres stockés l'objet d'un push sur la pile.

IDiaStackFrame::get_localsBase

Extrait la base de l'adresse des variables locales.

IDiaStackFrame::get_maxStack

Récupère le nombre maximal d'octets l'objet d'un push sur la pile dans le frame.

IDiaStackFrame::get_rawLVarInstanceValue

Récupère la valeur de la variable locale spécifiée en tant qu'octets bruts.

IDiaStackFrame::get_registerValue

extrait la valeur d'un registre spécifié.

IDiaStackFrame::get_returnAddress

Récupère l'adresse de retour du frame.

IDiaStackFrame::get_size

Extrait la taille du cadre en octets.

IDiaStackFrame::get_systemExceptionHandling

Extrait une balise qui indique cette gestion des exceptions du système est appliquée.

IDiaStackFrame::get_type

Récupère le type de frame.

Notes

un frame de pile est une abstraction d'un appel de fonction pendant son exécution.

Remarques pour les appelants

obtenez cette interface en appelant la méthode d' IDiaEnumStackFrames::Next . Consultez l'interface d' IDiaEnumStackFrames pour obtenir un exemple de l'obtention IDiaStackFrame pour relier.

Exemple

Cet exemple affiche divers attributs d'un frame de pile.

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

Configuration requise

en-tête : Dia2.h

bibliothèque : diaguids.lib

DLL : msdia80.dll

Voir aussi

Référence

IDiaEnumStackFrames

IDiaEnumStackFrames::Next

IDiaStackWalkFrame

Autres ressources

Interfaces (Kit de développement logiciel de Debug Interface Access)