当我调用Exception#backtrace_locations
时,它通常会按预期返回一个数组:
begin
raise "foo"
rescue => e
p e.backtrace_locations
end
# => ["this_file:2:in `<main>'"]
如果我手动提出ArgumentError
,则相同:
begin
raise ArgumentError.new
rescue => e
p e.backtrace_locations
end
# => ["this_file:2:in `<main>'"]
但是,当我通过调用参数数量错误的方法提出真实ArgumentError
时,backtrace_locations
为nil
,这对我来说是意外的:
def foo; end
begin
foo(:bar)
rescue => e
p e.backtrace_locations
end
# => nil
在相同的情况下,经典Exception#backtrace
按预期返回一个数组:
def foo; end
begin
foo(:bar)
rescue => e
p e.backtrace
end
# => ["this_file:1:in `foo'", "this_file:4:in `<main>'"]
第三种情况下Exception#backtrace_locations
的返回值是nil
是否高于预期值?如果是,Exception#backtrace_locations
何时成为nil
?有没有这方面的文件?或者,它是Ruby漏洞吗?
此时,我认为这是一个错误,reported it。
答案 0 :(得分:2)
这是一个错误,维护者ko1只是修订版44411中的fixed it。希望它能够成为今天发布的Ruby 2.1。
修改结果证明它尚未修复。今天发布的Ruby 2.1仍有这个问题。
编辑根据维护者的说法,修复程序将合并到Ruby 2.1.1中。