From: "byroot (Jean Boussier) via ruby-core" Date: 2024-02-16T17:01:18+00:00 Subject: [ruby-core:116801] [Ruby master Feature#13557] there's no way to pass backtrace locations as a massaged backtrace Issue #13557 has been updated by byroot (Jean Boussier). I'll try to find some time to implement this in the near future, because I just ran into this today, and resorted to the following hack: ```ruby unless exception.backtrace begin raise exception rescue exception.class => raised_exception raised_exception.backtrace.shift raised_exception.backtrace_locations.shift exception = raised_exception end end ``` I think both `Kernel#raise` and `Exception#set_backtrace` would need to accept array of `Thread::Backtrace::Location`. ---------------------------------------- Feature #13557: there's no way to pass backtrace locations as a massaged backtrace https://bugs.ruby-lang.org/issues/13557#change-106824 * Author: sylvain.joyeux (Sylvain Joyeux) * Status: Open * Priority: Normal ---------------------------------------- When re-raising exceptions, it is sometimes useful to "massage" the backtrace (especially in DSLs). There is currently no way to do it using only backtrace locations. This causes the new exception to have #backtrace_locations return nil, and thus makes backtrace_locations unreliable as a whole. Example: ~~~ def test raise ArgumentError, "", caller_locations end begin test rescue ArgumentError => e p e.backtrace_locations end ~~~ attempting to pass `caller_location` to `Kernel#raise` in the `test` method fails with `bla.rb:2:in `set_backtrace': backtrace must be Array of String (TypeError)` -- https://bugs.ruby-lang.org/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/