FunctionTailcall3WithInfo 函数

通知探查器当前正在执行的函数即将对另一个函数执行尾调用,并提供一个句柄,该句柄可传递给 ICorProfilerInfo3::GetFunctionTailcall3Info 方法以检索堆栈帧。

语法

void __stdcall FunctionTailcall3WithInfo(  
               [in] FunctionIDOrClientID functionIDOrClientID,  
               [in] COR_PRF_ELT_INFO eltInfo);  

参数

functionIDOrClientID [in] 当前正在执行的函数的标识符即将执行尾调用。

eltInfo [in] 表示有关给定堆栈帧信息的不透明的句柄。 此句柄仅在其传递到的回调过程中有效。

注解

FunctionTailcall3WithInfo 回叫方法会在调用函数时通知探查器,并允许探查器使用 ICorProfilerInfo3::GetFunctionTailcall3Info 方法检查堆栈帧。 若要访问堆栈帧信息,必须设置 COR_PRF_ENABLE_FRAME_INFO 标志。 探查器可以使用 ICorProfilerInfo::SetEventMask 方法设置事件标志,然后使用 ICorProfilerInfo3::SetEnterLeaveFunctionHooks3WithInfo 方法来注册此函数的实现。

FunctionTailcall3WithInfo 函数是一个回调;必须实现它。 实现必须使用 __declspec(naked) storage-class 属性。

在调用此函数之前,执行引擎不会保存任何寄存器。

  • 进入时,你需要保存你使用的所有寄存器,包括浮点单元 (FPU) 中的那些寄存器。

  • 退出时,必须通过弹出由其调用方推送的所有参数来还原堆栈。

FunctionTailcall3WithInfo 的实现不应被阻止,因为它将延迟垃圾回收。 实现不应尝试垃圾回收,因为堆栈可能不处于对垃圾回收有利的状态。 如果尝试了垃圾回收,运行时将被阻止,直到 FunctionTailcall3WithInfo 返回。

此外,FunctionTailcall3WithInfo 函数不得以任何方式调入托管代码,也不得导致托管内存分配。

要求

平台:请参阅系统要求

标头:CorProf.idl

库:CorGuids.lib

.NET Framework 版本:自 2.0 起可用

另请参阅