使用 Rescue 检索导致错误的方法

Retrieve method that caused error using Rescue

假设您有以下示例代码块:

  def next_page(next_token)
    client.list_order_items_by_next_token(next_token)
  rescue => error
    binding.pry
  end

如果不深入探讨此救援正在捕获所有错误的问题以及这是多么糟糕(此块已被修改),是否有办法确定导致问题的方法 list_order_items_by_next_token?我知道堆栈跟踪可用,但感觉不对。

只需使用

error.backtrace

不用担心性能。

当您挽救异常时,创建回溯的成本已经发生。引发异常时创建回溯。而且很贵! Ruby 必须在引发异常时创建 O(N) 新字符串,其中 N 是堆栈跟踪的深度。在常见的 Rails 应用程序中可以达到 1000+。它在循环中变得更糟。所有这些字符串通常都不会被使用,只会阻塞垃圾收集。在我们的生产系统中,这些回溯字符串是性能下降的主要原因之一。但正如我所说,当引发异常时会产生成本,以后访问回溯是免费的。