Project

General

Profile

Actions

Bug #10764

closed

TracePoint API reports events for the last last line of multiline ||=

Added by os97673 (Oleg Sukhodolsky) about 9 years ago. Updated almost 5 years ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-darwin14]
[ruby-core:67721]

Description

Here is a simple test which demonstrates the problem:

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

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)

Updated by jeremyevans0 (Jeremy Evans) almost 5 years ago

  • 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
Actions

Also available in: Atom PDF

Like0
Like0