考虑下面的Ruby 代码
测验rb:
begin
puts
thisFunctionDoesNotExist
x = 1+1
rescue Exception => e
p e
end
出于调试目的,我希望rescue块知道错误发生在该文件的第4行.有没有干净的方法?
考虑下面的Ruby 代码
测验rb:
begin
puts
thisFunctionDoesNotExist
x = 1+1
rescue Exception => e
p e
end
出于调试目的,我希望rescue块知道错误发生在该文件的第4行.有没有干净的方法?
p e.backtrace
我在一次IRB会议上运行了它,但没有来源,它仍然提供了相关信息.
=> ["(irb):11:in `foo'",
"(irb):17:in `irb_binding'",
"/usr/lib64/ruby/1.8/irb/workspace.rb:52:in `irb_binding'",
"/usr/lib64/ruby/1.8/irb/workspace.rb:52"]
如果您想要一个解析良好的回溯,下面的正则表达式可能会很方便:
p x.backtrace.map{ |x|
x.match(/^(.+?):(\d+)(|:in `(.+)')$/);
[$1,$2,$4]
}
[
["(irb)", "11", "foo"],
["(irb)", "48", "irb_binding"],
["/usr/lib64/ruby/1.8/irb/workspace.rb", "52", "irb_binding"],
["/usr/lib64/ruby/1.8/irb/workspace.rb", "52", nil]
]
(Regex/should/对函数名或目录/文件名中的奇怪字符是安全的)
>>def foo
>> thisFunctionDoesNotExist
>> rescue Exception => e
>> return e
>>end
>>x = foo
>>x.backtrace