当前位置:  开发笔记 > 后端 > 正文

如何从ruby线程获取错误消息

如何解决《如何从ruby线程获取错误消息》经验,为你挑选了3个好方法。

我现在遇到一个问题,我无法看到我的子线程在哪里吐出错误消息,这使得调试变得困难.

例如:

Thread.new{
    a = 1/0
}

是否有任何方法可以在stderr打印出所有线程错误?



1> Morendil..:

将Thread类' abort_on_exception标志设置为true.

或者,将线程主体包装在throw/catch块中,并将异常转储到catch中.



2> Andrew Grimm..:

设置$DEBUG为true(您可以从命令行执行此操作-d),您将获得

ruby -d bad_thread.rb 
Exception `LoadError' at /usr/lib/ruby/site_ruby/1.8/rubygems.rb:1113 - no such file to load -- rubygems/defaults/operating_system
Exception `LoadError' at /usr/lib/ruby/site_ruby/1.8/rubygems/config_file.rb:34 - no such file to load -- Win32API
Exception `ZeroDivisionError' at bad_thread.rb:2 - divided by 0
bad_thread.rb:2:in `/': divided by 0 (ZeroDivisionError)
    from bad_thread.rb:2
    from bad_thread.rb:1:in `initialize'
    from bad_thread.rb:1:in `new'
    from bad_thread.rb:1



3> Lolindrath..:

这应该捕获您没有明确处理的任何错误并将它们打印到STDOUT.

require 'pp'

Thread.new {
  begin
    a = 1/0
  rescue
    pp $!
  end
}

结果: #

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有