Firefoxのスタックトレースを取得する(Linux編)
FirefoxがクラッシュしてBugzilla.orgやBugzilla-jpに報告すると、スタックトレースを付けてくれと言われることがあります。公式ビルドを使用している場合には、Crash Reporterでスタックトレースを見ることができます。ここでは、自前ビルドでスタックトレースを取得する方法を書いてみます。
準備
Linux上でFirefoxのスタックトレースを取得するためには、gdb(GNUデバッガ)が必要となりますので、あらかじめインストールしておいてください。Debianでは、
aptitude install gdb
でgdbをインストールすことができます。
デバッグビルドを作成する
.mozconfigの変更
標準的なビルドでは出来上がったオブジェクトにシンボルテーブルが含まれないため、クラッシュした箇所のアドレスしかわかりません。これではデバッグができないため、シンボルテーブルが含まれるようにデバッグビルドを作成します。
デバッグビルドを作成するためには、.mozconfigに
ac_add_options --enable-debug ac_add_options --disable-optimize
を追加します。2行目は、最適化を抑止し、シンボルとアドレスの食い違いを防ぐためのオプションです。なお、.mozconfigについては、Firefoxをビルドする(Mercurial/Linux編)またはFirefoxをビルドする(CVS/Linux編)を参照してください。
ビルド
ソースファイルのあるディレクトリにカレントディレクトリを移動し、
make -f client clean make -f client build
で、デバッグビルドを作成します。
スタックトレースを取得する
実行ファイルが作成されたディレクトリ(Firefoxをビルドする(Mercurial/Linux編)なら/home/hoge/source/mozilla/fx/dist/bin/)にカレントディレクトリを移動し、
./firefox -g
で起動することにより、gdbが起動しFirefoxがロードされます。(gdb)はコマンドプロンプトです。 (gdb) run gdb上でrunコマンドを実行することにより、Firefoxが起動します。
Firefoxがクラッシュすると、再びgdbのコマンドプロンプトが表示されますので、
(gdb) bt
とbtコマンドを発行することにより、スタックトレースを取得することができます。必要に応じて、エディタなどにコピーしてください。なお、gdbを終了する場合は、
(gdb) q
としてください。
Keyword(s):[Mozilla]
References:[FrontPage] [Mozilla]