FunctionIDMapper — Funkcja
Powiadamia profilera, że dany identyfikator funkcji może zostać ponownie zamapowany na alternatywny identyfikator, który ma być używany w funkcji FunctionEnter2, FunctionLeave2 i FunctionTailcall2 wywołania zwrotne dla tej funkcji. FunctionIDMapper
Umożliwia również profilerowi wskazanie, czy chce odbierać wywołania zwrotne dla tej funkcji.
Składnia
UINT_PTR __stdcall FunctionIDMapper (
[in] FunctionID funcId,
[out] BOOL *pbHookFunction
);
Parametry
funcId
[in] Identyfikator funkcji do ponownego mapowania.
pbHookFunction
[out] Wskaźnik do wartości ustawianej true
przez profilera, jeśli chce odbierać FunctionEnter2
wywołania zwrotne , FunctionLeave2
i FunctionTailcall2
. W przeciwnym razie ustawia tę wartość na false
wartość .
Wartość zwracana
Profiler zwraca wartość używaną przez aparat wykonywania jako alternatywny identyfikator funkcji. Wartość zwracana nie może być równa null, chyba że false
zostanie zwrócona w .pbHookFunction
W przeciwnym razie wartość zwracana o wartości null spowoduje nieprzewidywalne wyniki, w tym ewentualnie zatrzymanie procesu.
Uwagi
Funkcja FunctionIDMapper
jest wywołaniem zwrotnym. Jest on implementowany przez profilera w celu ponownego mapowania identyfikatora funkcji na inny identyfikator, który jest bardziej przydatny dla profilera. Funkcja FunctionIDMapper
zwraca identyfikator alternatywny, który ma być używany dla dowolnej funkcji. Aparat wykonywania następnie honoruje żądanie profilera, przekazując ten alternatywny identyfikator, oprócz tradycyjnego identyfikatora funkcji, z powrotem do profilera w clientData
parametrze FunctionEnter2
, FunctionLeave2
i FunctionTailcall2
haków, w celu zidentyfikowania funkcji, dla której jest wywoływany punkt zaczepienia.
Aby określić implementację FunctionIDMapper
funkcji, można użyć metody ICorProfilerInfo::SetFunctionIDMapper. Metodę ICorProfilerInfo::SetFunctionIDMapper
można wywołać tylko raz i zalecamy wykonanie tej czynności w wywołaniu zwrotnym ICorProfilerCallback::Initialize .
Domyślnie zakłada się, że profiler, który ustawia flagę COR_PRF_MONITOR_ENTERLEAVE przy użyciu funkcji ICorProfilerInfo::SetEventMask i ustawia punkty zaczepienia za pośrednictwem elementu ICorProfilerInfo::SetEnterLeaveFunctionHooks lub ICorProfilerInfo2::SetEnterLeaveFunctionHooks2, powinien otrzymać FunctionEnter2
FunctionLeave2
wywołania zwrotne dla FunctionTailcall2
każdej funkcji . Jednak profilerzy mogą implementować FunctionIDMapper
, aby selektywnie uniknąć odbierania tych wywołań zwrotnych dla niektórych funkcji, ustawiając wartość pbHookFunction
false
.
Profileery powinny być odporne na przypadki, w których wiele wątków profilowanej aplikacji wywołuje jednocześnie tę samą metodę/funkcję. W takich przypadkach profiler może odbierać wiele FunctionIDMapper
wywołań zwrotnych dla tego samego FunctionID
elementu . Profiler powinien mieć pewność, że zwraca te same wartości z tego wywołania zwrotnego, gdy jest wywoływany wiele razy z tym samym FunctionID
elementem .
Wymagania
Platformy: Zobacz Wymagania systemowe.
Nagłówka: CorProf.idl
Biblioteki: CorGuids.lib
wersje .NET Framework: dostępne od wersji 1.0