在没有开始救援的情况下抓住所有例外情况

时间:2017-10-05 05:39:38

标签: ruby backtrace

我正在尝试找到捕获所有异常的理想方法,以便格式化回溯输出。

我应该提一下,目的是拥有一个简单的gem,它可以只是required并提供更容易阅读的回溯。因此,begin ... rescue不是一种选择。

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

  1. 使用TracePoint,就像我did here一样。

  2. 使用at_exit,例如我did here

  3. TracePoint方法给我的灵活性低于所需的灵活性,使用at_exit方法,我觉得我滥用这种方法,特别是因为我还必须使用exit!来阻止来自印刷的原始回溯。

    所以,我的问题是:

    1. 有没有比上面提到的更好的方法?
    2. 使用at_exit - 除了使用exit!之外,有没有办法阻止任何回溯显示?
    3. 参考代码:

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

1 个答案:

答案 0 :(得分:2)

  1. 也许。看看我是如何在pretty_debug gem中完成的。
  2. 是。正如我在上面的链接中所做的那样:

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