1. ホーム
  2. ruby

[解決済み】rubyが切り捨てられたバックトレースではなく、完全なバックトレースを表示するにはどうしたらいいですか?

2022-04-14 06:48:49

質問

例外が発生したとき、コールスタックの奥から発生することが多いのですが、どうしたらいいですか? このような場合、多くの場合、実際に問題のあるコードの行は私から隠されています。

tmp.rb:7:in `t': undefined method `bar' for nil:NilClass (NoMethodError)
        from tmp.rb:10:in `s'
        from tmp.rb:13:in `r'
        from tmp.rb:16:in `q'
        from tmp.rb:19:in `p'
        from tmp.rb:22:in `o'
        from tmp.rb:25:in `n'
        from tmp.rb:28:in `m'
        from tmp.rb:31:in `l'
         ... 8 levels...
        from tmp.rb:58:in `c'
        from tmp.rb:61:in `b'
        from tmp.rb:64:in `a'
        from tmp.rb:67

あの"... 8段階..."の切り捨ては、私に大きな問題を引き起こしています。 この件に関してはググってもあまり成功しないんですよね。 どうすればrubyにダンプにフルスタックを含めるように指示できますか?

解決方法は?

Exception#backtraceにはスタック全体が含まれています。

def do_division_by_zero; 5 / 0; end
begin
  do_division_by_zero
rescue => exception
  puts exception.backtrace
  raise # always reraise
end

(ピーター・クーパーの ルビー・インサイド ブログ)