FunctionIDMapper 函数

通知探查器某个函数的给定标识符可能已重新映射到要在该函数的 FunctionEnter2FunctionLeave2 以及 FunctionTailcall2 回调中使用的备选 ID。 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 回调。 但是,探查器可以实现 FunctionIDMapper,通过将 pbHookFunction 设置为 false 来有选择地避免为某些函数接收这些回调。

探查器应容许所分析的应用程序的多个线程同时调用同一个方法/函数的情况。 在这些情况下,探查器可能会为同一 FunctionID 接收多个 FunctionIDMapper 回调。 在使用同一 FunctionID 多次调用时,探查器应确保从此回调中返回相同的值。

要求

**平台:**请参见 .NET Framework 系统要求

**头文件:**CorProf.idl

**库:**CorGuids.lib

**.NET Framework 版本:**4、3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0、1.1、1.0

请参见

参考

ICorProfilerInfo::SetFunctionIDMapper 方法

FunctionIDMapper2 函数

FunctionEnter2 函数

FunctionLeave2 函数

FunctionTailcall2 函数

其他资源

分析全局静态函数