【问题标题】:Catch all exceptions without begin-rescue在没有开始救援的情况下捕获所有异常
【发布时间】:2017-10-05 05:39:38
【问题描述】:

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

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

到目前为止,我已经找到了两种方法来做到这一点,每种方法都有自己的问题:

  1. 使用TracePoint,就像我did here

  2. 使用at_exit,如我did here

TracePoint 方法给我的灵活性比需要的少,而使用at_exit 方法,我觉得我在滥用这种方法,特别是因为我还必须使用exit! 来防止打印原始回溯。

所以,我的问题是:

  1. 有没有比上面提到的两个更好的方法?
  2. 使用at_exit - 除了使用exit!之外,还有其他方法可以防止显示任何回溯吗?

参考代码:

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

【问题讨论】:

    标签: ruby backtrace


    【解决方案1】:
    1. 也许吧。在pretty_debug gem 中查看我是如何做到的。
    2. 是的。正如我在上面的链接中所做的那样,请执行以下操作:

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

    【讨论】:

    • 有趣。 reopen 有什么作用?我知道它是为了防止显示原始错误,不确定我为什么会产生这个结果。 (将尝试您的宝石)。
    猜你喜欢
    • 2012-05-08
    • 2010-12-05
    • 2013-04-18
    • 2011-08-25
    • 2014-04-12
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 2012-10-06
    相关资源
    最近更新 更多