2009-02-07 5 views

Répondre

16

Définissez le drapeau abort_on_exception de la classe Thread sur true.

Alternativement, enroulez le corps de fil dans un bloc de lancement/éjection et videz l'exception dans le loquet.

6

Ceci devrait intercepter les erreurs que vous ne gérez pas explicitement et les imprimer dans STDOUT.

require 'pp' 

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

Résultat: #<ZeroDivisionError: divided by 0>

8

Set $DEBUG true (vous pouvez le faire à partir de la ligne de commande avec -d), et vous obtiendrez

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

Merci! Cela a juste augmenté ma vitesse de débogage sur un serveur DRb gênant d'un ordre de grandeur. – Phrogz

Questions connexes