Функция 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
, чтобы выборочно избежать получения этих обратных вызовов для определенных функций, задав для значение pbHookFunction
false
.
Профилировщики должны быть терпимыми к случаям, когда несколько потоков профилированного приложения одновременно вызывает один и тот же метод или функцию. В таких случаях профилировщик может получать несколько обратных FunctionIDMapper
вызовов для одного и того же FunctionID
. Профилировщик должен с уверенностью возвращать одни и те же значения из этого обратного вызова, если он вызывается несколько раз с одинаковым FunctionID
.
Требования
Платформы: см. раздел Требования к системе.
Заголовка: CorProf.idl
Библиотека: CorGuids.lib
версии платформа .NET Framework: доступно с версии 1.0.