FunctionIDMapper 函数
通知探查器可能会将函数的给定标识符重新映射到备用 ID,从而在该函数的 FunctionEnter2、FunctionLeave2 和 FunctionTailcall2 回调中使用。 FunctionIDMapper
此外还要使探查器指示它是否想要接收该函数的回调。
语法
UINT_PTR __stdcall FunctionIDMapper (
[in] FunctionID funcId,
[out] BOOL *pbHookFunction
);
参数
funcId
[in] 要重新映射的函数标识符。
pbHookFunction
[out] 指向一个值的指针,如果探查器想要接收 FunctionEnter2
FunctionLeave2
和 FunctionTailcall2
回调,则将该值设置为 true
,否则,此值将设置为 false
。
返回值
探查器返回一个执行引擎用作替代函数标识符的值。 返回值不能为 null,除非在 pbHookFunction
中返回 false
。 否则为 null 的返回值将产生不可预知的结果,包括可能停止该过程。
注解
FunctionIDMapper
函数是回调。 它由探查器实现,用于将函数 ID 重新映射到其他更适用于探查器的标识符。 FunctionIDMapper
返回要用于任何给定函数的备用 ID。 然后,执行引擎通过将此备用 ID(传统函数 ID 除外)传递回 FunctionEnter2
、FunctionLeave2
和 FunctionTailcall2
挂钩的 clientData
参数中的探查器来执行探查器的请求,从而标识调用挂钩的函数。
你可以使用 ICorProfilerInfo::SetFunctionIDMapper 方法来指定 FunctionIDMapper
函数的实现。 只能调用一次 ICorProfilerInfo::SetFunctionIDMapper
方法,我们建议在 ICorProfilerCallback::Initialize 回调中执行此操作。
默认情况下,假定探查器通过使用 ICorProfilerInfo::SetEventMask 设置 COR_PRF_MONITOR_ENTERLEAVE 标志,并通过 ICorProfilerInfo::SetEnterLeaveFunctionHooks 或 ICorProfilerInfo2::SetEnterLeaveFunctionHooks2 设置挂钩,则探查器应接收每个函数的 FunctionEnter2
、FunctionLeave2
和 FunctionTailcall2
回调。 但是,探查器可通过将 pbHookFunction
设置为 false
来实现 FunctionIDMapper
,从而选择性避免为某些函数接收这些回调。
在探查的应用程序的多个线程同时调用同一方法/函数的情况下,探查器应具有容错性。 在这种情况下,探查器可能会收到相同 FunctionID
的多个 FunctionIDMapper
回调。 当使用相同的 FunctionID
多次调用探查器时,探查器应确保从此回调返回相同的值。
要求
平台:请参阅系统要求。
标头:CorProf.idl
库:CorGuids.lib
.NET Framework 版本:自 1.0 起可用