Partager via


IDiaFrameData

expose les détails d'un frame de pile.

IDiaFrameData : IUnknown

méthodes en commande de Vtable

Le tableau suivant répertorie les méthodes d' IDiaFrameData.

Méthode

Description

IDiaFrameData::get_addressSection

Extrait la partie de la section de l'adresse du frame.

IDiaFrameData::get_addressOffset

Extrait la partie d'offset de l'adresse du frame.

IDiaFrameData::get_relativeVirtualAddress

Récupère l'adresse virtuelle relative d' (RVA)image de code pour le frame.

IDiaFrameData::get_virtualAddress

Récupère l'adresse (VA) virtuelle de code pour le frame.

IDiaFrameData::get_lengthBlock

extrait la longueur, en octets, du bloc de code décrit par le frame.

IDiaFrameData::get_lengthLocals

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

IDiaFrameData::get_lengthParams

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

IDiaFrameData::get_maxStack

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

IDiaFrameData::get_lengthProlog

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

IDiaFrameData::get_lengthSavedRegisters

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

IDiaFrameData::get_program

Extrait la chaîne de programme qui est utilisée pour calculer le jeu de registres avant l'appel à la fonction active.

IDiaFrameData::get_systemExceptionHandling

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

IDiaFrameData::get_cplusplusExceptionHandling

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

IDiaFrameData::get_functionStart

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

IDiaFrameData::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.

IDiaFrameData::get_type

Récupère le type du frame de compilateur-détail.

IDiaFrameData::get_functionParent

extrait l'interface de données de frame pour la fonction englobante.

IDiaFrameData::execute

Exécute le déroulement de pile et retourne l'état actuel des registres dans une interface de frame de parcours de la pile.

Notes

Les détails disponibles pour un frame sont des points d'exécution dans la plage d'adresses indiquée par l'adresse et la longueur de bloc.

Remarques pour les appelants

obtenez cette interface en appelant les méthodes d' IDiaEnumFrameData::Next ou d' IDiaEnumFrameData::Item . Consultez l'interface d' IDiaEnumFrameData pour plus de détails.

Exemple

cet exemple imprime les propriétés d'un objet d' IDiaFrameData . Consultez l'interface d' IDiaEnumFrameData pour obtenir un exemple de la façon dont l'interface d' IDiaFrameData est obtenue.

void PrintFrameData(IDiaFrameData* pFrameData){
    DWORD dwSect;
    DWORD dwOffset;
    DWORD cbBlock;
    DWORD cbLocals; // Number of bytes reserved for the function locals
    DWORD cbParams; // Number of bytes reserved for the function arguments
    DWORD cbMaxStack;
    DWORD cbProlog;
    DWORD cbSavedRegs;
    BOOL  bSEH;
    BOOL  bEH;
    BOOL  bStart;
    BSTR  wszProgram;

    if(pFrameData->get_addressSection(&dwSect) == S_OK && 
       pFrameData->get_addressOffset(&dwOffset) == S_OK &&
       pFrameData->get_lengthBlock(&cbBlock) == S_OK &&
       pFrameData->get_lengthLocals(&cbLocals) == S_OK &&
       pFrameData->get_lengthParams(&cbParams) == S_OK &&
       pFrameData->get_maxStack(&cbMaxStack) == S_OK &&
       pFrameData->get_lengthProlog(&cbProlog) == S_OK &&
       pFrameData->get_lengthSavedRegisters(&cbSavedRegs) == S_OK &&
       pFrameData->get_systemExceptionHandling(&bSEH) == S_OK &&
       pFrameData->get_cplusplusExceptionHandling(&bEH) == S_OK &&
       pFrameData->get_functionStart(&bStart) == S_OK )
    {
        wprintf(L"Frame address  : %04X:%08X\n", dwSect, dwOffset);
        wprintf(L"Block size     : 0x%8X\n", cbBlock);
        wprintf(L"Locals size    : 0x%8X\n", cbLocals);
        wprintf(L"Parms size     : 0x%8X\n", cbParams);
        wprintf(L"Max stack used : 0x%8X\n", cbMaxStack);
        wprintf(L"Prolog size    : 0x%8X\n", cbProlog);
        wprintf(L"Saved regs size: 0x%8X\n", cbSavedRegs);
        wprintf(L"System Exception Handling: %c\n", bSEH ? L'Y' : L'N');
        wprintf(L"C++ Exception Handling   : %c\n", bEH ? L'Y' : L'N');
        wprintf(L"Function starts in block : %c\n", bStart ? L'Y' : L'N');

        if (pFrameData->get_program(&wszProgram) == S_OK)
        {
            wprintf(L"Program used for register set: %s\n", wszProgram);
            SysFreeString(wszProgram);
        }
        else
        {
            wprintf(L"\n");
        }
    }
}

Configuration requise

en-tête : Dia2.h

bibliothèque : diaguids.lib

DLL : msdia80.dll

Voir aussi

Référence

IDiaEnumFrameData

IDiaEnumFrameData::Item

IDiaEnumFrameData::Next

Autres ressources

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