FunctionIDMapper 函数

通知探查器可能会将函数的给定标识符重新映射到备用 ID,从而在该函数的 FunctionEnter2FunctionLeave2FunctionTailcall2 回调中使用。 FunctionIDMapper 此外还要使探查器指示它是否想要接收该函数的回调。

语法

UINT_PTR __stdcall FunctionIDMapper (  
    [in]  FunctionID  funcId,
    [out] BOOL       *pbHookFunction  
);  

参数

funcId [in] 要重新映射的函数标识符。

pbHookFunction [out] 指向一个值的指针,如果探查器想要接收 FunctionEnter2FunctionLeave2FunctionTailcall2 回调,则将该值设置为 true,否则,此值将设置为 false

返回值

探查器返回一个执行引擎用作替代函数标识符的值。 返回值不能为 null,除非在 pbHookFunction 中返回 false。 否则为 null 的返回值将产生不可预知的结果,包括可能停止该过程。

注解

FunctionIDMapper 函数是回调。 它由探查器实现,用于将函数 ID 重新映射到其他更适用于探查器的标识符。 FunctionIDMapper 返回要用于任何给定函数的备用 ID。 然后,执行引擎通过将此备用 ID(传统函数 ID 除外)传递回 FunctionEnter2FunctionLeave2FunctionTailcall2 挂钩的 clientData 参数中的探查器来执行探查器的请求,从而标识调用挂钩的函数。

你可以使用 ICorProfilerInfo::SetFunctionIDMapper 方法来指定 FunctionIDMapper 函数的实现。 只能调用一次 ICorProfilerInfo::SetFunctionIDMapper 方法,我们建议在 ICorProfilerCallback::Initialize 回调中执行此操作。

默认情况下,假定探查器通过使用 ICorProfilerInfo::SetEventMask 设置 COR_PRF_MONITOR_ENTERLEAVE 标志,并通过 ICorProfilerInfo::SetEnterLeaveFunctionHooksICorProfilerInfo2::SetEnterLeaveFunctionHooks2 设置挂钩,则探查器应接收每个函数的 FunctionEnter2FunctionLeave2FunctionTailcall2 回调。 但是,探查器可通过将 pbHookFunction 设置为 false 来实现 FunctionIDMapper,从而选择性避免为某些函数接收这些回调。

在探查的应用程序的多个线程同时调用同一方法/函数的情况下,探查器应具有容错性。 在这种情况下,探查器可能会收到相同 FunctionID 的多个 FunctionIDMapper 回调。 当使用相同的 FunctionID 多次调用探查器时,探查器应确保从此回调返回相同的值。

要求

平台:请参阅系统要求

标头:CorProf.idl

库:CorGuids.lib

.NET Framework 版本:自 1.0 起可用

另请参阅