Project

General

Profile

Actions

Feature #20275

closed

Avoid extra backtrace entries for rescue and ensure

Added by Eregon (Benoit Daloze) 3 months ago. Updated about 2 months ago.

Status:
Closed
Target version:
[ruby-core:116819]

Description

From https://bugs.ruby-lang.org/issues/19117#note-48:

def raise_nested_exceptions
  raise "First error"
rescue
  begin
    raise "Second error"
  rescue
    raise "Third error"
  end
end

raise_nested_exceptions

Current:

-:7:in 'Object#raise_nested_exceptions': Third error (RuntimeError)
	from -:4:in 'Object#raise_nested_exceptions'
	from -:1:in 'Object#raise_nested_exceptions'
	from -:11:in '<main>'
-:5:in 'Object#raise_nested_exceptions': Second error (RuntimeError)
	from -:1:in 'Object#raise_nested_exceptions'
	from -:11:in '<main>'
-:2:in 'Object#raise_nested_exceptions': First error (RuntimeError)
	from -:11:in '<main>'

The above repeated backtrace entries for Object#raise_nested_exceptions are because of CRuby implementation details.
It seems best to hide them because they do not help understanding the program, and semantically there is no (method or proc) call on line 1 or 4.

Proposed:

-:7:in 'Object#raise_nested_exceptions': Third error (RuntimeError)
	from -:11:in '<main>'
-:5:in 'Object#raise_nested_exceptions': Second error (RuntimeError)
	from -:11:in '<main>'
-:2:in 'Object#raise_nested_exceptions': First error (RuntimeError)
	from -:11:in '<main>'

We can see TruffleRuby and JRuby already behave this way, most likely because they do not use an extra frame for rescue.
It is definitely useful to have the same backtrace on different Ruby implementations as some tests rely on this.

TruffleRuby 23.1.2:

-:7:in `raise_nested_exceptions': Third error (RuntimeError)
	from -:11:in `<main>'
-:5:in `raise_nested_exceptions': Second error (RuntimeError)
	from -:11:in `<main>'
-:2:in `raise_nested_exceptions': First error (RuntimeError)
	from -:11:in `<main>'

JRuby 9.4.5.0:

RuntimeError: Third error
  raise_nested_exceptions at -:7
                   <main> at -:11
RuntimeError: Second error
  raise_nested_exceptions at -:5
                   <main> at -:11
RuntimeError: First error
  raise_nested_exceptions at -:2
                   <main> at -:11

Related issues 1 (0 open1 closed)

Related to Ruby master - Feature #19117: Include the method owner in backtraces, not just the method nameClosedmame (Yusuke Endoh)Actions
Actions

Also available in: Atom PDF

Like3
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0