首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何让ruby打印完整的回溯而不是截断的回溯?

如何让ruby打印完整的回溯而不是截断的回溯?
EN

Stack Overflow用户
提问于 2008-12-18 00:11:34
回答 9查看 164.7K关注 0票数 196

当我得到异常时,它通常来自调用堆栈的深层。当这种情况发生时,实际的违规代码行通常会对我隐藏起来:

代码语言:javascript
复制
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层……”截断给我带来了很多麻烦。我在googling上搜索这个并不是很成功:我如何告诉ruby我想让dump包含完整的堆栈?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2008-12-18 00:17:39

Exception#backtrace包含整个堆栈:

代码语言:javascript
复制
def do_division_by_zero; 5 / 0; end
begin
  do_division_by_zero
rescue => exception
  puts exception.backtrace
  raise # always reraise
end

(灵感来自彼得·库珀的Ruby Inside博客)

票数 270
EN

Stack Overflow用户

发布于 2011-10-11 17:52:03

如果你想要一个简单的一行代码,你也可以这样做:

代码语言:javascript
复制
puts caller
票数 191
EN

Stack Overflow用户

发布于 2011-02-16 22:41:49

这将生成错误描述和简洁、缩进的堆栈跟踪:

代码语言:javascript
复制
begin               
 # Some exception throwing code
rescue => e
  puts "Error during processing: #{$!}"
  puts "Backtrace:\n\t#{e.backtrace.join("\n\t")}"
end
票数 106
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/376513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档