Как подключить отладчик Rubymine IDE к процессу оболочки?

Я хочу использовать отладчик IDE Rubymine для отладки процесса ruby, запущенного в командной оболочке, по мере его появления, например по "рельсовой консоли".

Я получил много пользы от отладчика при запуске веб-сервера (из Rubymine) или тестовых наборов (также работающих из Rubymine).

Однако, если процесс запускается не Rubymine, я не понимаю, как подключить отладчик.

Я использую версию Rubymine 3.2.4 в Ubuntu с Sun Java 1.6.0_26, Ruby REE 1.8.7 и последними гемами отладки:

ruby-debug-base (0.10.4)
ruby-debug-ide (0.4.17.beta8)

Мысли?


person Wolfram Arnold    schedule 16.01.2012    source источник
comment
Я думаю, что в заголовке вашего вопроса отсутствует глагол.   -  person David Grayson    schedule 17.01.2012
comment
@DavidGrayson, спасибо - ты прав. Фиксированный.   -  person Wolfram Arnold    schedule 17.01.2012


Ответы (3)


Используйте тип конфигурации Ruby Remote Debug в RubyMine. Дополнительные сведения см. В официальной документации RubyMine.

Обычно вы запускаете сценарий так:

rdebug-ide --port <port number> -- script.rb

а затем подключитесь к указанному порту из отладчика RubyMine.

person CrazyCoder    schedule 16.01.2012
comment
Спасибо @CrazyCoder, который сработал, после того, как я немного разобрался в своем замешательстве: 1. Запустите из командной строки команду rdebug-ide, например для отладки rails console сеанса оболочки он будет читать: rdebug-ide --port 1234 -- rails console. 2. В RubyMine используйте редактор конфигурации запуска и создайте новую конфигурацию удаленной отладки Ruby, используя тот же порт (здесь 1234) и удаленный путь, установленный в рабочий каталог, затем нажмите кнопку отладки, и это вызовет оболочку для инициализации, в то время как источники могут быть определены в RubyMine. Очень признателен! - person Wolfram Arnold; 17.01.2012

Вот как это делается в Rails:

Сначала убедитесь, что у вас установлено rdebug-ide:

gem install ruby-debug-ide --platform=ruby

Затем запустите это в консоли:

rdebug-ide --port 6778 -- /projects/your_rails_project/script/rails console

или для рельсов 4.0+

rdebug-ide --port 6778 -- /projects/your_rails_project/bin/rails console

Или, как упомянул @ChristopherWill, ниже, вы можете передать параметр --host, если хотите отлаживать нелокальный сервер. (Прочтите его комментарий ниже для предостережений)

Это будет ждать подключения клиентов удаленной отладки.

  1. Нажмите «Выполнить»> «Изменить конфигурации» в RubyMine, затем добавьте экземпляр «Удаленная отладка Ruby».

  2. Используйте тот же порт, что и выше 6778 (если вы измените порт выше, убедитесь, что порты совпадают)

  3. Корневая папка и локальная корневая папка одинаковы, / projects / your_rails_project

  4. Нажмите «Применить» и закройте.

Затем выберите эту конфигурацию из списка рядом с кнопками запуска и отладки, затем нажмите кнопку отладки. Подождите несколько секунд, и консоль запустит «консоль rails», где бы вы ни запускали «rdebug-ide».

