FunctionTailcall2 函数
通知探查器当前正在执行的函数即将对另一个函数执行尾调用,并提供有关堆栈帧的信息。
语法
void __stdcall FunctionTailcall2 (
[in] FunctionID funcId,
[in] UINT_PTR clientData,
[in] COR_PRF_FRAME_INFO func
);
参数
funcId
[in] 即将执行尾调用的当前正在执行的函数的标识符。
clientData
[in] 即将执行尾调用的当前正在执行的函数的重新映射的函数标识符(探查器之前通过 FunctionIDMapper 指定)。
func
[in] 一个 COR_PRF_FRAME_INFO
值,该值指向有关堆栈帧的信息。
探查器应将其视为可传递回 ICorProfilerInfo2::GetFunctionInfo2 方法中的执行引擎的不透明句柄。
注解
尾调用的目标函数将使用当前堆栈帧,并将直接返回给进行尾调用的函数的调用者。 这意味着不会为作为尾调用目标的函数发出 FunctionLeave2 回调。
在 FunctionTailcall2
函数返回后,func
参数的值无效,因为该值可能会更改或被破坏。
FunctionTailcall2
函数是一个回调;必须实现它。 实现必须使用 __declspec
(naked
) 存储类属性。
在调用此函数之前,执行引擎不会保存任何寄存器。
进入时,你需要保存你使用的所有寄存器,包括浮点单元 (FPU) 中的那些寄存器。
退出时,你需要还原堆栈,方法是通过弹出由其调用方推送的所有参数。
FunctionTailcall2
的实现不应被阻止,因为它将延迟垃圾回收。 实现不应尝试垃圾回收,因为堆栈可能不处于对垃圾回收有利的状态。 如果尝试了垃圾回收,运行时将被阻止,直到 FunctionTailcall2
返回。
此外,FunctionTailcall2
函数不得调入托管代码,也不得以任何方式导致托管内存分配。
要求
平台:请参阅系统要求。
标头:CorProf.idl
库:CorGuids.lib
.NET Framework 版本:自 2.0 起可用