StackWalkEx 関数 (dbghelp.h)
スタック トレースを取得します。
構文
BOOL IMAGEAPI StackWalkEx(
[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] DWORD Flags
);
パラメーター
[in] MachineType
スタック トレースが生成されるコンピューターのアーキテクチャの種類。 このパラメーターには、次の値のいずれかを指定できます。
値 | 意味 |
---|---|
|
Intel x86 |
|
Intel Itanium |
|
x64 (AMD64 または EM64T) |
[in] hProcess
スタック トレースが生成されるプロセスへのハンドル。 呼び出し元が ReadMemoryRoutine パラメーターの有効なコールバック ポインターを提供する場合、この値は有効なプロセス ハンドルである必要はありません。 StackWalkEx 関数のすべての呼び出しで一意で一貫して同じトークンを指定できます。 シンボル ハンドラーが StackWalkEx と共に使用される場合は、各関数の呼び出しに同じプロセス ハンドルを使用します。
[in] hThread
スタック トレースが生成されるスレッドへのハンドル。 呼び出し元が ReadMemoryRoutine パラメーターの有効なコールバック ポインターを提供する場合、この値は有効なスレッド ハンドルである必要はありません。 StackWalkEx 関数のすべての呼び出しで一意で一貫して同じトークンを指定できます。
[in, out] StackFrame
STACKFRAME_EX構造体へのポインター。 この構造体は、関数呼び出しが成功した場合に、次のフレームの情報を受け取ります。
[in, out] ContextRecord
CONTEXT 構造体へのポインター。 このパラメーターは、 MachineType パラメーターが IMAGE_FILE_MACHINE_I386されていない場合にのみ必要です。 ただし、このパラメーターには有効なコンテキスト レコードが含まれていることをお勧めします。 これにより 、StackWalkEx はさまざまな状況に対応できます。
このコンテキストは変更される可能性があるため、変更すべきではないコンテキスト レコードを渡さないでください。
[in, optional] ReadMemoryRoutine
メモリ読み取りサービスを提供するコールバック ルーチン。 StackWalkEx 関数がプロセスのアドレス空間からメモリを読み取る必要がある場合は、ReadProcessMemoryProc64 コールバックが使用されます。
このパラメーターが NULL の場合、関数は既定のルーチンを使用します。 この場合、 hProcess パラメーターは有効なプロセス ハンドルである必要があります。
このパラメーターが NULL でない場合、アプリケーションは 、CBA_READ_MEMORYを処理するシンボル ハンドラー コールバック関数を実装して登録する必要があります。
[in, optional] FunctionTableAccessRoutine
プロセスのランタイム関数テーブルへのアクセスを提供するコールバック ルーチン。 StackWalkEx 関数がプロセスのランタイム関数テーブルにアクセスできないため、このパラメーターが必要です。 詳細については、「 FunctionTableAccessProc64」を参照してください。
シンボル ハンドラーは、実行時テーブルを読み込んでアクセスする関数を提供します。 これらの関数を使用する場合は、 SymFunctionTableAccess64 を有効なパラメーターとして渡すことができます。
[in, optional] GetModuleBaseRoutine
特定の仮想アドレスのモジュール ベースを提供するコールバック ルーチン。 このパラメーターは必須です。 詳細については、「 GetModuleBaseProc64」を参照してください。
シンボル ハンドラーは、モジュール情報を読み込んで維持する関数を提供します。 これらの関数を使用する場合は、 SymGetModuleBase64 を有効なパラメーターとして渡すことができます。
[in, optional] TranslateAddress
16 ビット アドレスのアドレス変換を提供するコールバック ルーチン。 詳細については、「 TranslateAddressProc64」を参照してください。
StackWalkEx のほとんどの呼び出し元は、このパラメーターに対して NULL を安全に渡すことができます。
[in] Flags
0 個以上のフラグの組み合わせ。
SYM_STKWALK_DEFAULT (0)
SYM_STKWALK_FORCE_FRAMEPTR (1)
戻り値
関数が成功した場合、戻り値は TRUE になります。
関数が失敗した場合、戻り値は FALSE になります。 通常、StackWalkEx では最後のエラー コードは設定されないことに注意してください。
注釈
StackWalkEx 関数は、スタック トレースを取得するための移植可能なメソッドを提供します。 プラットフォームでのスタック ウォークに関連するすべての複雑さのために、独自の関数を記述するよりも StackWalkEx 関数を使用することをお勧めします。 さらに、モジュールのコンパイル方法に応じて、スタックの表示方法が異なるコンパイラ オプションがあります。 この関数を使用すると、アプリケーションには、コンパイラとオペレーティング システムの変更に応じて引き続き動作する移植可能なスタック トレースがあります。
この関数の最初の呼び出しは、 AddrPC、
StackFrame パラメーターで渡されたSTACKFRAME64構造体の AddrFrame メンバーと AddrStack メンバーは初期化されません。
この関数など、すべての DbgHelp 関数はシングル スレッドです。 そのため、複数のスレッドからこの関数を呼び出すと、予期しない動作やメモリ破損が発生する可能性があります。 これを回避するには、複数のスレッドからのすべての同時呼び出しをこの関数に同期する必要があります。
要件
要件 | 値 |
---|---|
対象プラットフォーム | Windows |
ヘッダー | dbghelp.h |
Library | DbgHelp.lib |
[DLL] | DbgHelp.dll |
再頒布可能パッケージ | DbgHelp.dll 6.2 以降 |