StackWalk2 関数 (dbghelp.h)

スタック トレースを取得します。

構文

BOOL IMAGEAPI StackWalk2(
  [in]           DWORD                            MachineType,
  [in]           HANDLE                           hProcess,
  [in]           HANDLE                           hThread,
  [in, out]      LPSTACKFRAME_EX                  StackFrame,
  [in, out]      PVOID                            ContextRecord,
  [in, optional] PREAD_PROCESS_MEMORY_ROUTINE64   ReadMemoryRoutine,
  [in, optional] PFUNCTION_TABLE_ACCESS_ROUTINE64 FunctionTableAccessRoutine,
  [in, optional] PGET_MODULE_BASE_ROUTINE64       GetModuleBaseRoutine,
  [in, optional] PTRANSLATE_ADDRESS_ROUTINE64     TranslateAddress,
  [in, optional] PGET_TARGET_ATTRIBUTE_VALUE64    GetTargetAttributeValue,
  [in]           DWORD                            Flags
);

パラメーター

[in] MachineType

スタック トレースが生成されるコンピューターのアーキテクチャの種類。 このパラメーターには、次のいずれかの値を指定できます。

価値 意味
IMAGE_FILE_MACHINE_I386
0x014c
Intel x86
IMAGE_FILE_MACHINE_IA64
0x0200
Intel Itanium
IMAGE_FILE_MACHINE_AMD64
0x8664
x64 (AMD64 または EM64T)
IMAGE_FILE_MACHINE_ARM64
0xaa64
ARM64

[in] hProcess

スタック トレースが生成されるプロセスのハンドル。 呼び出し元が ReadMemoryRoutine パラメーターの有効なコールバック ポインターを指定する場合、この値は有効なプロセス ハンドルである必要はありません。 StackWalk2 関数のすべての呼び出しに対して一意で一貫して同じトークンを指定できます。 StackWalk2でシンボル ハンドラーを使用する場合は、各関数の呼び出しに同じプロセス ハンドルを使用します。

[in] hThread

スタック トレースが生成されるスレッドへのハンドル。 呼び出し元が ReadMemoryRoutine パラメーターの有効なコールバック ポインターを提供する場合、この値は有効なスレッド ハンドルである必要はありません。 StackWalk2 関数のすべての呼び出しに対して一意で一貫して同じトークンを指定できます。

[in, out] StackFrame

STACKFRAME_EX 構造体へのポインター。 関数呼び出しが成功した場合、この構造体は次のフレームの情報を受け取ります。

[in, out] ContextRecord

ARM64_NT_CONTEXT 構造体へのポインター。 このパラメーターは、MachineType パラメーターが IMAGE_FILE_MACHINE_I386されていない場合にのみ必要です。 ただし、このパラメーターには有効なコンテキスト レコードが含まれていることをお勧めします。 これにより、StackWalk2 は、より多様な状況に対処できます。

このコンテキストは変更される可能性があるため、変更すべきではないコンテキスト レコードを渡さないでください。

[in, optional] ReadMemoryRoutine

メモリ読み取りサービスを提供するコールバック ルーチン。 StackWalk2 関数がプロセスのアドレス空間からメモリを読み取る必要がある場合は、ReadProcessMemoryProc64 コールバック関数 が使用されます。

このパラメーターが NULL 場合、関数は既定のルーチンを使用します。 この場合、hProcess パラメーターは有効なプロセス ハンドルである必要があります。

このパラメーターが NULL でない場合、アプリケーションは、CBA_READ_MEMORYを処理するシンボル ハンドラー コールバック関数を実装して登録する必要があります。

[in, optional] FunctionTableAccessRoutine

プロセスのランタイム関数テーブルへのアクセスを提供するコールバック ルーチン。 このパラメーターは、StackWalk2 関数がプロセスのランタイム関数テーブルにアクセスできないために必要です。 詳細については、「FunctionTableAccessProc64 コールバック関数の」を参照してください。

シンボル ハンドラーは、ランタイム テーブルを読み込んでアクセスする関数を提供します。 これらの関数を使用する場合は、SymFunctionTableAccess64 関数 を有効なパラメーターとして渡すことができます。

[in, optional] GetModuleBaseRoutine

指定された仮想アドレスのモジュール ベースを提供するコールバック ルーチン。 このパラメーターは必須です。 詳細については、コールバック関数 PGET_MODULE_BASE_ROUTINE64 参照してください。

シンボル ハンドラーは、モジュール情報を読み込んで維持する関数を提供します。 これらの関数を使用する場合は、SymGetModuleBase64 関数 を有効なパラメーターとして渡すことができます。

[in, optional] TranslateAddress

16 ビット アドレスのアドレス変換を提供するコールバック ルーチン。 詳細については、コールバック関数の PTRANSLATE_ADDRESS_ROUTINE64 参照してください。

StackWalk2 のほとんどの呼び出し元は、このパラメーター NULL を安全に渡すことができます。

[in, optional] GetTargetAttributeValue

スタックをウォークするために必要なターゲット属性の値を提供するコールバック ルーチン。 詳細については、コールバック関数の PGET_TARGET_ATTRIBUTE_VALUE64 参照してください。

StackWalk2 の多くの呼び出し元は、このパラメーター NULL を安全に渡すことができます。 ポインター認証を利用できる ARM64 プラットフォームの呼び出し元は、コールバックを提供する必要があります。

[in] Flags

0 個以上のフラグの組み合わせ。

SYM_STKWALK_DEFAULT (0)

SYM_STKWALK_FORCE_FRAMEPTR (1)

戻り値

関数が成功した場合、戻り値は TRUE 。

関数が失敗した場合、戻り値は FALSE 。 StackWalk2 では、通常、最後のエラー コードは設定されないことに注意してください。

備考

StackWalk2 関数は、スタック トレースを取得するための移植可能なメソッドを提供します。 プラットフォームでのスタック ウォークに関連するすべての複雑さのため、独自の関数を記述するよりも、StackWalk2 関数を使用することをお勧めします。 さらに、モジュールのコンパイル方法に応じて、スタックの表示方法が異なるコンパイラ オプションがあります。 この関数を使用すると、アプリケーションには、コンパイラとオペレーティング システムの変更に応じて引き続き動作する移植可能なスタック トレースがあります。

この関数の最初の呼び出しは、AddrPC、AddrFrame、および AddrStackSTACKFRAME64 構造体のメンバーStackFrame パラメーターで渡された場合に失敗します。

この関数など、すべての DbgHelp 関数はシングル スレッドです。 そのため、複数のスレッドからこの関数を呼び出すと、予期しない動作やメモリ破損が発生する可能性があります。 これを回避するには、複数のスレッドからのすべての同時呼び出しをこの関数に同期する必要があります。

必要条件

要件 価値
ターゲット プラットフォーム の ウィンドウズ
ヘッダー dbghelp.h
ライブラリ DbgHelp.lib
DLL DbgHelp.dll
再頒布可能パッケージの DbgHelp.dll 10.0.22621.4602 以降

関連項目

ARM64_NT_CONTEXT 構造体の

DbgHelp 関数 の

FunctionTableAccessProc64 コールバック関数

ReadProcessMemoryProc64 コールバック関数

STACKFRAME_EX 構造体の

SymFunctionTableAccess64 関数 を する

SymGetModuleBase64 関数

コールバック関数 を PTRANSLATE_ADDRESS_ROUTINE64 する

コールバック関数 を PGET_TARGET_ATTRIBUTE_VALUE64 する