Bug #15558
closedShould Exception#exception copy the backtrace?
Description
Currently it does not on MRI:
ruby -e 'begin raise "foo"; rescue => e; c=e.exception "bar"; p c.backtrace; end'
nil
But it does on JRuby 9.2.5.0 and TruffleRuby 1.0.0-rc11:
truffleruby -e 'begin raise "foo"; rescue => e; c=e.exception "bar"; p e.backtrace; end'
["-e:1:in `<main>'"]
This means in some cases, code needs about this difference such as in
https://github.com/asciidoctor/asciidoctor/blob/41da20a47a8da96966ef3ec1c2f509e07e7920e3/lib/asciidoctor.rb#L1322-L1338
More context in:
https://github.com/oracle/truffleruby/issues/1542#issuecomment-456850066
Updated by Eregon (Benoit Daloze) over 5 years ago
@nobu (Nobuyoshi Nakada) and other MRI committers: what do you think?
It's somewhat inconsistent with Exception#clone which does copy the backtrace.
Would it make sense to follow JRuby and TruffleRuby's behavior, by copying the backtrace too, here?
Updated by Eregon (Benoit Daloze) over 5 years ago
BTW, MRuby 2.0.0 also copies the backtrace (because it implements Exception#exception as clone + setting the message):
$ mruby -e 'begin raise "foo"; rescue => e; c=e.exception "bar"; p c.backtrace; end'
["-e:1"]
MRI also clones (with rb_obj_clone
), but exc_init
resets the backtrace to nil
.
So should exc_exception()
just call rb_ivar_set(exc, id_mesg, argv[0]);
instead of exc_initialize
(which kind of initializes the object twice)?
Updated by Eregon (Benoit Daloze) over 5 years ago
I plan to fix this and copy the backtrace too in MRI, because it looks not intentional and inconsistent.
Anyone against?
Updated by Eregon (Benoit Daloze) over 5 years ago
- Assignee set to Eregon (Benoit Daloze)
Updated by ko1 (Koichi Sasada) over 5 years ago
I'm not sure the intention, but
Japanese document shows how to use it:
# http://rurema.clear-code.com/2.6.0/method/Exception/i/exception.html
begin
... # do something
rescue => e
raise e.exception("an error occurs during hogehoge process") # detailed message
end
If this method is intended to be raised immediately, the empty backtrace is reasonable.
Updated by nobu (Nobuyoshi Nakada) about 5 years ago
- Status changed from Open to Closed