2017-10-05 39 views
1

我正試圖找到理想的方式來捕獲所有異常,以便格式化回溯輸出。捕獲所有異常,無需開始救援

我應該提一下,其目的是要有一個簡單的寶石,可以只是required,並提供更容易閱讀的回溯。所以begin ... rescue不是一個選項。

到目前爲止,我已經找到了兩種方法來做到這一點,每一個都有自己的問題:

  1. 使用TracePoint,就像我did here

  2. 使用at_exit,如I did here

TracePoint方法給了我比需要更少的靈活性,並與at_exit方法,我覺得我濫用這種方法,尤其是因爲我還必須使用exit!防止印刷原回溯。

所以,我的問題是:

  1. 難道還有比上面提到的兩個更好的辦法?
  2. at_exit - 有沒有辦法阻止任何回溯顯示,除了使用exit!

參考代碼:

at_exit do 
    if $! and $!.class != SystemExit 
    show_errors $! 
    exit! 1 
    end 
end 

回答

2
  1. 也許。看看我是如何在pretty_debug gem中完成的。
  2. 是的。像我一樣在上面的鏈接,這樣做:

    $stderr.reopen(IO::NULL) 
    $stdout.reopen(IO::NULL) 
    
+0

有趣。 「重新打開」是做什麼的?我知道這是爲了防止原始錯誤顯示,不知道我得到它爲什麼會產生這個結果。 (會嘗試你的寶石)。 – DannyB

+0

沒關係,明白了:) – DannyB