Freigeben über


FunctionTailcall2-Funktion

Benachrichtigt den Profiler, dass die derzeit ausgeführte Funktion einen Endaufruf an eine andere Funktion durchführt und Informationen zum Stapelrahmen bereitstellt.

Syntax

void __stdcall FunctionTailcall2 (  
    [in] FunctionID         funcId,
    [in] UINT_PTR           clientData,
    [in] COR_PRF_FRAME_INFO func  
);  

Parameter

funcId [in] Der Bezeichner der derzeit ausgeführten Funktion, die in Kürze einen Endaufruf durchführt.

clientData [in] Der neu zugeordnete, zuvor vom Profiler über FunctionIDMapper angegebene Funktionsbezeichner der aktuell ausgeführten Funktion, die in Kürze einen Endaufruf durchführt.

func [in] Ein COR_PRF_FRAME_INFO-Wert, der auf Informationen zu einem Stapelrahmen zeigt.

Der Profiler sollte dies als nicht transparentes Handle behandeln, das an die Ausführungs-Engine in der ICorProfilerInfo2::GetFunctionInfo2-Methode zurückgegeben werden kann.

Bemerkungen

Die Zielfunktion des Endaufrufs verwendet den aktuellen Stapelrahmen und kehrt direkt zum Aufrufer der Funktion zurück, die den Endaufruf durchgeführt hat. Das bedeutet, dass ein FunctionLeave2-Callback nicht für eine Funktion ausgegeben wird, die das Ziel eines Endaufrufs ist.

Der Wert des func-Parameters ist nicht gültig, nachdem die FunctionTailcall2-Funktion abgeschlossen wurde, da der Wert sich ändern oder zerstört werden kann.

Die FunctionTailcall2-Funktion ist ein Rückruf und muss von Ihnen implementiert werden. Die Implementierung muss das Speicherklassenattribut __declspec(naked) verwenden.

Die Ausführungs-Engine speichert keine Register, bevor diese Funktion aufgerufen wird.

  • Beim Start müssen alle von Ihnen verwendeten Register gespeichert werden, einschließlich der Register in der Gleitkommaeinheit (Floating-Point Unit, FPU).

  • Beim Beenden muss der Stapel wiederhergestellt werden. Deaktivieren Sie dazu alle Parameter, die vom Aufrufer gepusht wurden.

Die Implementierung von FunctionTailcall2 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 durchgeführt wird, wird die Runtime blockiert, bis FunctionTailcall2 abgeschlossen ist.

Die FunctionTailcall2-Funktion darf zudem keinen verwalteten Code aufrufen oder in irgendeiner Weise eine Zuteilung von verwaltetem Arbeitsspeicher verursachen.

Anforderungen

Plattformen: Informationen finden Sie unter Systemanforderungen.

Header: CorProf.idl

Bibliothek: CorGuids.lib

.NET Framework-Versionen: Seit 2.0 verfügbar.

Siehe auch