在没有开始救援的情况下捕获所有异常

Catch all exceptions without begin-rescue

为了格式化回溯输出,我正试图找到捕获所有异常的理想方法。

我应该提一下,目的是有一个简单的 gem,可以是 required,并提供更易于阅读的回溯。所以 begin...rescue 不是一个选项。

到目前为止,我找到了两种方法,每种方法都有自己的问题:

  1. 使用 TracePoint, like I did here

  2. 使用at_exit, like 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
  1. 也许吧。在 pretty_debug gem.
  2. 中查看我是如何做到的
  3. 是的。正如我在上面 link 中所做的那样,执行:

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