Project

General

Profile

Actions

Bug #10763

closed

do not receive TracePoint event for elsif

Added by os97673 (Oleg Sukhodolsky) over 9 years ago. Updated almost 8 years ago.

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

Description

Here is a simple test which shows that we do not receive TracePoint event for line with elsif,
and so it is impossible to implement debugger which will be able to set breakpoint on that line
(originally reported agains RubyMine's debugger - https://youtrack.jetbrains.com/issue/RUBY-14452)

trace = TracePoint.new do |tp|
  printf "%8s %s:%-2d %13s\n", tp.event, tp.path, tp.lineno, tp.method_id
end

def method1; false end
def method2; true end
trace.enable

if method1
  1
elsif method2
  2
end

Here is an output I'v got with 2.2.0 (the same problem we have with 1.9, 2.0, and 2.1)

c_return /Users/user/work/tests/slim-tests/ruby/debugger/ruby-14452.rb:7         enable
    line /Users/user/work/tests/slim-tests/ruby/debugger/ruby-14452.rb:9               
    call /Users/user/work/tests/slim-tests/ruby/debugger/ruby-14452.rb:5        method1
    line /Users/user/work/tests/slim-tests/ruby/debugger/ruby-14452.rb:5        method1
  return /Users/user/work/tests/slim-tests/ruby/debugger/ruby-14452.rb:5        method1
    call /Users/user/work/tests/slim-tests/ruby/debugger/ruby-14452.rb:6        method2
    line /Users/user/work/tests/slim-tests/ruby/debugger/ruby-14452.rb:6        method2
  return /Users/user/work/tests/slim-tests/ruby/debugger/ruby-14452.rb:6        method2
    line /Users/user/work/tests/slim-tests/ruby/debugger/ruby-14452.rb:12              
c_return -e:1           load

IMHO any user does expect that it should be possible to set breakpoint on "elsif" to be able to evaluate condition.

Updated by angarciaba (Angel Garcia) almost 8 years ago

Even more strange: the problem disappears if you enclose the condition between parentheses. In the Oleg Sukhodolsky example:

elsif (method2)

Actions #2

Updated by nobu (Nobuyoshi Nakada) almost 8 years ago

  • Status changed from Open to Closed

Applied in changeset r54893.


parse.y: trace elsif

  • parse.y (new_if_gen): set newline flag to NODE_IF to trace all
    if/elsif statements. [ruby-core:67720] [Bug #10763]

Updated by usa (Usaku NAKAMURA) almost 8 years ago

  • Backport changed from 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN to 2.1: WONTFIX, 2.2: REQUIRED, 2.3: REQUIRED

Updated by usa (Usaku NAKAMURA) almost 8 years ago

  • Backport changed from 2.1: WONTFIX, 2.2: REQUIRED, 2.3: REQUIRED to 2.1: WONTFIX, 2.2: DONE, 2.3: REQUIRED

ruby_2_2 r55360 merged revision(s) 54893.

Updated by usa (Usaku NAKAMURA) almost 8 years ago

about ruby_2_2, new_if_gen() does not exist.
then, call newline_node() directly in the rule definition of if_tail.

Updated by nagachika (Tomoyuki Chikanaga) almost 8 years ago

  • Backport changed from 2.1: WONTFIX, 2.2: DONE, 2.3: REQUIRED to 2.1: WONTFIX, 2.2: DONE, 2.3: DONE

ruby_2_3 r55382 merged revision(s) 54893.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0