プログラムがどこで止まっているか調べたい場合

1.8.7の話。1.9は変わっているかも。

あと、Rubyソースコードから-gつきでコンパイルしているもの限定(狭いなぁ)。

  • gdbでattach
  • rubyのglobal変数である ruby_sourcefile, ruby_sourceline をprint
  • わかる
  • detachして何事もなかったのごとくquit
$ gdb
(gdb) attach 16119   <= rubyプロセスのpid
(gdb) p ruby_sourcefile
$1 = 0xe841181 "/usr/local/lib/ruby/gems/1.8/gems/capistrano-2.5.8/lib/capistrano/configuration/loading.rb"
(gdb) p ruby_sourceline
$2 = 93
(gdb) detach
Detaching from program: /usr/local/bin/ruby, process 16119
(gdb) quit