2009-02-07 14 views
12

मुझे अभी समस्या है जहां मैं नहीं देख सकता कि मेरे बच्चे के धागे त्रुटि संदेशों को थका रहे हैं जो डीबग करना मुश्किल बना रहा है।रूबी धागे से त्रुटि संदेशों को कैसे प्राप्त करें

जैसे:

Thread.new{ 
    a = 1/0 
} 

सभी धागा त्रुटियों stderr पर प्रिंट आउट के लिए कोई तरीका है?

उत्तर

16

थ्रेड क्लास 'abort_on_exception ध्वज को सही पर सेट करें।

वैकल्पिक रूप से, थ्रेड बॉडी को फेंक/पकड़ ब्लॉक में लपेटें और पकड़ में अपवाद को डंप करें।

6

यह किसी भी त्रुटि को पकड़ना चाहिए जिसे आप स्पष्ट रूप से संभाल नहीं सकते हैं और उन्हें STDOUT पर प्रिंट नहीं करते हैं।

require 'pp' 

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

परिणाम: #<ZeroDivisionError: divided by 0>

8

सेट को सही पर $DEBUG (आप -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 
+1

धन्यवाद! इसने परिमाण के क्रम से एक परेशानी डीआरबी सर्वर पर अपनी डीबगिंग गति को अभी बढ़ा दिया है। – Phrogz

संबंधित मुद्दे