当我得到异常时,它通常来自调用堆栈的深层。当这种情况发生时,实际的违规代码行通常会对我隐藏起来:
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包含完整的堆栈?
发布于 2008-12-18 00:17:39
Exception#backtrace包含整个堆栈:
def do_division_by_zero; 5 / 0; end
begin
do_division_by_zero
rescue => exception
puts exception.backtrace
raise # always reraise
end
(灵感来自彼得·库珀的Ruby Inside博客)
发布于 2011-10-11 17:52:03
如果你想要一个简单的一行代码,你也可以这样做:
puts caller
发布于 2011-02-16 22:41:49
这将生成错误描述和简洁、缩进的堆栈跟踪:
begin
# Some exception throwing code
rescue => e
puts "Error during processing: #{$!}"
puts "Backtrace:\n\t#{e.backtrace.join("\n\t")}"
end
https://stackoverflow.com/questions/376513
复制相似问题