Compartir a través de


IDiaFrameData

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

Vea también