IDiaStackFrame
Zveřejňuje vlastnosti rámce zásobníku.
Syntaxe
IDiaStackFrame : IUnknown
Metody v pořadí Vtable
Toto rozhraní podporuje následující metody:
metoda | Popis |
---|---|
IDiaStackFrame::get_allocatesBasePointer | Načte příznak označující, že základní ukazatel je přidělen pro kód v tomto rozsahu adres. Tato metoda je zastaralá. |
IDiaStackFrame::get_base | Načte základ adresy rámce. |
IDiaStackFrame::get_cplusplusExceptionHandling | Načte příznak označující, že zpracování výjimek jazyka C++ je v platnosti. |
IDiaStackFrame::get_functionStart | Načte příznak označující, že blok obsahuje vstupní bod funkce. |
IDiaStackFrame::get_lengthLocals | Načte počet bajtů místních proměnných nasdílených do zásobníku. |
IDiaStackFrame::get_lengthParams | Načte počet bajtů parametrů nasdílených do zásobníku. |
IDiaStackFrame::get_lengthProlog | Načte počet bajtů prologue kódu v bloku. |
IDiaStackFrame::get_lengthSavedRegisters | Načte počet bajtů uložených registrů nasdílených do zásobníku. |
IDiaStackFrame::get_localsBase | Načte základ adresy místních hodnot. |
IDiaStackFrame::get_maxStack | Načte maximální počet bajtů nasdílených do zásobníku v rámci. |
IDiaStackFrame::get_rawLVarInstanceValue | Načte hodnotu zadané místní proměnné jako nezpracované bajty. |
IDiaStackFrame::get_registerValue | Načte hodnotu zadaného registru. |
IDiaStackFrame::get_returnAddress | Načte zpáteční adresu rámce. |
IDiaStackFrame::get_size | Načte velikost rámce v bajtech. |
IDiaStackFrame::get_systemExceptionHandling | Načte příznak označující, že zpracování výjimek systému je v platnosti. |
IDiaStackFrame::get_type | Načte typ rámce. |
Poznámky
Rámec zásobníku je abstrakce volání funkce během jejího spuštění.
Poznámky pro volající
Získejte toto rozhraní voláním IDiaEnumStackFrames::Next metoda. Příklad získání IDiaStackFrame
rozhraní najdete v rozhraní IDiaEnumStackFrames.
Příklad
Tento příklad zobrazuje různé atributy rámce zásobníku.
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);
}
}
}
Požadavky
Hlavička: Dia2.h
Knihovna: diaguids.lib
DLL: msdia80.dll