ruby-changes:15186
From: wanabe <ko1@a...>
Date: Fri, 26 Mar 2010 23:55:18 +0900 (JST)
Subject: [ruby-changes:15186] Ruby:r27066 (trunk): * NEWS: add Thread#add_trace_func and Thread#set_trace_func.
wanabe 2010-03-26 23:55:00 +0900 (Fri, 26 Mar 2010) New Revision: 27066 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=27066 Log: * NEWS: add Thread#add_trace_func and Thread#set_trace_func. * test/ruby/test_settracefunc.rb (test_thread_trace): add test. Modified files: trunk/ChangeLog trunk/NEWS trunk/test/ruby/test_settracefunc.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 27065) +++ ChangeLog (revision 27066) @@ -1,3 +1,7 @@ +Fri Mar 26 23:52:07 2010 wanabe <s.wanabe@g...> + + * NEWS: add Thread#add_trace_func and Thread#set_trace_func. + Fri Mar 26 22:58:10 2010 Yusuke Endoh <mame@t...> * ext/openssl/ossl_x509store.c (ossl_x509store_initialize): initialize Index: NEWS =================================================================== --- NEWS (revision 27065) +++ NEWS (revision 27066) @@ -122,6 +122,11 @@ * extended methods: * string[regexp, name] is supported for named capture. + * Thread + * new methods: + * Thread#add_trace_func + * Thread#set_trace_func + * Time * extended feature: * time_t restriction is removed to represent before 1901 and after 2038. Index: test/ruby/test_settracefunc.rb =================================================================== --- test/ruby/test_settracefunc.rb (revision 27065) +++ test/ruby/test_settracefunc.rb (revision 27066) @@ -294,4 +294,64 @@ set_trace_func proc {raise rescue nil} assert_equal(42, (raise rescue 42), '[ruby-core:24118]') end + + def test_thread_trace + events = {:set => [], :add => []} + prc = Proc.new { |event, file, lineno, mid, binding, klass| + events[:set] << [event, lineno, mid, klass, :set] + } + prc2 = Proc.new { |event, file, lineno, mid, binding, klass| + events[:add] << [event, lineno, mid, klass, :add] + } + + th = Thread.new do + th = Thread.current + eval <<-EOF.gsub(/^.*?: /, "") + 1: th.set_trace_func(prc) + 2: th.add_trace_func(prc2) + 3: class ThreadTraceInnerClass + 4: def foo + 5: x = 1 + 1 + 6: end + 7: end + 8: ThreadTraceInnerClass.new.foo + 9: th.set_trace_func(nil) + EOF + end + th.join + + [["c-return", 1, :set_trace_func, Thread, :set], + ["line", 2, __method__, self.class, :set], + ["c-call", 2, :add_trace_func, Thread, :set]].each do |e| + assert_equal(e, events[:set].shift) + end + + [["c-return", 2, :add_trace_func, Thread], + ["line", 3, __method__, self.class], + ["c-call", 3, :inherited, Class], + ["c-return", 3, :inherited, Class], + ["class", 3, nil, nil], + ["line", 4, nil, nil], + ["c-call", 4, :method_added, Module], + ["c-return", 4, :method_added, Module], + ["end", 7, nil, nil], + ["line", 8, __method__, self.class], + ["c-call", 8, :new, Class], + ["c-call", 8, :initialize, BasicObject], + ["c-return", 8, :initialize, BasicObject], + ["c-return", 8, :new, Class], + ["call", 4, :foo, ThreadTraceInnerClass], + ["line", 5, :foo, ThreadTraceInnerClass], + ["c-call", 5, :+, Fixnum], + ["c-return", 5, :+, Fixnum], + ["return", 6, :foo, ThreadTraceInnerClass], + ["line", 9, __method__, self.class], + ["c-call", 9, :set_trace_func, Thread]].each do |e| + [:set, :add].each do |type| + assert_equal(e + [type], events[type].shift) + end + end + assert_equal([], events[:set]) + assert_equal([], events[:add]) + end end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/