我们假设您有以下示例代码块:
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
?我知道堆栈跟踪可用,但感觉不对。
答案 0 :(得分:0)
只需使用
error.backtrace
不要担心表现。
当您挽救异常时,已经发生了创建回溯的成本。引发异常时会创建回溯。它很贵!每当引发异常时,Ruby都必须创建O(N)
个新字符串,其中N
是堆栈跟踪的深度。在常见的Rails应用程序中可以是1000+。它在循环中变得更糟。所有这些字符串通常都不会被使用,只会阻塞垃圾回收。在我们的生产系统中,这些回溯字符串是性能下降的主要原因之一。但正如我所说,当引发异常时会产生成本,以后访问回溯是免费的。