Что я вставлю в свой код Ruby (JRuby), чтобы взломать отладчик? - PullRequest
6 голосов
/ 24 марта 2010

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

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

(т.е. я ищу Ruby / JRuby эквивалент import pdb;pdb.set_trace() в Python.)

Ответы [ 3 ]

5 голосов
/ 24 марта 2010

Вы можете попробовать Netbeans Ruby IDE , в него встроены интерпретатор и инструменты отладки JRuby, и вы можете визуально отлаживать в IDE напрямую. Если вы не можете использовать IDE, просто установите de debug gem в свой дистрибутив JRuby и используйте его с помощью команды debugger:

  1. Вручную загрузите ruby-debug-base-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. Установить гем ruby-debug:
    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

1 голос
/ 17 апреля 2013

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

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

require 'rubygems'
require 'ruby-debug'
debugger

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

Я запустил код так:

jruby --debug program.rb

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

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

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

1 голос
/ 24 марта 2010
require 'rubygems'
require 'ruby-debug'
debugger
...