IDiaStackFrame

Expone las propiedades de un marco de pila.

Syntax

IDiaStackFrame : IUnknown

Métodos en orden de Vtable

Los métodos siguientes son compatibles con esta interfaz:

Método Descripción
IDiaStackFrame::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.
IDiaStackFrame::get_base Recupera la base de direcciones del marco.
IDiaStackFrame::get_cplusplusExceptionHandling Recupera una marca que indica que el control de excepciones de C++ está en vigor.
IDiaStackFrame::get_functionStart Recupera una marca que indica que el bloque contiene el punto de entrada de una función.
IDiaStackFrame::get_lengthLocals Recupera el número de bytes de variables locales insertadas en la pila.
IDiaStackFrame::get_lengthParams Recupera el número de bytes de los parámetros insertados en la pila.
IDiaStackFrame::get_lengthProlog Recupera el número de bytes de código del prólogo en el bloque.
IDiaStackFrame::get_lengthSavedRegisters Recupera el número de bytes de los registros guardados insertados en la pila.
IDiaStackFrame::get_localsBase Recupera la base de direcciones de las variables locales.
IDiaStackFrame::get_maxStack Recupera el número máximo de bytes insertados en la pila en el marco.
IDiaStackFrame::get_rawLVarInstanceValue Recupera el valor de la variable local especificada como bytes sin procesar.
IDiaStackFrame::get_registerValue Recupera el valor de un registro especificado.
IDiaStackFrame::get_returnAddress Recupera la dirección de retorno del marco.
IDiaStackFrame::get_size Especifica el tamaño del marco en bytes.
IDiaStackFrame::get_systemExceptionHandling Recupera una marca que indica que el control de excepciones del sistema está en vigor.
IDiaStackFrame::get_type Recupera el tipo de marco.

Comentarios

Un marco de pila es una abstracción de una llamada de función durante su ejecución.

Notas para autores de la llamada

Obtenga esta interfaz llamando al método IDiaEnumStackFrames::Next. Consulte la interfaz IDiaEnumStackFrames para obtener un ejemplo sobre cómo obtener la interfaz IDiaStackFrame.

Ejemplo

En este ejemplo se muestran varios atributos de un marco de pila.

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);
        }
    }
}

Requisitos

Encabezado: Dia2.h

Biblioteca: diaguids.lib

DLL: msdia80.dll

Vea también