FunctionLeave2 – funkce
Upozorní profiler, že se funkce chystá vrátit volajícímu, a poskytne informace o rámci zásobníku a návratové hodnotě funkce.
Syntaxe
void __stdcall FunctionLeave2 (
[in] FunctionID funcId,
[in] UINT_PTR clientData,
[in] COR_PRF_FRAME_INFO func,
[in] COR_PRF_FUNCTION_ARGUMENT_RANGE *retvalRange
);
Parametry
funcId
[v] Identifikátor funkce, která se vrací.
clientData
[v] Identifikátor přemapované funkce, který profiler dříve určil prostřednictvím funkce FunctionIDMapper .
func
[v] Hodnota COR_PRF_FRAME_INFO
, která odkazuje na informace o rámci zásobníku.
Profiler by to měl považovat za neprůhlhlý popisovač, který lze předat zpět do prováděcího modulu v ICorProfilerInfo2::GetFunctionInfo2 metoda.
retvalRange
[v] Ukazatel na COR_PRF_FUNCTION_ARGUMENT_RANGE strukturu, která určuje umístění v paměti návratové hodnoty funkce.
Aby bylo možné získat přístup k informacím o návratové hodnotě COR_PRF_ENABLE_FUNCTION_RETVAL
, musí být nastaven příznak. Profiler může použít ICorProfilerInfo::SetEventMask metoda nastavit příznaky událostí.
Poznámky
Hodnoty func
parametrů a retvalRange
nejsou po FunctionLeave2
vrácení funkce platné, protože hodnoty se mohou změnit nebo být zničeny.
Funkce FunctionLeave2
je zpětné volání. Musíte ji implementovat. Implementace musí používat __declspec
atribut (naked
) třídy úložiště.
Spouštěcí modul neukládá žádné registry před voláním této funkce.
Při zadání musíte uložit všechny registry, které používáte, včetně těch v jednotce s plovoucí desetinou čárkou (FPU).
Při ukončení musíte zásobník obnovit tak, že vysunete všechny parametry, které volající nasdílel.
Implementace FunctionLeave2
by neměla blokovat, protože zpozdí uvolňování paměti. Implementace by se neměla pokoušet o uvolňování paměti, protože zásobník nemusí být ve stavu, který je šetrný k uvolňování paměti. Pokud se pokusíte o uvolnění paměti, modul runtime se zablokuje, dokud FunctionLeave2
se nevrátí.
FunctionLeave2
Funkce také nesmí volat spravovaný kód ani žádným způsobem způsobit přidělení spravované paměti.
Požadavky
Platformy: Viz Požadavky na systém.
Záhlaví: CorProf.idl
Knihovny: CorGuids.lib
Verze rozhraní .NET Framework: K dispozici od verze 2.0