FunctionIDMapper-Funktion
Benachrichtigt den Profiler, dass der angegebene Bezeichner einer Funktion möglicherweise einer alternativen ID zugeordnet werden kann, die in den Rückrufen FunctionEnter2, FunctionLeave2 und FunctionTailcall2 für diese Funktion verwendet werden soll. Mit FunctionIDMapper
kann der Profiler auch angeben, ob er Rückrufe für diese Funktion empfangen will.
Syntax
UINT_PTR __stdcall FunctionIDMapper (
[in] FunctionID funcId,
[out] BOOL *pbHookFunction
);
Parameter
funcId
[in] Der Funktionsbezeichner, der neu zugeordnet werden soll.
pbHookFunction
[out] Ein Zeiger auf einen Wert, den der Profiler auf true
festlegt, wenn er die Rückrufe FunctionEnter2
, FunctionLeave2
und FunctionTailcall2
empfangen möchte. Andernfalls wird dieser Wert auf false
festgelegt.
Rückgabewert
Der Profiler gibt einen Wert zurück, den die Ausführungs-Engine als alternativen Funktionsbezeichner verwendet. Der Rückgabewert darf nicht NULL sein, es sei denn, in false
wird pbHookFunction
zurückgegeben. Andernfalls führt ein Rückgabewert von NULL zu unvorhersehbaren Ergebnissen, einschließlich des möglichen Anhaltens des Prozesses.
Bemerkungen
Die FunctionIDMapper
-Funktion ist ein Rückruf. Es wird vom Profiler implementiert, um eine Funktions-ID einem anderen Bezeichner neu zuzuordnen, der für den Profiler nützlicher ist. Die FunctionIDMapper
-Funktion gibt die alternative ID zurück, die für eine bestimmte Funktion verwendet werden soll. Die Ausführungs-Engine berücksichtigt dann die Anforderung des Profilers, indem sie diese alternative ID zusätzlich zur herkömmlichen Funktions-ID zurück an den Profiler im Parameter clientData
der Hooks FunctionEnter2
, FunctionLeave2
und FunctionTailcall2
übergibt, um die Funktion zu identifizieren, für die der Hook aufgerufen wird.
Sie können die Methode ICorProfilerInfo::SetFunctionIDMapper verwenden, um die Implementierung der FunctionIDMapper
-Funktion festzulegen. Die ICorProfilerInfo::SetFunctionIDMapper
-Methode kann nur einmal aufgerufen werden. Es empfiehlt sich, dies im Rückruf ICorProfilerCallback::Initialize zu tun.
Standardmäßig wird davon ausgegangen, dass ein Profiler, der das COR_PRF_MONITOR_ENTERLEAVE-Flag mithilfe von ICorProfilerInfo::SetEventMask festlegt und Hooks über ICorProfilerInfo::SetEnterLeaveFunctionHooks oder ICorProfilerInfo2::SetEnterLeaveFunctionHooks2 festlegt, die Rückrufe FunctionEnter2
, FunctionLeave2
und FunctionTailcall2
für jede Funktion erhält. Profiler können jedoch FunctionIDMapper
implementieren, um den Empfang dieser Rückrufe für bestimmte Funktionen selektiv zu vermeiden, indem sie pbHookFunction
auf false
festlegen.
Profiler sollten in Fällen tolerant sein, in denen mehrere Threads einer profilierten Anwendung dieselbe Methode/Funktion gleichzeitig aufrufen. In solchen Fällen erhält der Profiler möglicherweise mehrere FunctionIDMapper
-Rückrufe für dieselbe FunctionID
-Funktion. Der Profiler sollte sicher sein, die gleichen Werte aus diesem Rückruf zurückzugeben, wenn er mehrmals mit derselben FunctionID
-Funktion aufgerufen wird.
Anforderungen
Plattformen: Informationen finden Sie unter Systemanforderungen.
Header: CorProf.idl
Bibliothek: CorGuids.lib
.NET Framework-Versionen: Seit Version 1.0 verfügbar.