2009-02-07 18 views

Respuesta

16

Establezca la bandera de la clase Thread 'abort_on_exception en verdadero.

Como alternativa, enrolle el cuerpo de la rosca en un bloque de tiro/enganche y descargue la excepción en el enganche.

6

Esto debería detectar cualquier error que no maneje explícitamente e imprimirlos en STDOUT.

require 'pp' 

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

resultado: #<ZeroDivisionError: divided by 0>

8

Establecer $DEBUG a verdadero (se puede hacer esto desde la línea de comandos con -d), y obtendrá

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

Gracias! Esto acaba de aumentar mi velocidad de depuración en un problemático servidor de DRb en ​​un orden de magnitud. – Phrogz

Cuestiones relacionadas