2010-03-24 3 views
6

Je me familiarise avec du code JRuby, et j'aimerais pouvoir placer un point d'arrêt dans le code et exécuter (comme d'habitude) depuis la ligne de commande, en le faisant entrer dans le débogueur quand cela arrive point. Y a-t-il quelque chose que je peux mettre dans mon code pour forcer JRuby à entrer dans le débogueur?Que dois-je mettre dans mon code Ruby (JRuby) pour entrer dans le débogueur?

J'ai essayé d'exécuter jruby -r debug foo.rb (au lieu de l'habituel jruby foo.rb), puis de définir un point d'arrêt avec b bar.py:98, puis de continuer. Mais le débogueur s'arrête chaque fois qu'il y a une exception, et il semble qu'il y en ait beaucoup avant d'atteindre la ligne de code qui m'intéresse. J'aimerais pouvoir mettre le "break-into-debugger" ligne (s) dans mon code et exécuter jruby foo.rb et avoir la première place le débogueur s'arrête à cette ligne.

(ie je suis à la recherche de l'équivalent Ruby/JRuby de import pdb;pdb.set_trace() en Python.)

Répondre

5

Vous pouvez essayer NetbeansRuby IDE, il a interprète JRuby et des outils de débogage intégrés et vous pouvez déboguer visuellement dans la IDE directement.
Si vous utilisez un IDE est pas une option pour vous, il suffit d'installer de debug bijou dans votre JRuby et distro utiliser via debugger commande:

  1. télécharger manuellement le ruby-debug-base-0.10.3.1-java. gem de debug-commons à un répertoire local.
  2. Installez le Gem dans votre dépôt JRuby Gem:
    jruby -S gem install -l ruby-debug-base-0.10.3.1-java.gem
  3. gem-debug Installation rubis:
    jruby -S gem install --ignore-dependencies ruby-debug

La commande debugger devrait maintenant fonctionner.

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

Plus d'informations sur Netbeans wiki, rdebug wiki et JRuby wiki

+0

Netbeans fonctionne bien pour moi, avec seulement un tout petit peu de configuration requise. Merci! –

+1

Dans JRuby 1.5+, toutes les gemmes requises seront installées par défaut, il n'y aura donc pas besoin d'installer quoi que ce soit (en particulier avec des options de ligne de commande autres que celles par défaut). Ainsi, le débogage fonctionnera dans JRuby 1.5+ dès la sortie de la boîte. – vsizikov

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

J'ai obtenu "LoadError: aucun fichier de ce type à charger - ruby-debug" - peut-être que cela ne fonctionne pas dans JRuby? –

+0

Apparemment, JRuby ne supporte pas les gemmes avec des composants Ruby non natifs; Google a révélé ce qui suit, mais je ne sais pas si c'est bon: http://debug-commons.rubyforge.org/ – bnaul

1

J'utilise JRuby 1.7.3 (1.9.3p385) sur Windows 7.

Contrairement à ce que les gens disent, il ne pas semble être une version de ruby-debug préinstallé avec JRuby. Cependant, je l'ai installé en exécutant gem install ruby-debug. Je commence le débogueur dans mon code comme ceci:

require 'rubygems' 
require 'ruby-debug' 
debugger 

Vous devez appeler la méthode debugger partout que vous voulez avoir un point d'arrêt.

Je courais le code comme ceci:

jruby --debug program.rb 

L'option --debug est facultative, mais sans elle, vous obtenez un avertissement que « le dépistage (par exemple set_trace_func) ne sera pas capturer tous les événements sans --debug drapeau ».

Une autre réponse ici utilise l'option -S rdebug sur la ligne de commande. Cette option n'est pas nécessaire pour le débogage et le débogueur démarre au tout début de votre programme.Appelez simplement la méthode debugger pour démarrer le débogueur lorsque vous en avez besoin; n'utilisez pas cette option.

Même sans la gemme ruby-debug, il semble qu'il existe encore un type de débogage de base intégré à JRuby via debug.rb. Vous pouvez simplement écrire load 'debug.rb' dans un fichier pour démarrer un débogueur. Il affiche quelques messages junky ("Debug.rb" et "Emacs support available.") Mais cela semble fonctionner.

Questions connexes