Bug #17466
closedInconsistent backtrace order in Ruby 3.0
Description
I found the backtrace order is different between ruby sample.rb
and irb in Ruby 3.0.
# sample.rb
puts RUBY_DESCRIPTION
class A
def hoge
fuga
end
def fuga
1/0
end
end
A.new.hoge
$ ruby sample.rb ruby 3.0.0dev (2020-12-19T22:13:08Z master 6343a81129) [x86_64-darwin20] sample.rb:8:in `/': divided by 0 (ZeroDivisionError) from sample.rb:8:in `fuga' from sample.rb:4:in `hoge' from sample.rb:11:in `<main>'
$ irb --prompt simple >> puts RUBY_DESCRIPTION ruby 3.0.0dev (2020-12-19T22:13:08Z master 6343a81129) [x86_64-darwin20] => nil ?> class A ?> def hoge ?> fuga ?> end ?> ?> def fuga ?> 1/0 ?> end >> end => :fuga >> A.new.hoge Traceback (most recent call last): 7: from /Users/jnito/.rbenv/versions/3.0.0-dev/bin/irb:23:in `<main>' 6: from /Users/jnito/.rbenv/versions/3.0.0-dev/bin/irb:23:in `load' 5: from /Users/jnito/.rbenv/versions/3.0.0-dev/lib/ruby/gems/3.0.0/gems/irb-1.2.7/exe/irb:11:in `<top (required)>' 4: from (irb):11:in `<main>' 3: from (irb):4:in `hoge' 2: from (irb):8:in `fuga' 1: from (irb):8:in `/' ZeroDivisionError (divided by 0)
I'd like to have the same order because such an inconsistent results would confuse developers (especially beginners).
This issue is related to https://bugs.ruby-lang.org/issues/8661
Files
Updated by jnchito (Junichi Ito) 4 months ago
I'd like to have the same order because such an inconsistent results would confuse developers (especially beginners).
Please let me add more information.
I am the author of a book called "プロを目指す人のためのRuby入門"( https://gihyo.jp/book/2017/978-4-7741-9397-7 ). I wrote how to read backtrace in it (please see the attached image.) I might revise it for Ruby 3.0. If the backtrace is different between ruby command and irb, I have to describe context and switch backtrace example each time. It would increase the cost of writing and confuse readers who are struggling with errors.
Updated by marcandre (Marc-Andre Lafortune) 4 months ago
- Assignee set to aycabta (aycabta .)
The order of the backtrace was reverse for 2.7 and switched back for 3.0, see #8661
Indeed, irb
probably needs to be updated to reflect that.
Updated by Eregon (Benoit Daloze) 4 months ago
Could IRB use Exception#full_message
(+ filter with Exception#set_backtrace
, or filter the output of #full_message
)?
I was also surprised that IRB has its own backtrace formatting logic.
Updated by aycabta (aycabta .) 3 months ago
- Status changed from Open to Closed
Applied in changeset git|917050220a1fd41bdb3e50ea54a200b0c285bcd4.
[ruby/irb] Use Exception#full_message to show backtrace in the correct order
[Bug #17466]