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
[入力] この値がゼロの場合、このコールバックはアンマネージ フレームの実行用です。それ以外の場合はマネージ関数の識別子であり、このコールバックはマネージ フレーム用です。ip
[入力] フレーム内のネイティブ コードの命令ポインターの値。frameInfo
[入力] スタック フレームに関する情報を参照する COR_PRF_FRAME_INFO 値。 この値は、このコールバック内でのみ使用できます。contextSize
[入力] CONTEXT 構造体のサイズ。context パラメーターによって参照されます。context
[入力] このフレームの CPU の状態を表す Win32 CONTEXT 構造体へのポインター。context パラメーターは、COR_PRF_SNAPSHOT_CONTEXT フラグが ICorProfilerInfo2::DoStackSnapshot に渡される場合のみ有効です。
clientData
[入力] クライアント データへのポインター。ICorProfilerInfo2::DoStackSnapshot から直接渡されます。
解説
StackSnapshotCallback 関数は、プロファイラーの作成者によって実装されます。 StackSnapshotCallback で実行される作業の複雑性を制限する必要があります。 たとえば、ICorProfilerInfo2::DoStackSnapshot を非同期で使用すると、対象スレッドがロックを保持している場合があります。 StackSnapshotCallback 内のコードが同じロックを要求した場合、デッドロックが発生します。
ICorProfilerInfo2::DoStackSnapshot メソッドは、マネージ フレームごとに 1 度、またはアンマネージ フレームが実行されるたびに 1 度、StackSnapshotCallback 関数を呼び出します。 アンマネージ フレームの実行に対して StackSnapshotCallback が呼び出された場合、プロファイラーは、context パラメーターによって参照されるレジスタ コンテキストを使用して、独自のアンマネージ スタック ウォークを実行できます。 この場合、Win32 CONTEXT 構造体は、アンマネージ フレームの実行中に、最後にプッシュされたフレームの CPU 状態を表します。 Win32 CONTEXT 構造体にはすべてのレジスタの値が含まれていますが、スタック ポインター レジスタ、フレーム ポインター レジスタ、命令ポインター レジスタ、および不揮発 (つまり、保持された) 整数レジスタの値だけを信頼してください。
必要条件
プラットフォーム: 「.NET Framework システム要件」を参照
ヘッダー: CorProf.idl
ライブラリ: CorGuids.lib
.NET Framework のバージョン : 4、3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0、1.1、1.0
参照
参照
ICorProfilerInfo2::DoStackSnapshot メソッド