Share via


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) ストレージ クラス属性を使用する必要があります。

この関数を呼び出す前に、実行エンジンではレジスタは保存されません。

  • 開始時には、浮動小数点演算ユニット (FPU) 内のものを含め、使用するすべてのレジスタを保存する必要があります。

  • 終了時には、呼び出し元によってプッシュされたすべてのパラメーターをポップして、スタックを復元する必要があります。

FunctionTailcall3WithInfo の実装では、ガベージ コレクションが遅れるためブロックしないでください。 スタックがガベージ コレクション対応状態ではない可能性があるため、この実装ではガベージ コレクションを試行しないでください。 ガベージ コレクションが試行された場合、FunctionTailcall3WithInfo が返されるまでランタイムはブロックされます。

また、FunctionTailcall3WithInfo 関数では、マネージド コードを呼び出すことはできません。呼び出すと、何らかのマネージド メモリ割り当てが行われます。

必要条件

:システム要件」を参照してください。

ヘッダー: CorProf.idl

ライブラリ: CorGuids.lib

.NET Framework のバージョン: 2.0 以降で使用可能

関連項目