Udostępnij za pośrednictwem


IDiaFrameData

Opisuje szczegóły ramek stosu.

IDiaFrameData : IUnknown

Metody w kolejności Vtable

W poniższej tabeli przedstawiono metody IDiaFrameData.

Metoda

Opis

IDiaFrameData::get_addressSection

Pobiera część sekcji adresu kodu dla danej ramki.

IDiaFrameData::get_addressOffset

Pobiera przesunięcia część adresu kodu dla danej ramki.

IDiaFrameData::get_relativeVirtualAddress

Pobiera obraz wirtualny adres względny (RVA) kodu dla danej ramki.

IDiaFrameData::get_virtualAddress

Pobiera adres wirtualny (VA) kodu dla danej ramki.

IDiaFrameData::get_lengthBlock

Pobiera długość w bajtach bloku kodu, opisany przez ramkę.

IDiaFrameData::get_lengthLocals

Pobiera liczbę bajtów zmiennych lokalnych przesunięta na stosie.

IDiaFrameData::get_lengthParams

Pobiera liczbę bajtów parametrów przesunięta na stosie.

IDiaFrameData::get_maxStack

Pobiera maksymalną liczbę bajtów przesunięta na stosie w ramce.

IDiaFrameData::get_lengthProlog

Pobiera liczbę bajtów prologu kod w bloku.

IDiaFrameData::get_lengthSavedRegisters

Pobiera liczba bajtów zapisanych rejestrów przesunięta na stosie.

IDiaFrameData::get_program

Pobiera ciąg programu, która jest używana do obliczania rejestru ustawiona przed wywołaniem funkcji bieżącego.

IDiaFrameData::get_systemExceptionHandling

Pobiera flagą, która wskazuje, że obsługa wyjątków systemu jest aktywna.

IDiaFrameData::get_cplusplusExceptionHandling

Pobiera flagą, która wskazuje, że obsługa wyjątków C++ jest aktywna.

IDiaFrameData::get_functionStart

Pobiera flagę wskazującą, że blok zawiera punkt wejścia funkcji.

IDiaFrameData::get_allocatesBasePointer

Pobiera flagę wskazującą, że wskaźnik podstawowy jest przydzielona dla kodu w tym zakresie adresów.Metoda ta została zaniechana.

IDiaFrameData::get_type

Pobiera typ ramki specyficzne dla kompilatora.

IDiaFrameData::get_functionParent

Pobiera ramki interfejs danych zakrywające funkcji.

IDiaFrameData::execute

Wykonuje niekontrolowanej stosu i zwraca bieżący stan rejestrów w interfejsie ramki walk stosu.

Uwagi

Szczegóły dostępne dla ramki są punkty wykonanie w zakresie adres wskazany przez długość adresu i bloku.

Uwagi do wywoływania

Ten interfejs uzyskać, wywołując IDiaEnumFrameData::Next lub IDiaEnumFrameData::Item metody.Zobacz IDiaEnumFrameData interfejsu, aby uzyskać szczegółowe informacje.

Przykład

W tym przykładzie drukuje właściwości IDiaFrameData obiektu.Zobacz IDiaEnumFrameData interfejsu, na przykład sposób, w jaki IDiaFrameData uzyskuje się interfejs.

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

Wymagania

Nagłówek: Dia2.h

Biblioteki: diaguids.lib

Biblioteka DLL: msdia80.dll

Zobacz też

Informacje

IDiaEnumFrameData

IDiaEnumFrameData::Item

IDiaEnumFrameData::Next

Inne zasoby

Interfejsy (dostęp do interfejsu SDK debugowanie)