FunctionTailcall2 函数
更新:2010 年 10 月
通知探查器当前正在执行的函数即将对另一个函数执行尾调用,并提供有关堆栈帧的信息。
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 函数不能调入托管代码或以任何方式导致托管内存分配。
要求
**平台:**请参见 .NET Framework 系统要求。
**头文件:**CorProf.idl
**库:**CorGuids.lib
**.NET Framework 版本:**4、3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0
请参见
参考
ICorProfilerInfo2::SetEnterLeaveFunctionHooks2 方法
其他资源
修订记录
Date |
修订记录 |
原因 |
---|---|---|
2010 年 10 月 |
已将 __stdcall 添加到语法。 |
客户反馈 |