Поделиться через


Функция FunctionIDMapper

Уведомляет профилировщика о том, что указанный идентификатор функции может быть переназначен с альтернативным идентификатором для использования в обратных вызовах FunctionEnter2, FunctionLeave2 и FunctionTailcall2 для этой функции. FunctionIDMapper также позволяет профилировщику указать, желает ли он получать обратные вызовы для этой функции.

Синтаксис

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

Параметры

funcId [in] Идентификатор функции для переназначаемой функции.

pbHookFunction [out] Указатель на значение, которое задается true профилировщиком, если он хочет получать FunctionEnter2обратные вызовы , FunctionLeave2и FunctionTailcall2 ; в противном случае он устанавливает для этого значения falseзначение .

Возвращаемое значение

Профилировщик возвращает значение, которое использует подсистема выполнения в качестве альтернативного идентификатора функции. Это возвращаемое значение не может быть значением null, если указатель pbHookFunction возвращает значение false. В противном случае возвращаемое значение NULL приведет к непредсказуемым результатам, включая, возможно, остановку процесса.

Комментарии

Функция FunctionIDMapper является обратным вызовом. Он реализуется профилировщиком для повторного сопоставления идентификатора функции с другим идентификатором, который является более полезным для профилировщика. Возвращает FunctionIDMapper альтернативный идентификатор, используемый для любой данной функции. Затем подсистема выполнения учитывает запрос профилировщика, передавая этот альтернативный идентификатор в дополнение к традиционному идентификатору функции обратно профилировщику в clientData параметре FunctionEnter2перехватчиков , FunctionLeave2и FunctionTailcall2 , чтобы определить функцию, для которой вызывается перехватчик.

Для указания реализации FunctionIDMapper функции можно использовать метод ICorProfilerInfo::SetFunctionIDMapper. Метод можно вызвать ICorProfilerInfo::SetFunctionIDMapper только один раз, и мы рекомендуем сделать это в обратном вызове ICorProfilerCallback::Initialize .

По умолчанию предполагается, что профилировщик, который задает флаг COR_PRF_MONITOR_ENTERLEAVE с помощью ICorProfilerInfo::SetEventMask и устанавливает перехватчики через ICorProfilerInfo::SetEnterLeaveFunctionHooks или ICorProfilerInfo2::SetEnterLeaveFunctionHooks2, должен получать FunctionEnter2обратные вызовы , FunctionLeave2и FunctionTailcall2 для каждой функции. Однако профилировщики могут реализовать FunctionIDMapper , чтобы выборочно избежать получения этих обратных вызовов для определенных функций, задав для значение pbHookFunctionfalse.

Профилировщики должны быть терпимыми к случаям, когда несколько потоков профилированного приложения одновременно вызывает один и тот же метод или функцию. В таких случаях профилировщик может получать несколько обратных FunctionIDMapper вызовов для одного и того же FunctionID. Профилировщик должен с уверенностью возвращать одни и те же значения из этого обратного вызова, если он вызывается несколько раз с одинаковым FunctionID.

Требования

Платформы: см. раздел Требования к системе.

Заголовка: CorProf.idl

Библиотека: CorGuids.lib

версии платформа .NET Framework: доступно с версии 1.0.

См. также раздел