FunctionLeave2-Funktion
Benachrichtigt den Profiler, dass eine Funktion im Begriff ist, zum Aufrufer zurückzukehren, und stellt Informationen über den Stapelrahmen und den Rückgabewert der Funktion bereit.
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 zurückkehrt.clientData
[in] Der neu zugeordnete Funktionsbezeichner, den der Profiler zuvor über die FunctionIDMapper-Funktion angegeben hat.func
[in] Ein COR_PRF_FRAME_INFO-Wert, der auf Informationen über den Stapelrahmen zeigt.Der Profiler sollte diesen Wert als nicht transparentes Handle behandeln, das in der ICorProfilerInfo2::GetFunctionInfo2-Methode an das Ausführungsmodul zurückgegeben werden kann.
retvalRange
[in] Ein Zeiger auf eine COR_PRF_FUNCTION_ARGUMENT_RANGE-Struktur, die die Speicheradresse des Rückgabewerts der Funktion angibt.Um auf Informationen über Rückgabewerte zuzugreifen, muss das COR_PRF_ENABLE_FUNCTION_RETVAL-Flag festgelegt werden. Der Profiler kann die ICorProfilerInfo::SetEventMask-Methode verwenden, um die Ereignisflags festzulegen.
Hinweise
Die Werte des func-Parameters und des retvalRange-Parameters sind nach der Rückkehr der FunctionLeave2-Funktion nicht gültig, da die Werte möglicherweise geändert oder zerstört wurden.
Die FunctionLeave2-Funktion ist ein Rückruf; Sie müssen sie implementieren. Die Implementierung muss das __declspec(naked)-Speicherklassenattribut verwenden.
Das Ausführungsmodul speichert vor dem Aufrufen dieser Funktion keine Register.
Beim Eintritt müssen Sie alle verwendeten Register speichern, auch die Register in der Gleitkommaeinheit (Floating-Point Unit, FPU).
Beim Beenden müssen Sie den Stapel wiederherstellen, indem Sie alle Parameter, die vom Aufrufer verschoben wurden, wieder abholen.
Die Implementierung von FunctionLeave2 sollte nicht blockieren, da dies die Garbage Collection verzögert. Die Implementierung sollte nicht versuchen, eine Garbage Collection durchzuführen, weil sich der Stapel möglicherweise nicht in einem für die Garbage Collection geeigneten Zustand befindet. Wenn eine Garbage Collection versucht wird, ist die Laufzeit blockiert, bis FunctionLeave2 zurückkehrt.
Außerdem darf die FunctionLeave2-Funktion keinen verwalteten Code aufrufen und keinen verwalteten Speicher belegen.
Anforderungen
Plattformen: siehe Systemanforderungen für .NET Framework.
Header: CorProf.idl
Bibliothek: CorGuids.lib
.NET Framework-Versionen: 4, 3.5 SP1, 3.5, 3.0 SP1, 3.0, 2.0 SP1, 2.0
Siehe auch
Referenz
ICorProfilerInfo2::SetEnterLeaveFunctionHooks2-Methode
Weitere Ressourcen
Profilerstellung für globale statische Funktionen
Änderungsprotokoll
Datum |
Versionsgeschichte |
Grund |
---|---|---|
Oktober 2010 |
__stdcall zur Syntax hinzugefügt. |
Kundenfeedback. |