Udostępnij za pośrednictwem


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ć FunctionEnter2wywołania zwrotne , FunctionLeave2i FunctionTailcall2 . W przeciwnym razie ustawia tę wartość na falsewartość .

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, FunctionLeave2i 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ć FunctionEnter2FunctionLeave2wywoł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ść pbHookFunctionfalse.

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 FunctionIDelementu . Profiler powinien mieć pewność, że zwraca te same wartości z tego wywołania zwrotnego, gdy jest wywoływany wiele razy z tym samym FunctionIDelementem .

Wymagania

Platformy: Zobacz Wymagania systemowe.

Nagłówka: CorProf.idl

Biblioteki: CorGuids.lib

wersje .NET Framework: dostępne od wersji 1.0

Zobacz też