FunctionLeave3WithInfo 関数
更新 : 2010 年 10 月
関数から制御が返されることをプロファイラーに通知します。ここで得られるハンドルを ICorProfilerInfo3::GetFunctionLeave3Info メソッドに渡せば、スタック フレームと戻り値を取得できます。
void __stdcall FunctionLeave3WithInfo(
[in] FunctionIDOrClientID functionIDOrClientID,
[in] COR_PRF_ELT_INFO eltInfo);
パラメーター
functionIDOrClientID
[入力] 制御が戻される関数の識別子。eltInfo
[入力] 特定のスタック フレームに関する情報を表す不透明ハンドル。 このハンドルは、ハンドルが渡されるコールバック内でのみ有効です。
解説
FunctionLeave3WithInfo コールバック メソッドは、関数が呼び出されることをプロファイラーに通知します。プロファイラーは、ICorProfilerInfo3::GetFunctionLeave3Info メソッドを使用して戻り値を検証できます。 戻り値の情報にアクセスするには、COR_PRF_ENABLE_FUNCTION_RETVAL フラグを設定する必要があります。 プロファイラーはイベント フラグを設定するために ICorProfilerInfo::SetEventMask メソッドを使用できます。また、この関数の実装を登録するために ICorProfilerInfo3::SetEnterLeaveFunctionHooks3WithInfo メソッドを使用できます。
FunctionLeave3WithInfo 関数はコールバックですが、ユーザー自身で実装する必要があります。 実装では、__declspec(naked) ストレージ クラス属性を使用する必要があります。
この関数を呼び出すまで、実行エンジンはどのレジスタも保存しません。
エントリ時に、使用するすべてのレジスタを、浮動小数点ユニット (FPU: Floating-Point Unit) のレジスタも含めて保存する必要があります。
終了時に、呼び出し元によってプッシュされたすべてのパラメーターをポップすることで、スタックを復元する必要があります。
ガベージ コレクションが遅延するので、FunctionLeave3WithInfo の実装ではブロックを行わないでください。 スタックがガベージ コレクションできる状態とは限らないので、実装ではガベージ コレクションを実行しないでください。 ガベージ コレクションが試行された場合、FunctionLeave3WithInfo から制御が戻るまでランタイムはブロックを行います。
FunctionLeave3WithInfo 関数では、マネージ コードを呼び出さないようにする必要があります。呼び出すと、マネージ メモリの割り当てが実行されます。
必要条件
プラットフォーム: 「.NET Framework システム要件」を参照
ヘッダー: CorProf.idl
ライブラリ: CorGuids.lib
.NET Framework のバージョン: 4
参照
参照
SetEnterLeaveFunctionHooks3WithInfo
その他の技術情報
履歴の変更
日付 |
履歴 |
理由 |
---|---|---|
2010 年 10 月 |
__stdcall を構文に追加。 |
カスタマー フィードバック |