From: merch-redmine@... Date: 2019-07-08T01:17:48+00:00 Subject: [ruby-core:93601] [Ruby master Bug#10764] TracePoint API reports events for the last last line of multiline ||= Issue #10764 has been updated by jeremyevans0 (Jeremy Evans). Status changed from Open to Closed From testing, this issue was resolved between Ruby 2.4 and 2.5. 2.4 output: ``` c_return -e:3 enable line -e:5 c_call -e:5 method_added c_return -e:5 method_added line -e:8 c_call -e:8 method_added c_return -e:8 method_added line -e:19 call -e:8 bar line -e:10 bar call -e:5 foo return -e:6 foo line -e:13 bar line -e:15 bar call -e:5 foo return -e:6 foo return -e:17 bar ``` 2.5 output: ``` c_return -e:3 enable line -e:5 c_call -e:5 method_added c_return -e:5 method_added line -e:8 c_call -e:8 method_added c_return -e:8 method_added line -e:19 call -e:8 bar line -e:9 bar call -e:5 foo return -e:6 foo line -e:12 bar line -e:15 bar call -e:5 foo return -e:6 foo return -e:17 bar ``` ---------------------------------------- Bug #10764: TracePoint API reports events for the last last line of multiline ||= https://bugs.ruby-lang.org/issues/10764#change-79195 * Author: os97673 (Oleg Sukhodolsky) * Status: Closed * Priority: Normal * Assignee: * Target version: * ruby -v: ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-darwin14] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- Here is a simple test which demonstrates the problem: ~~~ruby TracePoint.new do |tp| printf "%8s %s:%-2d %13s\n", tp.event, tp.path, tp.lineno, tp.method_id end.enable def foo end def bar @foo ||= foo do end @foo &&= foo do end @foo = foo do end end bar ~~~ Here is test's output I've got with 2.2.0 ~~~ruby c_return /Users/user/work/tests/slim-tests/ruby/debugger/ruby-16152.rb:3 enable line /Users/user/work/tests/slim-tests/ruby/debugger/ruby-16152.rb:5 c_call /Users/user/work/tests/slim-tests/ruby/debugger/ruby-16152.rb:5 method_added c_return /Users/user/work/tests/slim-tests/ruby/debugger/ruby-16152.rb:5 method_added line /Users/user/work/tests/slim-tests/ruby/debugger/ruby-16152.rb:8 c_call /Users/user/work/tests/slim-tests/ruby/debugger/ruby-16152.rb:8 method_added c_return /Users/user/work/tests/slim-tests/ruby/debugger/ruby-16152.rb:8 method_added line /Users/user/work/tests/slim-tests/ruby/debugger/ruby-16152.rb:19 call /Users/user/work/tests/slim-tests/ruby/debugger/ruby-16152.rb:8 bar line /Users/user/work/tests/slim-tests/ruby/debugger/ruby-16152.rb:10 bar call /Users/user/work/tests/slim-tests/ruby/debugger/ruby-16152.rb:5 foo return /Users/user/work/tests/slim-tests/ruby/debugger/ruby-16152.rb:6 foo line /Users/user/work/tests/slim-tests/ruby/debugger/ruby-16152.rb:13 bar line /Users/user/work/tests/slim-tests/ruby/debugger/ruby-16152.rb:15 bar call /Users/user/work/tests/slim-tests/ruby/debugger/ruby-16152.rb:5 foo return /Users/user/work/tests/slim-tests/ruby/debugger/ruby-16152.rb:6 foo return /Users/user/work/tests/slim-tests/ruby/debugger/ruby-16152.rb:17 bar c_return -e:1 load ~~~ As you can see from the output we do get events for last line for ||= and &&= but for the first line for = (looks a little bit inconsistent for me ;) We do use the API to implement debugger (https://github.com/denofevil/debase and https://github.com/ruby-debug/ruby-debug-ide) and such behavior means that either user has be be very smart about setting breakpoints (it needs to know/guess at which lines it is possible to set breakpoints and this is not very obvious) or debugger should be even smarter than the user and move breakpoints to the closest allowed place (which is even harder). It would be nice to have consistent behavior and get events for the first line of the a multi line assignment in all cases. Originally the problem reported agains RubyMine's debugger (https://youtrack.jetbrains.com/issue/RUBY-16152) -- https://bugs.ruby-lang.org/ Unsubscribe: