Linuxで例外スレッドのスタックトレース情報を表示する方法
Linuxでは、例外スレッドのスタック情報を取得するには、以下の方法が利用できます。
- gdbデバッガを使用する: コマンドラインで「gdb <実行ファイル名> <コアファイル名>」コマンドを実行してgdbデバッガを起動し、gdbで「thread apply all bt」コマンドを実行してすべてのスレッドのスタック情報を表示します。
- pstack コマンドを使う: 「pstack <プロセスID>」コマンドをコマンドラインで実行すれば、指定したプロセスの全スレッドのスタック情報を出力できます。ただし、このコマンドを使うには、pstack ツールパッケージがインストールされている必要があります。
- 「jstack」コマンドを使用する(Javaアプリケーション限定):コマンドラインで「jstack <プロセスID>」コマンドを使用し、Javaアプリケーションのすべてのスレッドのスタック情報をダンプします。
- プログラム中にbacktrace関数(C/C++のみ有効)を呼び出し、現在のスレッドのスタック情報を取得し、backtrace_symbols関数でそれを可読な文字列に変換して出力します。その際には、プログラム中でヘッダファイルを含み、libexecinfoライブラリをリンクする必要があります。
状況やニーズに応じて、選択的に活用することで有効な手法となり得る。