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 |
---|---|
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. |
|
Extrait la base de l'adresse du frame. |
|
Extrait une balise qui indique cette gestion des exceptions C++ est appliquée. |
|
Extrait une balise qui indique que le bloc contient le point d'entrée d'une fonction. |
|
Récupère le nombre d'octets de variables locales qui font l'objet d'un push sur la pile. |
|
Récupère le nombre d'octets de paramètres l'objet d'un push sur la pile. |
|
Récupère le nombre d'octets du code de prologue dans le bloc |
|
Récupère le nombre d'octets de registres stockés l'objet d'un push sur la pile. |
|
Extrait la base de l'adresse des variables locales. |
|
Récupère le nombre maximal d'octets l'objet d'un push sur la pile dans le frame. |
|
Récupère la valeur de la variable locale spécifiée en tant qu'octets bruts. |
|
extrait la valeur d'un registre spécifié. |
|
Récupère l'adresse de retour du frame. |
|
Extrait la taille du cadre en octets. |
|
Extrait une balise qui indique cette gestion des exceptions du système est appliquée. |
|
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
Autres ressources
Interfaces (Kit de développement logiciel de Debug Interface Access)