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 |
---|---|
Extrait la partie de la section de l'adresse du frame. |
|
Extrait la partie d'offset de l'adresse du frame. |
|
Récupère l'adresse virtuelle relative d' (RVA)image de code pour le frame. |
|
Récupère l'adresse (VA) virtuelle de code pour le frame. |
|
extrait la longueur, en octets, du bloc de code décrit par le frame. |
|
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 maximal d'octets l'objet d'un push sur la pile dans le frame. |
|
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 chaîne de programme qui est utilisée pour calculer le jeu de registres avant l'appel à la fonction active. |
|
Extrait une balise qui indique cette gestion des exceptions du système est appliquée. |
|
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. |
|
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. |
|
Récupère le type du frame de compilateur-détail. |
|
extrait l'interface de données de frame pour la fonction englobante. |
|
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
Autres ressources
Interfaces (Kit de développement logiciel de Debug Interface Access)