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) almost 4 years 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) almost 4 years 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) almost 4 years 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 .) almost 4 years 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]