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 函式不應該呼叫 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
請參閱
參考
ICorProfilerInfo2::SetEnterLeaveFunctionHooks2 方法
其他資源
變更記錄
日期 |
記錄 |
原因 |
---|---|---|
2010 年 10 月 |
加入 __stdcall 語法。 |
客戶回函。 |