次の方法で共有


FunctionEnter2 関数

制御が関数に渡されていることをプロファイラーに通知し、スタック フレームと関数の引数に関する情報を提供します。 この関数は、FunctionEnter 関数に代わるものです。

構文

void __stdcall FunctionEnter2 (  
    [in]  FunctionID                       funcId,
    [in]  UINT_PTR                         clientData,
    [in]  COR_PRF_FRAME_INFO               func,
    [in]  COR_PRF_FUNCTION_ARGUMENT_INFO  *argumentInfo  
);  

パラメーター

funcId [in] 制御が渡される関数の識別子。

clientData [in] プロファイラーが以前 FunctionIDMapper 関数を使用して指定した、再マップされた関数識別子。

func [in] スタック フレームに関する情報をポイントする COR_PRF_FRAME_INFO 値。

プロファイラーではこれを ICorProfilerInfo2::GetFunctionInfo2 メソッドの実行エンジンに渡すことができる不透明なハンドルとして処理する必要があります。

argumentInfo [in] 関数の引数のメモリ内の場所を指定する COR_PRF_FUNCTION_ARGUMENT_INFO 構造体へのポインター。

引数情報にアクセスするには、COR_PRF_ENABLE_FUNCTION_ARGS フラグを設定する必要があります。 プロファイラーでは、ICorProfilerInfo::SetEventMask メソッドを使用してイベント フラグを設定できます。

解説

値が変更または破棄される可能性があるため、FunctionEnter2 関数が制御を返すと func および argumentInfo パラメーターの値が無効になります。

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

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

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

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

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

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

要件

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

ヘッダー: CorProf.idl

ライブラリ: CorGuids.lib

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

関連項目