2017-10-05 115 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