IDiaStackFrame
Uwidacznia właściwości ramki stosu.
Składnia
IDiaStackFrame : IUnknown
Metody w tabeli Vtable Order
Następujące metody są obsługiwane przez ten interfejs:
Metoda | opis |
---|---|
IDiaStackFrame::get_allocatesBasePointer | Pobiera flagę wskazującą, że wskaźnik podstawowy jest przydzielany do kodu w tym zakresie adresów. Ta metoda jest przestarzała. |
IDiaStackFrame::get_base | Pobiera bazę adresów ramki. |
IDiaStackFrame::get_cplusplusExceptionHandling | Pobiera flagę wskazującą, że obsługa wyjątków języka C++ jest w mocy. |
IDiaStackFrame::get_functionStart | Pobiera flagę wskazującą, że blok zawiera punkt wejścia funkcji. |
IDiaStackFrame::get_lengthLocals | Pobiera liczbę bajtów zmiennych lokalnych wypychanych na stos. |
IDiaStackFrame::get_lengthParams | Pobiera liczbę bajtów parametrów wypychanych na stosie. |
IDiaStackFrame::get_lengthProlog | Pobiera liczbę bajtów kodu prologu w bloku |
IDiaStackFrame::get_lengthSavedRegisters | Pobiera liczbę bajtów zapisanych rejestrów wypychanych na stos. |
IDiaStackFrame::get_localsBase | Pobiera bazę adresów ustawień lokalnych. |
IDiaStackFrame::get_maxStack | Pobiera maksymalną liczbę bajtów wypychanych na stos w ramce. |
IDiaStackFrame::get_rawLVarInstanceValue | Pobiera wartość określonej zmiennej lokalnej jako nieprzetworzone bajty. |
IDiaStackFrame::get_registerValue | Pobiera wartość określonego rejestru. |
IDiaStackFrame::get_returnAddress | Pobiera adres zwrotny ramki. |
IDiaStackFrame::get_size | Pobiera rozmiar ramki w bajtach. |
IDiaStackFrame::get_systemExceptionHandling | Pobiera flagę wskazującą, że obsługa wyjątków systemowych jest w mocy. |
IDiaStackFrame::get_type | Pobiera typ ramki. |
Uwagi
Ramka stosu to abstrakcja wywołania funkcji podczas wykonywania.
Uwagi dotyczące wywoływania
Uzyskaj ten interfejs, wywołując metodę IDiaEnumStackFrames::Next . Zobacz interfejs IDiaEnumStackFrames, aby zapoznać się z przykładem uzyskiwania interfejsuIDiaStackFrame
.
Przykład
W tym przykładzie przedstawiono różne atrybuty ramki stosu.
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);
}
}
}
Wymagania
Nagłówek: Dia2.h
Biblioteka: diaguids.lib
BIBLIOTEKA DLL: msdia80.dll