2017-01-10 80 views
1

比方說,你有下面的示例代碼塊造成的錯誤方法:檢索,使用救援

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

你到底想做什麼?我不清楚。 –

+2

你認爲回溯是什麼?這正是這樣的要求。 –

+0

我想知道是否有一個可以調用的方法,將返回名稱「client.list_order_items_by_next_token」:我設置了一個重試部分,但我需要知道是什麼導致了錯誤從語言環境文件中提取消息。 @EddeAlmeida –

回答

0

只需使用

error.backtrace 

不要擔心性能。

當您解救異常時,創建回溯的成本已經發生。回溯是在引發異常時創建的。而且它很貴!每當引發異常時,Ruby必須創建O(N)新字符串,其中N是堆棧跟蹤的深度。在一個普通的Rails應用程序中,這可以是1000+。它在循環中變得更糟。所有這些字符串通常都不會被使用,只會阻塞垃圾回收。在我們的生產系統中,這些回溯串是性能下降的主要原因之一。但正如我所說的那樣,當異常發生時會產生成本,之後訪問回溯是免費的。

+0

非常感謝你的大討論 –