Partilhar via


IDiaFrameData

Expõe os detalhes de um quadro de pilha.

IDiaFrameData : IUnknown

Métodos na ordem de Vtable

A tabela a seguir mostra os métodos de IDiaFrameData.

Método

Descrição

IDiaFrameData::get_addressSection

Recupera a parte da seção do endereço do código para o quadro.

IDiaFrameData::get_addressOffset

Recupera a compensação parte do endereço do código para o quadro.

IDiaFrameData::get_relativeVirtualAddress

Recupera o imagem endereço virtual relativo (RVA) do código do quadro.

IDiaFrameData::get_virtualAddress

Recupera o endereço virtual (VA) do código do quadro.

IDiaFrameData::get_lengthBlock

Recupera o comprimento, em bytes, do bloco de código descrito pelo quadro.

IDiaFrameData::get_lengthLocals

Recupera o número de bytes de variáveis locais colocadas no empilhamento.

IDiaFrameData::get_lengthParams

Recupera o número de bytes de parâmetros colocados no empilhamento.

IDiaFrameData::get_maxStack

Recupera o número máximo de bytes colocados no empilhamento no quadro.

IDiaFrameData::get_lengthProlog

Recupera o número de bytes de código de prólogo no bloco.

IDiaFrameData::get_lengthSavedRegisters

Recupera o número de bytes de registradores salvos colocados no empilhamento.

IDiaFrameData::get_program

Recupera a seqüência do programa que é usada para calcular o registro definido antes da chamada para a função atual.

IDiaFrameData::get_systemExceptionHandling

Recupera um sinalizador que indica que o tratamento de exceção sistema está em vigor.

IDiaFrameData::get_cplusplusExceptionHandling

Recupera um sinalizador que indica que o tratamento de exceção C++ está em vigor.

IDiaFrameData::get_functionStart

Recupera um sinalizador que indica que o bloco contém o ponto de entrada de uma função.

IDiaFrameData::get_allocatesBasePointer

Recupera um sinalizador que indica que o ponteiro de base está alocado para o código neste intervalo de endereço. Esse método é reprovado.

IDiaFrameData::get_type

Recupera o tipo de quadro específico do compilador.

IDiaFrameData::get_functionParent

Recupera a interface de dados para a função de circunscrição de quadros.

IDiaFrameData::execute

Executa o desenrolamento de pilha e retorna o estado atual de registros em uma interface de quadro de movimentação de pilha.

Comentários

Os detalhes disponíveis para um quadro são para os pontos de execução dentro do intervalo de endereço indicado pelo endereço e o bloco de comprimento.

Observações para chamadores

Obter essa interface chamando o IDiaEnumFrameData::Next ou IDiaEnumFrameData::Item métodos. Consulte o IDiaEnumFrameData interface para obter detalhes.

Exemplo

Este exemplo imprime as propriedades de um IDiaFrameData objeto. Consulte o IDiaEnumFrameData interface para obter um exemplo de como o IDiaFrameData interface é obtida.

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

Cabeçalho: Dia2.h

Biblioteca: diaguids.lib

DLL: msdia80.dll

Consulte também

Referência

IDiaEnumFrameData

IDiaEnumFrameData::Item

IDiaEnumFrameData::Next

Outros recursos

Interfaces (SDK de Acesso à Interface de Depuração)