次の方法で共有


FunctionTailcall3WithInfo 関数

更新 : 2010 年 10 月

現在実行している関数が別の関数に tail 呼び出しを実行しようとしていることをプロファイラーに通知し、ICorProfilerInfo3::GetFunctionTailcall3Info メソッドに渡してスタック フレームを取得できるハンドルを提供します。

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

パラメーター

  • functionIDOrClientID
    [入力] tail 呼び出しを実行する直前である、現在実行中の関数の識別子。

  • eltInfo
    [入力] 特定のスタック フレームに関する情報を表す不透明ハンドル。 このハンドルは、ハンドルが渡されるコールバック内でのみ有効です。

解説

FunctionTailcall3WithInfo コールバック メソッドは、関数としてのプロファイラーが呼び出されたことを通知します。プロファイラーは ICorProfilerInfo3::GetFunctionTailcall3Info メソッドを使用してスタック フレームを調べることができるようになります。 スタック フレームの情報にアクセスするには、COR_PRF_ENABLE_FRAME_INFO フラグを設定する必要があります。 プロファイラーはイベント フラグを設定するために ICorProfilerInfo::SetEventMask メソッドを使用できます。また、この関数の実装を登録するために ICorProfilerInfo3::SetEnterLeaveFunctionHooks3WithInfo メソッドを使用できます。

FunctionTailcall3WithInfo 関数はコールバックですが、ユーザー自身で実装する必要があります。 実装では、__declspec(naked) ストレージ クラス属性を使用する必要があります。

この関数を呼び出すまで、実行エンジンはどのレジスタも保存しません。

  • エントリ時に、使用するすべてのレジスタを、浮動小数点ユニット (FPU: Floating-Point Unit) のレジスタも含めて保存する必要があります。

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

ガベージ コレクションが遅延するので、FunctionTailcall3WithInfo の実装ではブロックを行わないでください。 スタックがガベージ コレクションできる状態とは限らないので、実装ではガベージ コレクションを実行しないでください。 ガベージ コレクションが試行された場合、ランタイムは、FunctionTailcall3WithInfo が戻るまでブロックを行います。

さらに、FunctionTailcall3WithInfo 関数では、マネージ コードを呼び出さないようにする必要があります。呼び出すと、マネージ メモリの割り当てが実行されます。

必要条件

プラットフォーム: 「.NET Framework システム要件」を参照

ヘッダー: CorProf.idl

ライブラリ: CorGuids.lib

.NET Framework のバージョン: 4、3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0

参照

参照

FunctionEnter3

FunctionLeave3

FunctionTailcall3

FunctionEnter3WithInfo

FunctionLeave3WithInfo

SetEnterLeaveFunctionHooks3

SetEnterLeaveFunctionHooks3WithInfo

SetFunctionIDMapper

SetFunctionIDMapper2

その他の技術情報

グローバル静的関数のプロファイル

履歴の変更

日付

履歴

理由

2010 年 10 月

__stdcall を構文に追加。

カスタマー フィードバック