StackWalkEx

スタックトレースを取得する。(StackWalkEx)

StackWalkEx MachineType, hProcess, hThread, StackFrame, ContextRecord, ReadMemoryRoutine, FunctionTableAccessRoutine, GetModuleBaseRoutine, TranslateAddress, Flags

MachineType : [int] スタックトレースを生成する対象コンピューターのアーキテクチャ種別。このパラメーターには以下のいずれかの値を指定できる。
hProcess : [intptr] スタックトレースを生成する対象プロセスへのハンドル。呼び出し元が ReadMemoryRoutine パラメーターに有効なコールバックポインターを指定する場合、この値は有効なプロセスハンドルでなくても構わない。StackWalkEx 関数の呼び出しの間で一意かつ一貫して同じ値を持つトークンでもよい。StackWalkEx と共にシンボルハンドラーを使う場合は、各関数呼び出しで同じプロセスハンドルを使う。
hThread : [intptr] スタックトレースを生成する対象スレッドへのハンドル。呼び出し元が ReadMemoryRoutine パラメーターに有効なコールバックポインターを指定する場合、この値は有効なスレッドハンドルでなくても構わない。StackWalkEx 関数の呼び出しの間で一意かつ一貫して同じ値を持つトークンでもよい。
StackFrame : [var] STACKFRAME_EX 構造体へのポインター。関数呼び出しに成功すると、この構造体に次のフレームの情報が格納される。
ContextRecord : [intptr] CONTEXT 構造体へのポインター。このパラメーターは MachineType パラメーターが IMAGE_FILE_MACHINE_I386 以外の場合にのみ必須である。ただし、より多様な状況に StackWalkEx が対応できるよう、有効なコンテキストレコードを指定することが推奨される。このコンテキストは変更される可能性があるため、変更されては困るコンテキストレコードを渡してはならない。
ReadMemoryRoutine : [int] メモリ読み取りサービスを提供するコールバックルーチン。StackWalkEx 関数がプロセスのアドレス空間からメモリを読み取る必要があるとき、ReadProcessMemoryProc64 コールバックが使用される。このパラメーターが NULL の場合、関数は既定のルーチンを使う。その際 hProcess パラメーターには有効なプロセスハンドルを指定する必要がある。このパラメーターが NULL でない場合、アプリケーションは CBA_READ_MEMORY を処理するシンボルハンドラーのコールバック関数を実装して登録すること。
FunctionTableAccessRoutine : [int] プロセスの実行時関数テーブルへのアクセスを提供するコールバックルーチン。StackWalkEx 関数はプロセスの実行時関数テーブルにアクセスできないため、このパラメーターは必須である。詳細は FunctionTableAccessProc64 を参照。シンボルハンドラーは実行時テーブルをロードおよびアクセスする関数を提供する。それらを使う場合は SymFunctionTableAccess64 を有効なパラメーターとして渡すことができる。
GetModuleBaseRoutine : [int] 任意の仮想アドレスに対応するモジュールのベースアドレスを提供するコールバックルーチン。このパラメーターは必須である。詳細は GetModuleBaseProc64 を参照。シンボルハンドラーはモジュール情報のロードと維持を行う関数を提供する。それらを使う場合は SymGetModuleBase64 を有効なパラメーターとして渡すことができる。
TranslateAddress : [int] 16 ビットアドレスのアドレス変換を提供するコールバックルーチン。詳細は TranslateAddressProc64 を参照。StackWalkEx を呼び出すほとんどの呼び出し元は、このパラメーターに安全に NULL を渡すことができる。
Flags : [int] 0 個以上のフラグの組み合わせ。

(プラグイン / モジュール : dbghelp.dll)

解説

スタックトレースを取得する。(StackWalkEx)

[戻り値]
関数が成功した場合、戻り値は TRUE となる。関数が失敗した場合、戻り値は FALSE となる。StackWalkEx
は通常、最終エラーコードを設定しない点に注意。

[備考]
StackWalkEx
関数は、スタックトレースを取得するための移植性のある手段を提供する。プラットフォームごとのスタックウォークに付随する複雑さを考えると、独自の関数を実装するより
StackWalkEx
を使うことが推奨される。加えて、モジュールのコンパイル方法によってスタックの見え方を変えるコンパイラーオプションも存在する。この関数を使えば、コンパイラーや
OS が変わっても動作し続ける移植性の高いスタックトレースが得られる。StackFrame パラメーターで渡す STACKFRAME64
構造体の AddrPC、AddrFrame、AddrStack
メンバーが初期化されていない場合、この関数の最初の呼び出しは失敗する。DbgHelp
関数はすべて、この関数を含めシングルスレッドである。したがって複数のスレッドから同時に呼び出すと、予期しない動作やメモリ破壊を引き起こす可能性が高い。これを避けるため、複数スレッドからの同時呼び出しはすべて同期する必要がある。

情報

プラグイン / モジュールdbghelp.dll
バージョン1.0
作成日2026/04/16
著作者IronHSP / CsWin32 bridge
URLhttps://github.com/inovia/IronHSP
備考Win32 API の dbghelp.dll 関数群。CsWin32 + win32metadata から自動生成。
hsp3net 専用 (intptr / NSTRUCT / wstr を使用)。
タイプ拡張命令
グループWin32API
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\win32_dbghelp_gen2.hs