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