FunctionLeave2-Funktion
Benachrichtigt den Profiler, dass eine Funktion im Begriff ist, einen Rückgabewert an den Aufrufer zu senden, und liefert Informationen über den Stapelrahmen und den Rückgabewert der Funktion.
Syntax
void __stdcall FunctionLeave2 (
[in] FunctionID funcId,
[in] UINT_PTR clientData,
[in] COR_PRF_FRAME_INFO func,
[in] COR_PRF_FUNCTION_ARGUMENT_RANGE *retvalRange
);
Parameter
funcId
[in] Der Bezeichner der Funktion, die einen Rückgabewert sendet.
clientData
[in] Der neu zugeordnete Funktionsbezeichner, den der Profiler zuvor mithilfe der Funktion FunctionIDMapper angegeben hat.
func
[in] Ein COR_PRF_FRAME_INFO
-Wert, der auf Informationen zu einem Stapelrahmen verweist.
Der Profiler sollte dies als opakes Handle behandeln, das an die Ausführungs-Engine in der ICorProfilerInfo2::GetFunctionInfo2-Methode zurückgegeben werden kann.
retvalRange
[in] Ein Zeiger auf eine COR_PRF_FUNCTION_ARGUMENT_RANGE-Struktur, die den Arbeitsspeicherort des Rückgabewerts der Funktion angibt.
Für den Zugriff auf Rückgabewertinformationen muss das COR_PRF_ENABLE_FUNCTION_RETVAL
-Flag festgelegt werden. Der Profiler kann die ICorProfilerInfo::SetEventMask-Methode verwenden, um die Ereignisflags festzulegen.
Bemerkungen
Die Werte der Parameter func
und retvalRange
sind nicht gültig, nachdem die FunctionLeave2
-Funktion einen Wert zurückgegeben hat, da sich die Werte ändern oder zerstört werden können.
Die FunctionLeave2
-Funktion ist ein Rückruf. Sie müssen sie implementieren. Die Implementierung muss das Speicherklassenattribut __declspec
(naked
) verwenden.
Die Ausführungs-Engine speichert keine Register, bevor diese Funktion aufgerufen wird.
Beim Eintrag müssen Sie alle Register speichern, die Sie verwenden, einschließlich der Register in der Gleitkommaeinheit (Floating-Point Unit, FPU).
Beim Beenden müssen Sie den Stapel wiederherstellen, indem Sie alle Parameter deaktivieren, die vom Aufrufer gepusht wurden.
Die Implementierung von FunctionLeave2
darf nicht blockieren, da dadurch die Garbage Collection verzögert wird. Die Implementierung darf keine Garbage Collection versuchen, da sich der Stapel möglicherweise nicht in einem für eine Garbage Collection geeigneten Zustand befindet. Wenn eine Garbage Collection versucht wird, blockiert die Runtime, bis FunctionLeave2
zurückgegeben wird.
Die FunctionLeave2
-Funktion darf zudem keinen verwalteten Code aufrufen oder in irgendeiner Weise eine verwaltete Arbeitsspeicherzuteilung verursachen.
Anforderungen
Plattformen: Informationen finden Sie unter Systemanforderungen.
Header: CorProf.idl
Bibliothek: CorGuids.lib
.NET Framework-Versionen: Seit 2.0 verfügbar.