person Abdo    schedule 11.06.2012
comment
Спасибо, но на самом деле это больше не работает в Rails 3.2, потому что rails console теперь порождает отдельный процесс, а отладчик RubyMine IDE еще не может обрабатывать многопроцессорную отладку, хотя они предположительно включают это в следующий выпуск RubyMine. - person Wolfram Arnold; 12.06.2012
comment
В настоящий момент я отлаживаю приложение rails 3.2.2 (ruby 1.9.3p194) с помощью RubyMine 4.0.3. Когда я попытался запустить boot.rb (с помощью rdebug-ide), процесс сразу же запустился и остановился. Однако у меня это сработало, когда я использовал приведенную выше команду. - person Abdo; 12.06.2012
comment
Вы можете без проблем запустить процесс, но я не думаю, что вы можете заставить его останавливаться на точках останова, потому что исполняемый файл rails порождает фоновый процесс, который не отслеживается. И вся моя причина запустить его в отладчике в первую очередь - установить точки останова. youtrack.jetbrains.com/issue/RUBY-10967 - person Wolfram Arnold; 12.06.2012
comment
Моя останавливается на точках останова, и все работает, как ожидалось. Может быть, потому, что у меня есть этот код в моем development.rb? Silence_warnings действительно begin require 'pry' Rails :: Console :: IRB = Pry rescue LoadError rescue end end - person Abdo; 13.06.2012
comment
Ах, возможно, поведение Прая другое. Я не пробовал. Но полезно знать. - person Wolfram Arnold; 13.06.2012
comment
Потрясающие. После бесконечных часов борьбы, эти шаги позволили мне наконец запустить удаленную отладку с помощью IntelliJ (Ruby 4.0.3.20120406), ruby-debug-ide 0.4.17.beta9 и ruby-debug-base 0.11. Работает как часы. Но знает ли кто-нибудь, как отлаживать приложение, к которому обращается браузер (и без указания какого-либо сценария непосредственно в качестве параметра rdebug-ide)? - person Christopher Will; 15.11.2012
comment
@Christopher, вы имеете в виду веб-приложение? Если так, то это самый простой вариант! Если это первый раз, в Run ›Edit Configurations нажмите Rails, затем нажмите кнопку +. У вас могут возникнуть проблемы с SDK, поэтому выберите SDK, который вы используете при выполнении rails server. После нажатия кнопки «Применить» в следующий раз, когда вы нажмете «Отладка», он будет использовать эту конфигурацию (учитывая, что она единственная). Если у вас есть другие конфигурации, вы можете щелкнуть раскрывающийся список и выбрать только что созданный файл config. =) Если мой ответ оказался полезным, не забудьте проголосовать за него! :-) - person Abdo; 15.11.2012
comment
@Abdo Это хорошо работает для локальной отладки HTTP, но не для удаленной. Я хочу, чтобы моя IDE использовала среду, в которой установлена ​​моя виртуальная машина. И вот тут-то и становится небрежно. Но вчера я нашел для этого (не идеальное, но приемлемое) решение. Я могу передать сервер WEBrick как rdebug-ide. rdebug-ide --port 1234 --host 192.168.56.101 -- /my/remote/path/script/rails server -p 3000 После запуска удаленной отладки в моей среде IDE она фактически останавливается на моих точках останова. Единственным недостатком является то, что я должен передавать порт (3000) всем моим HTTP-запросам ... но все же лучше, чем ничего. - person Christopher Will; 16.11.2012
comment
Хорошее решение! Если вы не хотите продолжать передавать номера портов, вы можете использовать nginx в качестве прокси, и все готово :-) - person Abdo; 16.11.2012

Я действительно хочу опубликовать здесь что-то, на что очень сложно найти полный ответ, и мне потребовалось очень много времени, чтобы понять. Есть люди, которые спрашивают, как подключить удаленную отладку к resque worker, и вот правильный способ, который наконец-то работает для меня. Эта статья пользуется популярностью в поиске Google, и ее будет легко найти.

FROM SHELL на сервере (для меня это мой ноутбук) выполните это из корня вашего сайта: rdebug-ide --port 1236 --dispatcher-port 26166 --host 0.0.0.0 bin / rake resque: work QUEUE = *

в RubyMine IDE настройте удаленную отладку с помощью: Удаленный хост: 127.0.0.1 Удаленный порт: 1236 Удаленная корневая папка: путь на сервере к корню сайта Локальный порт: 26166 Локальный корневой путь: путь на вашей рабочей станции к корневому файлу, в котором вы должны установить точки останова ( в моем случае это все локально, поэтому все 1 путь и 1 копия файлов)

Запустите свой веб-сервер как обычно с помощью: rails s

установите точку останова в своем Resque worker и попытайтесь выполнить все, что вам нужно на своем сайте, чтобы добраться до этой точки останова.

1 примечание - наличие "весеннего" драгоценного камня дало мне ошибки, и мне пришлось закомментировать его / bundle.

person Chris P    schedule 31.10.2015