GetContextStackTraceEx メソッドは、任意のレジスタ コンテキストから始まり、各スタック フレームの再構築された レジスタ コンテキスト を返して、呼び出し履歴の先頭にあるフレームを返します。 GetContextStackTraceEx メソッドは、インライン フレームのサポートを提供します。 インライン関数の操作の詳細については、「最適化されたコードのデバッグとインライン関数の」を参照してください。
構文
HRESULT GetContextStackTraceEx(
[in, optional] PVOID StartContext,
[in] ULONG StartContextSize,
[out, optional] PDEBUG_STACK_FRAME_EX Frames,
[in] ULONG FramesSize,
[out, optional] PVOID FrameContexts,
[in] ULONG FrameContextsSize,
[in] ULONG FrameContextsEntrySize,
[out, optional] PULONG FramesFilled
);
パラメーター
[in, optional] StartContext
スタックの先頭のレジスタ コンテキストを指定します。
[in] StartContextSize
StartContext レジスタ コンテキストのサイズをバイト単位で指定します。
[out, optional] Frames
スタック フレームを受け取ります。 この配列が保持する要素の数は、FrameSize です。 Frames が NULL の場合、この情報は返されません。
[in] FramesSize
配列フレーム内の項目の数を指定 します。
[out, optional] FrameContexts
スタック内の各フレームの再構築されたレジスタ コンテキストを受け取ります。 この配列内のエントリは、Frames 配列内のエントリに対応します。 スレッド コンテキストの型は、ターゲットの有効なプロセッサの CONTEXT 構造体です。 FrameContexts が NULL の場合、この情報は返されません。
[in] FrameContextsSize
FrameContextsが指すメモリのサイズ (バイト単位) を指定します。 返されるスタック フレームの数は返されるコンテキストの数と等しく、FrameContextsSize は FrameContextsEntrySize の FrameContexts 倍である必要があります。
[in] FrameContextsEntrySize
FrameContextsの各フレーム コンテキストのサイズをバイト単位で指定します。
[out, optional] FramesFilled
FrameContexts の配列 Frames とコンテキストに配置されたフレームの数を受け取ります。 FramesFilled が NULL 場合、この情報は返されません。
戻り値
リターン コード | 説明 |
---|---|
|
メソッドは成功しました。 |
このメソッドは、エラー値を返すこともできます。 詳細については、「戻り値 を参照してください。
注釈
Frames および FrameContexts に返されるスタック トレースは、OutputContextStackTraceEx を使用して出力できます。
スタック アンワインドでは、レジスタのサブセットのみを復元するのが一般的です。 たとえば、スタック アンワインドでは、揮発性レジスタはスクラッチ レジスタであり、コードで保持する必要がないため、揮発性レジスタの状態が常に復元されるとは限りません。 アンワインド時に復元されないレジスタは、最後に復元された値のままであるため、アンワインドによって復元されない可能性があるレジスタの状態を使用する場合は注意が必要です。
必要条件
要件 | 価値 |
---|---|
ターゲット プラットフォーム の | デスクトップ |
ヘッダー | dbgeng.h (Dbgeng.h、Ntddk.h を含む) |
こちらもご覧ください
GetStackTraceEx を
IDebugControl5 の
OutputContextStackTraceEx の