« インターンシップ受け入れ | メイン | SQLAutocode »

Ruby + GDB

Rubyで書いたデーモンプログラムがどこかでDeadlockして止まっているのだけどGDBではRubyインタプリタのバックトレース見れないしどこで止まってるのかよくわからない、という経験をした方はいらっしゃるかと思うのですが、そういう場合にはGDBとRuby用のGDBスクリプトを使うと結構いい感じです。

代表的なものとして
http://github.com/michaelklishin/gdb-macros-for-ruby
などから取得してきたスクリプトを~/.gdbinitに追加しておけば、あとはデッドロックしているプロセスにgdb -p pidでアタッチして、GDB内でrb_backtraceなりrb_raiseなりを実行するとバックトレースが取れます。Googleで検索すると、他にもいくつかスクリプトがあるようです。

Pythonでも同じようにGDB用のスクリプトが用意されているようです。
http://wiki.python.org/moin/DebuggingWithGdb

不意にRubyがC Extention内などでSEGVってしまった場合などでも同様にインスぺクションが可能ですので、なかなか便利なように思います。

追記:コアを取るようにしていた場合はもちろんコアダンプの解析にも使えますね。

トラックバック

このエントリーのトラックバックURL:
http://antas.jp/mtsys/mt-tb.cgi/773

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)