[ruby-list:46515] set_trace_func中の例外について

View: New views
2 Messages — Rating Filter:   Alert me  

[ruby-list:46515] set_trace_func中の例外について

by Masutomi Kazuyuki :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

益富です。

set_trace_func で指定した手続き中で発生した例外が捕捉されないと ruby が
何も言わずに終了してしまうようです。バグでしょうか?

>ruby -v -e 'set_trace_func lambda{raise}; p 0'
ruby 1.8.7 (2009-06-12 patchlevel 174) [i386-mswin32]

添付ライブラリのプロファイラなどを使っているときに発生すると問題の個所が
分かりにくくなります。

>ruby -v -r profile -e '
class String
  def ===(other)
    raise
  end
end
'
ruby 1.8.7 (2009-06-12 patchlevel 174) [i386-mswin32]


[ruby-list:46524] Re: set_trace_func中の例外について

by Masutomi Kazuyuki :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

どうやら補足されなかった例外のバックトレース情報を吐いて終了する過程で新
たにtrace_procが呼ばれることでどうにもならなくなっているようなので,常に
以下のようなbegin〜rescueに囲まれているかのように動作してくれればスクリ
プトのバグの早期究明につながって嬉しくないでしょうか。

>cat test.rb
trace_proc = lambda{raise}
set_trace_func lambda{|*arg|
  begin
    trace_proc.call(*arg)
  rescue
    set_trace_func nil
    raise
  end
}
p 0

>ruby -v test.rb
ruby 1.8.7 (2009-06-12 patchlevel 174) [i386-mswin32]
test.rb:1: unhandled exception
        from test.rb:4:in `call'
        from test.rb:4
        from test.rb:10
        from test.rb:10