diff options
author | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-11-29 22:28:16 +0000 |
---|---|---|
committer | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-11-29 22:28:16 +0000 |
commit | 4db83403982100df21c3c6c18b1cef29dd379e6a (patch) | |
tree | fe3430360cc21c68ee978fb61d6255e789c2bce2 /test/ruby/test_settracefunc.rb | |
parent | 2dc5e62545eb18feb85b1fa321f19904704cc76f (diff) | |
download | ruby-4db83403982100df21c3c6c18b1cef29dd379e6a.tar.gz |
[EXPERIMENTAL: NEED DISCUSS]
* vm_trace.c: add events
* :thread_begin - hook at thread beggining.
* :thead_end - hook at thread ending.
* :b_call - hook at block enter.
* :b_return - hook at block leave.
This change slow down block invocation.
Please try and give us feedback until 2.0 code freeze.
* include/ruby/ruby.h: ditto.
* compile.c (rb_iseq_compile_node): ditto.
* insns.def: ditto.
* thread.c: ditto.
* vm.c: ditto.
* include/ruby/debug.h: add a comment.
* test/ruby/test_settracefunc.rb: add a tests.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38007 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/ruby/test_settracefunc.rb')
-rw-r--r-- | test/ruby/test_settracefunc.rb | 57 |
1 files changed, 56 insertions, 1 deletions
diff --git a/test/ruby/test_settracefunc.rb b/test/ruby/test_settracefunc.rb index 0c08e7f245..82d3dc4fae 100644 --- a/test/ruby/test_settracefunc.rb +++ b/test/ruby/test_settracefunc.rb @@ -532,9 +532,14 @@ class TestSetTraceFunc < Test::Unit::TestCase end def test_tracepoint - events1, answer_events = *trace_by_tracepoint() + events1, answer_events = *trace_by_tracepoint(:line, :class, :end, :call, :return, :c_call, :c_return, :raise) mesg = events1.map{|e| + if false + p [:event, e[0]] + p [:line_file, e[1], e[2]] + p [:id, e[4]] + end "#{e[0]} - #{e[2]}:#{e[1]} id: #{e[4]}" }.join("\n") answer_events.zip(events1){|answer, event| @@ -682,4 +687,54 @@ class TestSetTraceFunc < Test::Unit::TestCase end } end + + def method_for_test_tracepoint_block + yield + end + + def test_tracepoint_block + events = [] + TracePoint.new(:call, :return, :c_call, :b_call, :c_return, :b_return){|tp| + events << [ + tp.event, tp.method_id, tp.defined_class, tp.self.class, + /return/ =~ tp.event ? tp.return_value : nil + ] + }.enable{ + 1.times{ + 3 + } + method_for_test_tracepoint_block{ + 4 + } + } + # pp events + expected_events = + [[:b_call, :test_tracepoint_block, TestSetTraceFunc, TestSetTraceFunc, nil], + [:c_call, :times, Integer, Fixnum, nil], + [:b_call, :test_tracepoint_block, TestSetTraceFunc, TestSetTraceFunc, nil], + [:b_return, :test_tracepoint_block, TestSetTraceFunc, TestSetTraceFunc, 3], + [:c_return, :times, Integer, Fixnum, 1], + [:call, :method_for_test_tracepoint_block, TestSetTraceFunc, TestSetTraceFunc, nil], + [:b_call, :test_tracepoint_block, TestSetTraceFunc, TestSetTraceFunc, nil], + [:b_return, :test_tracepoint_block, TestSetTraceFunc, TestSetTraceFunc, 4], + [:return, :method_for_test_tracepoint_block, TestSetTraceFunc, TestSetTraceFunc, 4], + [:b_return, :test_tracepoint_block, TestSetTraceFunc, TestSetTraceFunc, 4] + ].zip(events){|expected, actual| + assert_equal(expected, actual) + } + end + + def test_tracepoint_thread + events = [] + created_thread = nil + TracePoint.new(:thread_begin, :thread_end){|tp| + events << [Thread.current, tp.event, tp.self] + }.enable{ + created_thread = Thread.new{} + created_thread.join + } + assert_equal([created_thread, :thread_begin, self], events[0]) + assert_equal([created_thread, :thread_end, self], events[1]) + assert_equal(2, events.size) + end end |