From: "hurricup (Alexandr Evstigneev)" Date: 2022-03-18T09:34:51+00:00 Subject: [ruby-core:107971] [Ruby master Bug#18646] Inconsistent behavior for the targeted TracePoints in ruby 2.6-2.7 and 3+ Issue #18646 has been reported by hurricup (Alexandr Evstigneev). ---------------------------------------- Bug #18646: Inconsistent behavior for the targeted TracePoints in ruby 2.6-2.7 and 3+ https://bugs.ruby-lang.org/issues/18646 * Author: hurricup (Alexandr Evstigneev) * Status: Open * Priority: Normal * Backport: 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN ---------------------------------------- Ruby 2.6 introduced the API for targeted tracepoints. But for some reason, before ruby 3.0, tracepoints looks exclusive per iseq. Consider an example: ``` def somemethod puts 1 puts 2 puts 3 end tp1 = TracePoint.new(:line) { |tp| puts 'This is tp1'} tp2 = TracePoint.new(:line) { |tp| puts 'This is tp2'} method_iseq = RubyVM::InstructionSequence.of(method :somemethod) tp1.enable(target: method_iseq, target_line: 2) tp2.enable(target: method_iseq, target_line: 4) somemethod ``` Ruby 2.6-2.7 prints : ``` 1 2 This is tp2 3 ``` And this is unexpected, because we have 2 tracepoints and expecting both to work. But actually, only last enabled does. Ruby 3+ work as expected: ``` This is tp1 1 2 This is tp2 3 ``` Would be really nice to have consistent 3+ behavior everywhere -- https://bugs.ruby-lang.org/ Unsubscribe: