From: _ wanabe Date: 2009-06-22T19:44:59+09:00 Subject: [ruby-dev:38701] [Bug #1676] only last "return" is traced by set_trace_func Bug #1676: only last "return" is traced by set_trace_func http://redmine.ruby-lang.org/issues/show/1676 起票者: _ wanabe ステータス: Open, 優先度: Low ruby -v: ruby 1.9.2dev (2009-06-21 trunk 23809) [i386-mingw32] 複数ある return のうち最後ではないものでメソッドの処理が終わったとき set_trace_func の "return" イベントが起こりません。 $ ruby -ve ' set_trace_func(proc{|*a|p a if a[0] == "call" || a[0] == "return"}) iseq = RubyVM::InstructionSequence.compile(<", 1, :foo, #, Object] ["return", "", 1, :foo, #, Object] ["call", "", 1, :foo, #, Object] == disasm: @>========== 0000 trace 1 ( 1) 0002 putspecialobject 1 0004 putspecialobject 2 0006 putobject :foo 0008 putiseq foo 0010 send :"core#define_method", 3, nil, 0, 0016 pop 0017 trace 1 ( 5) 0019 putnil 0020 putobject false 0022 send :foo, 1, nil, 8, 0028 pop 0029 trace 1 ( 6) 0031 putnil 0032 putobject true 0034 send :foo, 1, nil, 8, 0040 leave == disasm: >================= local table (size: 2, argc: 1 [opts: 0, rest: -1, post: 0, block: -1] s1) [ 2] a 0000 trace 8 ( 1) 0002 trace 1 ( 2) 0004 getlocal a 0006 branchunless 12 0008 jump 10 0010 putnil 0011 leave 0012 putnil 0013 trace 16 ( 1) 0015 leave ( 2) ---------------------------------------- http://redmine.ruby-lang.org