更新 : 2007 年 11 月
スタック ウォーク中に、スタック上の各マネージ フレームとアンマネージ フレームの各実行に関する情報をプロファイラに提供します。これは、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 のバージョン : 3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0、1.1、1.0
参照
参照
ICorProfilerInfo2::DoStackSnapshot メソッド