我正在尝试找到理想的方法来捕获所有例外,以格式化回溯输出。
我应该提到的是,要拥有一个可以是required
并提供更易于阅读的backtrace的简单宝石。所以begin
... rescue
不是一个选项。
到目前为止,我找到了两种方法,每种方法都有自己的问题:
-
使用
TracePoint
,就像我在这里一样。 -
使用
at_exit
,就像我在这里一样。
TracePoint
方法给了我比所需的灵活性少,并且使用at_exit
方法,我觉得我正在滥用此方法,尤其是因为我还必须使用exit!
来防止原始的backtrace打印。
所以,我的问题是:
- 有比上面提到的两个更好的方法吗?
- 使用
at_exit
-除了使用exit!
以外
参考代码:
at_exit do
if $! and $!.class != SystemExit
show_errors $!
exit! 1
end
end
- 也许。看看我在
pretty_debug
宝石中的做法。 -
是。就像我在上面的链接中所做的那样,做:
$stderr.reopen(IO::NULL) $stdout.reopen(IO::NULL)