From: SASADA Koichi Date: 2012-10-22T17:03:17+09:00 Subject: [ruby-dev:46245] Re: [ruby-trunk - Bug #7032] TestSetTraceFuncの実行に失敗する ありがとうございます. この辺,考えていたんですが, (1) event_hooks(イベントのリスト)は thread ごとではなく, VM 1つだけに持たせる  (Thread ごとにフィルタするために,イベントにフィルタを設ける) (2) event_hooks は thread ごとにもたせ,グローバルなモノは外す  (グローバルなイベントは,全スレッドにコピー) のどちらかにしようかなぁ,と考えています. 実は,誰も Thread#set_trace_func なんて使っていないような気がするので, (1) で十分ではないか,と. 実際のところ,どうなんでしょうね? (2012/10/21 19:24), ktsj (Kazuki Tsujimoto) wrote: > > Issue #7032 has been updated by ktsj (Kazuki Tsujimoto). > > > =begin > SEGVする問題については、すでにトレースが実行されている場合は > clean_hooksしないという形で修正しました。 > > "undefined local variable or method"となる問題はtrunkで > 再現できないのでこのチケットはクローズします。 > 再発するようであれば新しくチケットを作りたいと思います。 > =end > > ---------------------------------------- > Bug #7032: TestSetTraceFuncの実行に失敗する > https://bugs.ruby-lang.org/issues/7032#change-31126 > > Author: ktsj (Kazuki Tsujimoto) > Status: Closed > Priority: Normal > Assignee: > Category: > Target version: > ruby -v: ruby 2.0.0dev (2012-09-16 trunk 36980) [x86_64-linux] > > > =begin > 辻本です。 > > 以下のようにテストを実行すると、まれにTestSetTraceFuncの実行に失敗することがあります。 > > $ make TESTS='-vq -j1 objspace/test_objspace.rb \ > json/test_json_fixtures.rb \ > json/test_json.rb \ > xmlrpc/test_marshal.rb \ > xmlrpc/test_features.rb \ > uri/test_parser.rb \ > uri/test_http.rb \ > uri/test_ftp.rb \ > uri/test_generic.rb \ > io/console/test_io_console.rb \ > rexml/test_stream.rb \ > rexml/test_light.rb \ > rexml/test_xpathtext.rb \ > rexml/test_xpath_pred.rb \ > rexml/test_rexml_issuezilla.rb \ > ruby/test_case.rb \ > ruby/test_hash.rb \ > ruby/test_marshal.rb \ > ruby/test_proc.rb \ > ruby/test_yield.rb \ > ruby/test_string.rb \ > ruby/test_settracefunc.rb' test-all > > 失敗するケースは2つ確認していて、 > 1つめがRubyレベルで失敗するもの: > > TestSetTraceFunc#test_break = 0.00 s = . > TestSetTraceFunc#test_c_call = 0.00 s = . > TestSetTraceFunc#test_call = 0.00 s = . > TestSetTraceFunc#test_class = 0.00 s = . > TestSetTraceFunc#test_invalid_proc = 0.00 s = . > TestSetTraceFunc#test_raise = 0.00 s = . > TestSetTraceFunc#test_raise_in_trace = 0.00 s = . > TestSetTraceFunc#test_remove_in_trace = 0.00 s = . > TestSetTraceFunc#test_return = 0.00 s = . > TestSetTraceFunc#test_return2 = 0.00 s = . > /home/k_tsj/work/ruby/lib/test/unit/parallel.rb:40:in `rescue in block in _run_suite': undefined local variable or method `local_var' for # (NameError) > xyzzy:2:in `eval' > xyzzy:2:in `block in trace_by_tracepoint' > /home/k_tsj/work/ruby/lib/test/unit/parallel.rb:40:in `rescue in block in _run_suite' > /home/k_tsj/work/ruby/lib/test/unit/parallel.rb:36:in `block in _run_suite' > > 2つめがSEGVを起こすものになります。 > > TestSetTraceFunc#test_break = 0.00 s = . > TestSetTraceFunc#test_c_call = 0.00 s = . > /home/k_tsj/work/ruby/lib/test/unit/parallel.rb:37: [BUG] Segmentation fault > ruby 2.0.0dev (2012-09-16 trunk 36980) [x86_64-linux] > > -- Control frame information ----------------------------------------------- > c:0002 p:0045 s:0006 b:0005 e:000e40 BLOCK /home/k_tsj/work/ruby/lib/test/unit/parallel.rb:37 [FINISH] > c:0001 p:---- s:0002 b:0002 e:000001 TOP [FINISH] > > /home/k_tsj/work/ruby/lib/test/unit/parallel.rb:37:in `block in _run_suite' > =end > > > -- // SASADA Koichi at atdot dot net