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.