Freigeben über


FunctionLeave2-Funktion

Aktualisiert: November 2007

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 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 reservieren.

Anforderungen

Plattformen: siehe Systemanforderungen für .NET Framework.

Header: CorProf.idl

Bibliothek: CorGuids.lib

.NET Framework-Versionen: 3.5 SP1, 3.5, 3.0 SP1, 3.0, 2.0 SP1, 2.0

Siehe auch

Referenz

FunctionEnter2-Funktion

FunctionTailcall2-Funktion

ICorProfilerInfo2::SetEnterLeaveFunctionHooks2-Methode

Weitere Ressourcen

Profilerstellung für globale statische Funktionen