次の方法で共有


DEBUG_STACK_FRAME 構造体 (dbgeng.h)

DEBUG_STACK_FRAME構造体は、スタック フレームと、スタック フレームの現在の命令のアドレスを記述します。

構文

typedef struct _DEBUG_STACK_FRAME {
  ULONG64 InstructionOffset;
  ULONG64 ReturnOffset;
  ULONG64 FrameOffset;
  ULONG64 StackOffset;
  ULONG64 FuncTableEntry;
  ULONG64 Params[4];
  ULONG64 Reserved[6];
  BOOL    Virtual;
  ULONG   FrameNumber;
} DEBUG_STACK_FRAME, *PDEBUG_STACK_FRAME;

メンバー

InstructionOffset

スタック フレームの関連命令のプロセスの仮想アドレス空間内の場所。 これは通常、次のスタック フレームのリターン アドレス、またはフレームがスタックの上部にある場合は現在の命令ポインターです。

ReturnOffset

スタック フレームのリターン アドレスのプロセスの仮想アドレス空間内の場所。 これは通常、前のスタック フレームに関連する命令です。

FrameOffset

スタック フレームのプロセスの仮想アドレス空間内の場所 (既知の場合)。 一部のプロセッサ アーキテクチャには、フレームが含まれていないか、複数のフレームがあります。 このような場合、エンジンは、スタックの特定のレベルの最も代表的な値を選択します。

StackOffset

プロセッサ スタックのプロセスの仮想アドレス空間内の場所。

FuncTableEntry

このフレームの関数エントリのターゲットの仮想アドレス空間内の場所 (使用可能な場合)。 このポインターが設定されている場合、このポインターは無期限に有効であるとは限らず、今後の使用のために保持しないでください。 代わりに、 InstructionOffset の値を保存し、 IDebugSymbols3::GetFunctionEntryByOffset と共に使用して、後で関数エントリ情報を取得します。

Params[4]

関数に渡される最初の 4 つのスタック スロットの値 (使用可能な場合)。 引数が 4 つ未満の場合、残りのエントリは 0 に設定されます。 これらのスタック スロットにはパラメーター値が含まれる保証はありません。 一部の呼び出し規則とコンパイラの最適化は、パラメーター情報の識別に干渉する可能性があります。 引数情報の詳細と適切な場所の処理については、 IDebugSymbols::GetScopeSymbolGroup を使用して実際のパラメーター シンボルを取得します。

Reserved[6]

将来利用するために予約されています。

Virtual

このスタック フレームがデバッガーによってアンワインドによって生成された場合、値は TRUE に 設定されます。 それ以外の場合、スレッドの現在のコンテキストから形成された場合、値は FALSE になります 。 通常、これはスタックの上部にあるフレームに 対して TRUE です。 ここで、InstructionOffset は現在の命令ポインターです。

FrameNumber

フレームのインデックス。 このインデックスは、呼び出し履歴の先頭からのフレーム数をカウントします。 現在の呼び出しを表すスタックの上部にあるフレームのインデックスは 0 です。

要件

要件
Header dbgeng.h (DbgEng.h を含む)