summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorKoichi Sasada <ko1@atdot.net>2020-11-16 16:40:04 +0900
committerKoichi Sasada <ko1@atdot.net>2020-11-17 07:33:38 +0900
commit084e7e31b257f6ac859769553b4c1c6ca2930152 (patch)
tree4c240e2f1394022802fad2e0f2048cbb57d35bf1 /test
parent1271782f9d2d8fe7c67fe57a3ca0464f4acfcaa2 (diff)
remain enabled and line specified trace points
If two or more tracepoints enabled with the same target and with different target lines, the only last line is activated. This patch fixes this issue by remaining existing trace instructions. [Bug #17302]
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/3770
Diffstat (limited to 'test')
-rw-r--r--test/ruby/test_settracefunc.rb25
1 files changed, 25 insertions, 0 deletions
diff --git a/test/ruby/test_settracefunc.rb b/test/ruby/test_settracefunc.rb
index 9579974407..2caf71c000 100644
--- a/test/ruby/test_settracefunc.rb
+++ b/test/ruby/test_settracefunc.rb
@@ -2175,6 +2175,31 @@ class TestSetTraceFunc < Test::Unit::TestCase
assert_equal 'target_line is specified, but line event is not specified', e.message
end
+ def test_tracepoint_enable_with_target_line_two_times
+ events = []
+ line_0 = __LINE__
+ code1 = proc{
+ events << 1 # tp1
+ events << 2
+ events << 3 # tp2
+ }
+
+ tp1 = TracePoint.new(:line) do |tp|
+ events << :tp1
+ end
+ tp2 = TracePoint.new(:line) do |tp|
+ events << :tp2
+ end
+
+ tp1.enable(target: code1, target_line: line_0 + 2) do
+ tp2.enable(target: code1, target_line: line_0 + 4) do
+ # two hooks
+ code1.call
+ end
+ end
+ assert_equal [:tp1, 1, 2, :tp2, 3], events
+ end
+
def test_script_compiled
events = []
tp = TracePoint.new(:script_compiled){|tp|