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 を含む) |