【问题标题】:Does ArgumentError lack backtrace_locations?ArgumentError 是否缺少 backtrace_locations?
【发布时间】:2014-01-12 23:27:54
【问题描述】:

当我调用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_locationsnil,这出乎我的意料:

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

【问题讨论】:

  • 看起来(如果是同一个问题)它还没有在 2.1 中:bugs.ruby-lang.org/issues/8960
  • @CDub 你是什么意思它还没有?修订版 44170 应该已经实现了它。该方法返回nil;它被定义。如果它没有被定义,那么它应该引发一个未定义的错误。
  • 根据 12 天前在上述线程中的最后一条评论:“目标版本从当前版本更改:2.1.0 到下一个次要版本”......我读到“它将在下一个次要版本中,它不在 2.1.0 中。”
  • 或者我发现了错误的问题...我愿意犯错。我今天已经至少错了 131241 次。 :)
  • @CDub 感谢 cmets。我对 ko1 对该线程的最后评论的解释是,他已经完成了 backtrace_locations,但还没有完成 set_backtrace_locations 之类的。从这个意义上说,它已经完成了一半,并已设置为下一个小调。

标签: ruby ruby-2.1


【解决方案1】:

这是一个错误,维护者 ko1 在修订版 44411 中只是 fixed it。希望它能够在今天的 Ruby 2.1 版本中发布。

编辑 原来还没有修复。今天发布的 Ruby 2.1 仍然存在这个问题。

编辑据维护者称,该修复将被合并到 Ruby 2.1.1 中。

【讨论】:

    猜你喜欢
    • 2014-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    • 1970-01-01
    相关资源
    最近更新 更多