Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Expone los detalles de un marco de pila.
Sintaxis
IDiaFrameData : IUnknown
Métodos en orden de Vtable
En la tabla siguiente se muestran los métodos de IDiaFrameData.
| Método | Descripción |
|---|---|
| IDiaFrameData::get_addressSection | Recupera la parte de sección de la dirección de código del marco. |
| IDiaFrameData::get_addressOffset | Recupera la parte de desplazamiento de la dirección de código del marco. |
| IDiaFrameData::get_relativeVirtualAddress | Recupera la dirección virtual relativa (RVA) de imagen del código del marco. |
| IDiaFrameData::get_virtualAddress | Recupera la dirección virtual (VA) del código del marco. |
| IDiaFrameData::get_lengthBlock | Recupera la longitud, en bytes, del bloque de código descrito por el marco. |
| IDiaFrameData::get_lengthLocals | Recupera el número de bytes de variables locales insertadas en la pila. |
| IDiaFrameData::get_lengthParams | Recupera el número de bytes de los parámetros insertados en la pila. |
| IDiaFrameData::get_maxStack | Recupera el número máximo de bytes insertados en la pila en el marco. |
| IDiaFrameData::get_lengthProlog | Recupera el número de bytes de código del prólogo en el bloque. |
| IDiaFrameData::get_lengthSavedRegisters | Recupera el número de bytes de los registros guardados insertados en la pila. |
| IDiaFrameData::get_program | Recupera la cadena de programa que se usa para calcular el conjunto de registros antes de la llamada a la función actual. |
| IDiaFrameData::get_systemExceptionHandling | Recupera una marca que indica que el control de excepciones del sistema está en vigor. |
| IDiaFrameData::get_cplusplusExceptionHandling | Recupera una marca que indica que el control de excepciones de C++ está en vigor. |
| IDiaFrameData::get_functionStart | Recupera una marca que indica que el bloque incluye el punto de entrada de una función. |
| IDiaFrameData::get_allocatesBasePointer | Recupera una marca que indica que el puntero base se asigna para el código de este intervalo de direcciones. Este método es desusado. |
| IDiaFrameData::get_type | Recupera el tipo de marco específico del compilador. |
| IDiaFrameData::get_functionParent | Recupera la interfaz de datos de marco para la función envolvente. |
| IDiaFrameData::execute | Realiza el desenredado de pila y devuelve el estado actual de los registros en una interfaz de marco de recorrido de pila. |
Comentarios
Los detalles disponibles para un marco son para los puntos de ejecución dentro del intervalo de direcciones indicado por la dirección y la longitud del bloque.
Notas para autores de la llamada
Obtenga esta interfaz llamando a los métodos IDiaEnumFrameData::Next o IDiaEnumFrameData::Item. Consulte la interfaz IDiaEnumFrameData para obtener más información.
Ejemplo
En este ejemplo se imprimen las propiedades de un objeto IDiaFrameData. Vea la interfaz IDiaEnumFrameData para obtener un ejemplo de cómo se obtiene la interfaz IDiaFrameData.
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");
}
}
}
Requisitos
Encabezado: Dia2.h
Biblioteca: diaguids.lib
DLL: msdia80.dll