FunctionIDMapper 函式
通知分析工具,函式的指定識別碼可能會重新對應至替代識別碼,以用於該函式的 FunctionEnter2、FunctionLeave2 和 FunctionTailcall2 回呼。 FunctionIDMapper
也可讓分析工具指出它是否要接收該函式的回呼。
語法
UINT_PTR __stdcall FunctionIDMapper (
[in] FunctionID funcId,
[out] BOOL *pbHookFunction
);
參數
funcId
[in] 要重新對應的函式識別碼。
pbHookFunction
[out] 分析工具所設定的值指標,如果它要接收 FunctionEnter2
、FunctionLeave2
和 FunctionTailcall2
回呼,則設為 true
;否則它會將此值設為 false
。
傳回值
分析工具會傳回一個值,執行引擎會使用該值做為替代函式識別項。 傳回值不可為 null,除非 false
傳回在 pbHookFunction
中。 否則,傳回的 null 值會產生無法預期的結果,包括可能暫止處理序。
備註
FunctionIDMapper
函式是回呼。 分析工具會實作此函式,以將函式識別碼重新對應至更適合分析工具的其他識別碼。 FunctionIDMapper
會傳回要用於任何指定函式的替代識別碼。 接著,執行引擎會藉由將這個替代識別碼以及傳統函式識別碼傳遞回分析工具中 FunctionEnter2
、FunctionLeave2
和 FunctionTailcall2
勾點的 clientData
參數以識別所呼叫勾點的函式,藉此來接受分析工具的要求。
您可以使用 ICorProfilerInfo::SetFunctionIDMapper 方法來指定 FunctionIDMapper
函式的實作。 您只能呼叫 ICorProfilerInfo::SetFunctionIDMapper
方法一次,建議您在 ICorProfilerCallback::Initialize 回呼中執行此動作。
根據預設,使用 ICorProfilerInfo::SetEventMask 來設定 COR_PRF_MONITOR_ENTERLEAVE 旗標,並透過 ICorProfilerInfo::SetEnterLeaveFunctionHooks 或 ICorProfilerInfo2::SetEnterLeaveFunctionHooks2 來設定勾點的分析工具,應該會接收每個函式的 FunctionEnter2
、FunctionLeave2
和 FunctionTailcall2
回呼。 不過,分析工具可以實作 FunctionIDMapper
,透過將 pbHookFunction
設定為 false
,選擇性地避免接收某些函式的這些回呼。
分析工具應該要能容忍所分析應用程式的多個執行緒同時呼叫相同方法/函式的情況。 在這種情況下,分析工具可能會收到相同 FunctionID
的多個 FunctionIDMapper
回呼。 使用相同 FunctionID
呼叫多次時,分析工具應該要確定會從這個回呼傳回相同的值。
規格需求
平台:請參閱系統需求。
標頭:CorProf.idl
程式庫:CorGuids.lib
.NET Framework版本:自 1.0 起提供