FunctionLeave2 関数
関数が呼び出し元に戻ろうとしていることをプロファイラーに通知し、スタック フレームおよび関数の戻り値に関する情報を提供します。
構文
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
関数では、マネージド コードを呼び出すことはできません。呼び出すと、何らかのマネージド メモリ割り当てが行われます。
要件
:「システム要件」を参照してください。
ヘッダー: CorProf.idl
ライブラリ: CorGuids.lib
.NET Framework のバージョン: 2.0 以降で使用可能
関連項目
.NET