From: "mame (Yusuke Endoh) via ruby-core" Date: 2024-02-16T11:34:50+00:00 Subject: [ruby-core:116796] [Ruby master Feature#19117] Include the method owner in backtraces, not just the method name Issue #19117 has been updated by mame (Yusuke Endoh). You've been found out! During this work, I noticed a problem with the inconsistency of `ensure in`. ```ruby begin ensure p caller(0) #=> ["test.rb:3:in `
'"] end begin raise ensure p caller(0) #=> ["test.rb:9:in `ensure in
'", "test.rb:9:in `
'"] end ``` If it enters into the ensure clause with an exception, you will see `ensure in`. But if it enters normally (without an exception), you will not see `ensure in`. This depends on the implementation details of `ensure` in RubyVM. I discussed this with @ko1, and we decided to remove `ensure in` (and `rescue in` as well). So I removed it intentionally and hoped no one noticed it :-P I can probably restore `rescue in` and `ensure in` with the above inconsistency. Do you like it? ---------------------------------------- Feature #19117: Include the method owner in backtraces, not just the method name https://bugs.ruby-lang.org/issues/19117#change-106819 * Author: byroot (Jean Boussier) * Status: Closed * Priority: Normal * Target version: 3.4 ---------------------------------------- ``` module Foo class Bar def inspect 1 + '1' end end end p Foo::Bar.new ``` This code produce the following backtrace: ``` /tmp/foo.rb:4:in `+': String can't be coerced into Integer (TypeError) from /tmp/foo.rb:4:in `inspect' from /tmp/foo.rb:9:in `p' from /tmp/foo.rb:9:in `
' ``` This works, but on large codebases and large backtraces the method name isn't always all that revealing, most of the time you need to open many of the locations listed in the backtrace to really understand what is going on. I propose that we also include the owner name: ``` /tmp/foo.rb:4:in `Integer#+': String can't be coerced into Integer (TypeError) from /tmp/foo.rb:4:in `Foo::Bar#inspect' from /tmp/foo.rb:9:in `Kernel#p' from /tmp/foo.rb:9:in `
' ``` I believe that in many case it would allow to much better understand the backtrace without having to jump back and forth between it and the source code. This is inspired by @ivoanjo 's `backtracie` gem: https://github.com/ivoanjo/backtracie -- 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/