我有以下代码,用于在遇到错误时显示应用状态的报告。
begin
... # makes calls to lower level instances
rescue
send_report
end
def send_report
str = ""
str.concat("#{$!}\n\r")
str.concat("Report ----------\n\r")
...
raise str
end
问题是$!只给我一行错误,没有任何通常的堆栈跟踪。示例错误是:
DEBUG - undefined method `to_sym' for nil:NilClass
这显示没有文件名或行号或任何上下文。如何添加?
答案 0 :(得分:7)
你可以指定存储异常的变量(尽管你确实将它们存储在$!
中,我更喜欢显式的非全局变量)。
begin
# exception is raised
rescue Exception => e
str = "#{e.message}\n"
str << e.backtrace.join("\n")
raise str
end
您只得到错误的原因是被插值的异常可能会在Exception对象上调用to_s
,returns its message and not its backtrace.