IDiaFrameData
Opisuje szczegóły ramek stosu.
IDiaFrameData : IUnknown
Metody w kolejności Vtable
W poniższej tabeli przedstawiono metody IDiaFrameData.
Metoda |
Opis |
---|---|
Pobiera część sekcji adresu kodu dla danej ramki. |
|
Pobiera przesunięcia część adresu kodu dla danej ramki. |
|
Pobiera obraz wirtualny adres względny (RVA) kodu dla danej ramki. |
|
Pobiera adres wirtualny (VA) kodu dla danej ramki. |
|
Pobiera długość w bajtach bloku kodu, opisany przez ramkę. |
|
Pobiera liczbę bajtów zmiennych lokalnych przesunięta na stosie. |
|
Pobiera liczbę bajtów parametrów przesunięta na stosie. |
|
Pobiera maksymalną liczbę bajtów przesunięta na stosie w ramce. |
|
Pobiera liczbę bajtów prologu kod w bloku. |
|
Pobiera liczba bajtów zapisanych rejestrów przesunięta na stosie. |
|
Pobiera ciąg programu, która jest używana do obliczania rejestru ustawiona przed wywołaniem funkcji bieżącego. |
|
Pobiera flagą, która wskazuje, że obsługa wyjątków systemu jest aktywna. |
|
Pobiera flagą, która wskazuje, że obsługa wyjątków C++ jest aktywna. |
|
Pobiera flagę wskazującą, że blok zawiera punkt wejścia funkcji. |
|
Pobiera flagę wskazującą, że wskaźnik podstawowy jest przydzielona dla kodu w tym zakresie adresów.Metoda ta została zaniechana. |
|
Pobiera typ ramki specyficzne dla kompilatora. |
|
Pobiera ramki interfejs danych zakrywające funkcji. |
|
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