StackSnapshotCallback 関数
ICorProfilerInfo2::DoStackSnapshot メソッドによって開始されるスタック ウォーク中に、スタック上の各マネージド フレームおよびアンマネージド フレームの各実行に関する情報がプロファイラーに提供されます。
構文
HRESULT __stdcall StackSnapshotCallback (
[in] FunctionID funcId,
[in] UINT_PTR ip,
[in] COR_PRF_FRAME_INFO frameInfo,
[in] ULONG32 contextSize,
[in] BYTE context[],
[in] void *clientData
);
パラメーター
funcId
[in] この値が 0 の場合、このコールバックはアンマネージド フレームの実行用です。それ以外の場合、これはマネージド関数の識別子で、このコールバックはマネージド フレーム用です。
ip
[in] フレーム内のネイティブ コード命令ポインターの値。
frameInfo
[in] スタック フレームに関する情報を参照する COR_PRF_FRAME_INFO
値。 この値は、このコールバック中にのみ使用できます。
contextSize
[in] context
パラメーターによって参照される CONTEXT
構造体のサイズ。
context
[in] このフレームの CPU の状態を表す Win32 CONTEXT
構造体へのポインター。
context
パラメーターは、COR_PRF_SNAPSHOT_CONTEXT フラグが ICorProfilerInfo2::DoStackSnapshot
で渡された場合にのみ有効です。
clientData
[in] ICorProfilerInfo2::DoStackSnapshot
から直接渡されるクライアント データへのポインター。
解説
StackSnapshotCallback
関数は、プロファイラー ライターによって実装されます。 StackSnapshotCallback
で実行される作業の複雑さを制限する必要があります。 たとえば、ICorProfilerInfo2::DoStackSnapshot
を非同期方式で使用する場合、ターゲット スレッドがロックを保持している可能性があります。 StackSnapshotCallback
内のコードで同じロックが要求される場合、デッドロックが発生することがあります。
ICorProfilerInfo2::DoStackSnapshot
メソッドは、マネージド フレームごとに 1 回、またはアンマネージド フレームの実行ごとに 1 回 StackSnapshotCallback
関数を呼び出します。 アンマネージド フレームの実行に対して StackSnapshotCallback
が呼び出された場合、プロファイラーは、(context
パラメーターによって参照される) レジスタ コンテキストを使用して、独自のアンマネージド スタック ウォークを実行できます。 この場合、Win32 CONTEXT
構造体は、アンマネージド フレームの実行中に最後にプッシュされたフレームの CPU 状態を表します。 Win32 CONTEXT
構造体にはすべてのレジスタの値が含まれていますが、スタック ポインター レジスタ、フレーム ポインター レジスタ、命令ポインター レジスタ、および不揮発性 (つまり保持される) 整数レジスタの値のみに依存する必要があります。
必要条件
:「システム要件」を参照してください。
ヘッダー: CorProf.idl
ライブラリ: CorGuids.lib
.NET Framework のバージョン: 1.0 以降で使用可能
関連項目
.NET