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 があります。
必要条件
要件 | 価値 |
---|---|
ヘッダー | dbgeng.h (DbgEng.h を含む) |