2010-03-24 9 views
6

Me estoy familiarizando con algún código JRuby, y me gustaría poder colocar un punto de interrupción en el código y ejecutarlo (como de costumbre) desde la línea de comandos, haciendo que se rompa en el depurador cuando llegue a ese punto punto. ¿Hay algo que pueda poner en mi código para obligar a JRuby a entrar en el depurador?¿Qué debo poner en mi código Ruby (JRuby) para entrar en el depurador?

He intentado ejecutar jruby -r debug foo.rb (en lugar de lo habitual jruby foo.rb), y luego establecer un punto de interrupción con b bar.py:98, y luego continuar. Pero el depurador se detiene cada vez que hay una excepción, y parece que hay muchas antes de que llegue a la línea de código que me interesa. Me gustaría poder poner el "break-in-depurador" línea (s) en mi código y ejecutar jruby foo.rb y tener el primer lugar donde el depurador se detiene en esa línea.

(es decir, estoy buscando el equivalente de Ruby/JRuby de import pdb;pdb.set_trace() en Python.)

Respuesta

5

Usted podría intentar NetbeansRuby IDE, tiene JRuby intérprete y herramientas de depuración incrustados y se puede depurar visualmente en el IDE directamente.
Si se utiliza un IDE no es una opción para usted, sólo tiene que instalar de debug joya en su distribución JRuby y utilizarlo a través debugger comando:

  1. descargar manualmente el rubí-debug-base-0.10.3.1-java. gema desde debug-commons a un directorio local.
  2. Instalar la gema en su repositorio JRuby gema:
    jruby -S gem install -l ruby-debug-base-0.10.3.1-java.gem
  3. Instalar rubí joya-debug:
    jruby -S gem install --ignore-dependencies ruby-debug

El comando debugger debería funcionar ahora.

# test.rb 
require 'rubygems' 
require 'ruby-debug' 
debugger 
# run like this: 
jruby --debug -S rdebug test.rb 

Más información sobre Netbeans wiki, rdebug wiki y JRuby wiki

+0

Netbeans funciona bien para mí, con solo un poco de configuración requerida. ¡Gracias! –

+1

En JRuby 1.5+, todas las gemas necesarias se instalarán de forma predeterminada, por lo que no será necesario instalar nada (especialmente con opciones de línea de comandos no predeterminadas). Por lo tanto, la depuración funcionará en JRuby 1.5+ fuera de la caja. – vsizikov

1
require 'rubygems' 
require 'ruby-debug' 
debugger 
+0

Recibí "LoadError: no se carga ese archivo - ruby-debug" - ¿Quizás eso no funciona en JRuby? –

+0

Aparentemente JRuby no admite gemas con componentes de Ruby no nativos; Google presentó lo siguiente, pero no tengo idea si es bueno: http://debug-commons.rubyforge.org/ – bnaul

1

estoy usando JRuby 1.7.3 (1.9.3p385) en Windows 7.

Al contrario de lo que dice la gente, no lo hace no parece ser una versión de ruby-debug preinstalada con JRuby. Sin embargo, lo instalé ejecutando gem install ruby-debug. Empiezo el depurador en mi código como este:

require 'rubygems' 
require 'ruby-debug' 
debugger 

debe llamar al método debugger todas partes que quieren tener un punto de interrupción.

que corrían el código como el siguiente:

jruby --debug program.rb 

La opción --debug es opcional, pero sin que se obtiene una advertencia de que "el rastreo (por ejemplo set_trace_func) no capturar todos los eventos sin --debug bandera".

Otra respuesta aquí utilizó la opción -S rdebug en la línea de comandos. Esa opción no es necesaria para la depuración y hace que el depurador comience desde el comienzo de su programa.Simplemente llame al método debugger para iniciar el depurador cuando lo necesite; no uses esa opción

Incluso sin la gema ruby-debug, parece que todavía hay algún tipo de depuración básica integrada en JRuby a través del debug.rb. Simplemente escriba load 'debug.rb' en un archivo para iniciar el depurador. Imprime algunos mensajes no deseados ("Debug.rb" y "soporte de Emacs disponible") pero parece funcionar.

Cuestiones relacionadas