Teilen über


FunctionEnter2-Funktion

Benachrichtigt den Profiler, dass das Steuerelement an eine Funktion übergeben wird, und stellt Informationen über den Stapelrahmen und die Funktionsargumente bereit. Diese Funktion setzt die FunctionEnter-Funktion außer Kraft.

Syntax

void __stdcall FunctionEnter2 (  
    [in]  FunctionID                       funcId,
    [in]  UINT_PTR                         clientData,
    [in]  COR_PRF_FRAME_INFO               func,
    [in]  COR_PRF_FUNCTION_ARGUMENT_INFO  *argumentInfo  
);  

Parameter

funcId [in] Der Bezeichner der Funktion, an die das Steuerelement übergeben wird.

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.

argumentInfo [in] Ein Zeiger auf eine COR_PRF_FUNCTION_ARGUMENT_INFO-Struktur, die die Speicherorte der Argumente der Funktion im Arbeitsspeicher angibt.

Um auf Argumentinformationen zuzugreifen, muss das COR_PRF_ENABLE_FUNCTION_ARGS-Flag festgelegt werden. Der Profiler kann die ICorProfilerInfo::SetEventMask-Methode verwenden, um die Ereignisflags festzulegen.

Hinweise

Die Werte der Parameter func und argumentInfo sind nicht gültig, nachdem die FunctionEnter2-Funktion zurückgegeben wird, da sich die Werte ändern oder zerstört werden können.

Die FunctionEnter2-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 FunctionEnter2 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 FunctionEnter2 zurückgegeben wird.

Die FunctionEnter2-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.

Siehe auch