Rubyが例外を吐いて終了する際に、例外発生時点の環境で自動でREPLが起動するようになっていればデバッグ楽だよなぁと思っていたのだけど、 1つ実装方法をひらめいたのでライブラリを作ってみた。
これを使うと以下のようなことが出来るようになる。
$ ruby -rdebug-exception -e '
def f(i)
raise "test"
end
f(0)
'
RuntimeError: test
from -e:3:in `f'
from -e:6:in `<main>'
irb#1(main):001:0> i
=> 0
debug.rbやruby-debugと比較したときのこのライブラリのメリットは以下の2点*1。
ただ、今のRubyはデバッグ用に使えるAPIがあまり整備されていないのでこの実装も機能制限付きな部分がある。 (例えばinitializeを再定義しているようなユーザ定義例外クラスを使うとうまく動かない)
2012/04までにこのあたりを何とかするという話も出ているので、 それにあわせてもう少しまともに作っておくと便利かな。
_ なかだ [どういう機能がほしいかあげてもらえると助かります。]
_ k_tsj [この機能に必要なものに絞って話をすると、[ruby-dev:44024]他で議論されているAPIがあればよさそうです..]
_ k_tsj [む、今更気づいたけどこのアプローチだと例外の生成とraiseを全く無関係の場所で行ってしまうと対応できないな。]