共用方式為


FunctionLeave2 函式

更新:2010 年 10 月

向分析工具告知,函式即將傳回至呼叫端,並提供堆疊框架和函式傳回值的相關資訊。

void __stdcall FunctionLeave2 (
    [in]  FunctionID                        funcId,
    [in]  UINT_PTR                          clientData,
    [in]  COR_PRF_FRAME_INFO                func,
    [in]  COR_PRF_FUNCTION_ARGUMENT_RANGE  *retvalRange
);

參數

  • funcId
    [in] 正在傳回之函式的識別項。

  • clientData
    [in] 分析工具先前透過 FunctionIDMapper 函式指定之重新對應的函式識別項。

  • func
    [in] 指向堆疊框架相關資訊的 COR_PRF_FRAME_INFO 值。

    分析工具應該將它視為不透明控制代碼;此控制代碼可以傳回至 ICorProfilerInfo2::GetFunctionInfo2 方法中的執行引擎。

  • retvalRange
    [in] COR_PRF_FUNCTION_ARGUMENT_RANGE 結構的指標,指定函式傳回值的記憶體位置。

    若要存取傳回值資訊,必須設定 COR_PRF_ENABLE_FUNCTION_RETVAL 旗標。 分析工具可以使用 ICorProfilerInfo::SetEventMask 方法設定事件旗標。

備註

FunctionLeave2 函式傳回之後,func 和 retvalRange 參數的值可能無效,這是因為可能已變更或終結該值。

FunctionLeave2 函式為回呼;您必須實作此函式。 此實作必須使用 __declspec(naked) 儲存類別屬性。

執行引擎不會在呼叫這個函式之前儲存任何暫存器。

  • 進入時,您必須儲存使用的所有暫存器,包括位於浮點單位 (FPU) 的暫存器。

  • 結束時,您必須透過移除堆疊之呼叫端推入的所有參數來還原堆疊。

FunctionLeave2 的實作不應該封鎖,因為它會延遲記憶體回收的進度。 此實作不應該嘗試進行記憶體回收,因為堆疊的狀態可能不適合進行記憶體回收。 如果嘗試進行記憶體回收,執行階段將會一直封鎖到 FunctionLeave2 傳回為止。

此外,FunctionLeave2 函式不應該呼叫 Managed 程式碼內部,或以任何方式導致 Managed 記憶體配置。

需求

**平台:**請參閱 .NET Framework 系統需求

**標頭:**CorProf.idl

**程式庫:**CorGuids.lib

**.NET Framework 版本:**4、3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0

請參閱

參考

FunctionEnter2 函式

FunctionTailcall2 函式

ICorProfilerInfo2::SetEnterLeaveFunctionHooks2 方法

其他資源

分析全域靜態函式

變更記錄

日期

記錄

原因

2010 年 10 月

加入 __stdcall 語法。

客戶回函。