2010-03-24 3 views
6

Я познакомился с некоторым кодом JRuby, и я хотел бы разместить точку останова в коде и запустить (как обычно) из командной строки, запустив его в отладчик, когда он доберется до этого точка. Есть ли что-то, что я могу добавить в свой код, чтобы заставить JRuby проникнуть в отладчик?Что мне помещать в свой код Ruby (JRuby), чтобы проникнуть в отладчик?

Я пробовал работать jruby -r debug foo.rb (вместо обычного jruby foo.rb), а затем установил точку останова с b bar.py:98, а затем продолжал. Но отладчик останавливается каждый раз, когда есть исключение, и, похоже, их много, прежде чем он попадает в строку кода, в которой я заинтересован. Я бы хотел, чтобы я смог установить «break-in-debugger», строки в моем коде и запустите jruby foo.rb и на первом месте отладчик остановится в этой строке.

(то есть я ищу эквивалент Руби/JRuby из import pdb;pdb.set_trace() в Python.)

ответ

5

Вы можете попробовать NetbeansRuby IDE, он имеет JRuby интерпретатор и средства отладки встроенных и вы можете отлаживать визуально в IDE напрямую.
При использовании IDE не вариант для вас, просто установите де debug драгоценный камень в свой JRuby дистрибутив и использовать его с помощью команды: debugger

  1. вручную загрузить рубиново-Debug-бейс-0.10.3.1-Java. gem от debug-commons до местного каталога.
  2. Установите Gem в репозиторий JRuby Gem:
    jruby -S gem install -l ruby-debug-base-0.10.3.1-java.gem
  3. Установить рубиново-отладки камень:
    jruby -S gem install --ignore-dependencies ruby-debug

Команда debugger должна работать.

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

Более подробную информацию о Netbeans wiki, rdebug wiki и JRuby wiki

+0

Netbeans работает хорошо для меня, и требуется лишь небольшая конфигурация. Благодаря! –

+1

В JRuby 1.5+ все необходимые драгоценные камни будут установлены по умолчанию, поэтому нет необходимости устанавливать что-либо (например, с параметрами командной строки, отличными от параметров по умолчанию). Таким образом, отладка будет работать в JRuby 1.5+ из коробки. – vsizikov

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

У меня есть «LoadError: нет такого файла для загрузки - ruby-debug» - возможно, это не работает в JRuby? –

+0

По-видимому, JRuby не поддерживает никаких драгоценных камней с не-родными компонентами Ruby; Google включил следующее, но я понятия не имею, хорошо ли это: http://debug-commons.rubyforge.org/ – bnaul

1

Я использую JRuby 1.7.3 (1.9.3p385) на Windows 7.

Вопреки тому, что говорят люди, есть ли не похоже, является версией ruby-debug, предварительно установленной с JRuby. Однако я установил его, запустив gem install ruby-debug. Я начинаю отладчик в моем коде, как это:

require 'rubygems' 
require 'ruby-debug' 
debugger 

Вы должны вызвать метод debugger везде, что вы хотите иметь контрольную точку.

Я побежал код вроде этого:

jruby --debug program.rb 

Опция --debug является необязательной, но без него вы получите предупреждение, что «трассировка (например, set_trace_func) не будет фиксировать все события без --debug флага».

В другом ответе здесь используется опция -S rdebug в командной строке. Эта опция не требуется для отладки, и она запускает отладчик в самом начале вашей программы.Просто вызовите метод debugger, чтобы запустить отладчик, когда он вам нужен; не используйте эту опцию.

Даже без рубинового отладочного камня кажется, что в JRuby есть какая-то базовая отладка через debug.rb. Вы можете просто написать load 'debug.rb' в файл, чтобы начать отладчик. Он распечатывает несколько сообщений junky («Debug.rb» и «Доступна поддержка Emacs»), но, похоже, это работает.