在没有开始救援的情况下捕获所有异常
Catch all exceptions without begin-rescue
为了格式化回溯输出,我正试图找到捕获所有异常的理想方法。
我应该提一下,目的是有一个简单的 gem,可以是 required
,并提供更易于阅读的回溯。所以 begin
...rescue
不是一个选项。
到目前为止,我找到了两种方法,每种方法都有自己的问题:
使用 TracePoint
, like I did here。
TracePoint
方法给我的灵活性低于需要,而使用 at_exit
方法,我觉得我在滥用这种方法,尤其是因为我还必须使用 exit!
来防止打印原始回溯。
所以,我的问题是:
- 还有比上述两种更好的方法吗?
- 使用
at_exit
- 除了使用 exit!
之外,还有其他方法可以防止显示任何回溯吗?
参考代码:
at_exit do
if $! and $!.class != SystemExit
show_errors $!
exit! 1
end
end
- 也许吧。在
pretty_debug
gem. 中查看我是如何做到的
是的。正如我在上面 link 中所做的那样,执行:
$stderr.reopen(IO::NULL)
$stdout.reopen(IO::NULL)
为了格式化回溯输出,我正试图找到捕获所有异常的理想方法。
我应该提一下,目的是有一个简单的 gem,可以是 required
,并提供更易于阅读的回溯。所以 begin
...rescue
不是一个选项。
到目前为止,我找到了两种方法,每种方法都有自己的问题:
使用
TracePoint
, like I did here。
TracePoint
方法给我的灵活性低于需要,而使用 at_exit
方法,我觉得我在滥用这种方法,尤其是因为我还必须使用 exit!
来防止打印原始回溯。
所以,我的问题是:
- 还有比上述两种更好的方法吗?
- 使用
at_exit
- 除了使用exit!
之外,还有其他方法可以防止显示任何回溯吗?
参考代码:
at_exit do
if $! and $!.class != SystemExit
show_errors $!
exit! 1
end
end
- 也许吧。在
pretty_debug
gem. 中查看我是如何做到的
是的。正如我在上面 link 中所做的那样,执行:
$stderr.reopen(IO::NULL) $stdout.reopen(IO::NULL)