[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]