Подтвердить что ты не робот

Как отлаживать рубиновый код?

Я запускаю Ubuntu 10.10. Я просто хочу отладить простой script. Проведя полдня, пытаясь понять, как это можно сделать, я сдаюсь. Какого черта я должен был сделать?

Я установил ruby-dev из репозитория Ubuntu
Я запустил sudo gem install ruby-debug и sudo gem install ruby-debug-ide

Я пробовал несколько разных способов сделать эту работу. Я попробовал require 'ruby-debug', а затем установил debugger где-то в коде. Но Ruby не найдет ruby-debug.
Я попытался настроить vim-ruby-debugger, для выполнения :Rdebugger myScript.rb потребуется возраст, и позволит мне установить точки останова, но, похоже, не существует способа выполнить мой код с помощью этого отладчика.
И я попытался использовать NetBeans, который просто разбивался каждый раз, когда я настраивал проект и щелкал что угодно.

Итак, уважаемое сообщество: Должен быть способ отладки Ruby. Не рельсы. Ничего особенного. Просто CLI script. Пожалуйста, помогите мне или я потеряю то, что осталось от моего здравомыслия.

Edit: gem exec dir не был на моем пути. Итак, по крайней мере rdebug, похоже, теперь работает.

4b9b3361

Ответ 1

Ruby-debug для 1.8+, а ruby-debug19 - для 1.9 +.

ruby-debug прост в освоении и очень полезен. Вы можете сказать, что приложение запускается до тех пор, пока не будет определено какое-либо условие, затем переломите его, чтобы было легко найти нулевые значения или другие условия, возникающие спорадически.

В командной строке используйте rdebug appname, и вы попадете в приглашение отладчика. Если вы хотите перейти к строке 100 и остановить, вы можете ввести c 100, и отладчик установит временную точку прерывания, программа запустится и остановится там, если она находится в пути выполнения. Как только он остановится, временная точка останова будет очищена. Если вы всегда хотите остановиться в строке 100, вы можете сделать b 100, затем c, и отладчик установит постоянную точку останова, продолжит, а затем остановится, когда достигнет точки останова. Вы можете очистить точки останова, установить условные, которые возникают, когда применяются определенные условия, и т.д. Вы можете ввести n, чтобы перейти к следующей инструкции, пропуская вызовы подпрограмм или s, чтобы войти в них. Существуют команды для отображения содержимого переменных по-разному, поэтому читайте документы.

Изнутри rdebug вы можете попасть в оболочку IRB с уже заполненными вами переменными, чтобы вы могли сунуть вещи, чтобы узнать, что происходит. Изнутри вы можете проверить или установить значения, помогая с настройками "что-если". Если вы сделаете это изнутри rdebug, вы можете продолжить программу с измененными значениями и посмотреть, как она себя ведет.

IRB имеет свое место, и он отлично подходит для пробных вещей, но это не замена отладчика, так же как отладчик может делать некоторые вещи IRB-ish, но не заменит его. Оба инструмента являются хорошей комбинацией и избивают из-за того, что они полагаются на заявления печати или сбрасываются в файл журнала.


Pry стал отличной комбинацией IRB и отладчик, и стоит изучить.

Ответ 2

pry лучше по сравнению с IRB. Ниже перечислены его README.

Pry - мощная альтернатива стандартной оболочке IRB для Ruby. Он написан с нуля, чтобы предоставить ряд дополнительных функций, в том числе:

  • Просмотр исходного кода (включая источник ядра C с драгоценным камнем pry-doc)
  • Просмотр документации
  • Система Live Help
  • Откройте методы в редакторах (метод класса-метода редактирования-метода)
  • Подсветка синтаксиса
  • Интеграция командной оболочки (запуск редакторов, запуск git и грабли из Pry)
  • Интеграция Gist
  • Навигация вокруг состояния (cd, ls и friends)
  • Вызов времени выполнения (используйте Pry в качестве консоли разработчика или отладчика)
  • Поддержка экзотических объектов (экземпляры BasicObject, классные классы,...)
  • Мощная и гибкая система команд
  • Возможность просмотра и воспроизведения истории

  • Многие удобные команды, вдохновленные IPython, Smalltalk и другими расширенными REPL

  • Широкое количество плагинов, которые предоставляют удаленные сеансы, полную функциональность отладки и т.д.

Pry также стремится быть более чем заменой IRB; это попытка внедрить программирование на языке REPL на язык Ruby. В настоящее время это не так сильно, как инструменты, такие как SLIME для lisp, но это общее направление Pry.

Pry также довольно гибкий и позволяет значительно настраивать пользовательскую настройку, чтобы настроить его на чтение с любого объекта, который имеет метод readline, и записывать на любой объект, который имеет метод puts - многие другие аспекты Pry также настраиваются, что делает его хороший выбор для реализации пользовательских оболочек.

Ответ 3

  • В Ruby:

    ruby ​​-rdebug myscript.rb Затем,

    • b: поставить точку останова
    • и n (ext) или s (tep) и c (ontinue)
    • p (uts) для отображения
  • В Rails: запустите сервер с помощью

    • script/server --debugger

      и добавьте отладчик в код.

Ответ 4

Лучший отладчик, который я когда-либо использовал для Ruby, был встроен в Netbeans. Вам необходимо установить быструю рубиновую отладчику из Netbeans (я не уверен, какой камень это на самом деле, но Netbeans предлагает вам сделать это). Я считаю, что он работает намного лучше, если вы отключите Netbeans от встроенного JRuby 1.4 до вашей стандартной установки Ruby по умолчанию. Кроме того, полезен и драгоценный камень breakpoint, который стоит взглянуть и использовать встроенную библиотеку Ruby logger с самого начала вашей разработки. Удачи!

Ответ 5

Используйте IRB. Это интерактивная оболочка Ruby. Когда возникают ошибки, он дает трассировку с номерами строк, чтобы вы могли определить, какая часть вашего кода пошла не так. Вы можете load ваши исходные файлы и запускать отдельные методы, чтобы убедиться, что они работают правильно. IRB предоставляет полезный результат - при вводе некоторого кода он будет оценивать выражение, а затем печатать возвращаемое значение с помощью .inspect.

Ответ 6

Вы можете видеть, что обложка Cheat работает

  gem install cheat
  cheat rdebug

Это покажет полезные команды для использования rdebug.

Ответ 7

Попробуйте использовать Ruby Debugger по умолчанию:

ruby -r debug filename[, ...] 

Или, если это CLI script, просто измените его первую строку:

#!/usr/bin/env ruby

в

#!/usr/bin/env ruby -rdebug

и script остановится на каждом Исключении.

Или проверьте следующий пример script:

#!/usr/bin/env ruby
class Hello
   def initialize( hello )
      @hello = hello
   end
   def hello
      @hello
   end
end

salute = Hello.new( "Hello, Mac!" )
puts salute.hello

Вы можете отлаживать его, как показано ниже:

# ruby -r debug hello.rb
Debug.rb
Emacs support available.

hello.rb:3:class Hello
(rdb:1) v l
  salute => nil
(rdb:1) b 10
Set breakpoint 1 at hello.rb:10
(rdb:1) c
Hello, Mac!

Источник: Ruby Debugger


В качестве альтернативы используйте lldb/gdb. Ниже приведен простой пример для печати script backtrace на передний план:

echo 'call (void)rb_backtrace()' | lldb -p $(pgrep -nf ruby)

Замените lldb на gdb, если он работает лучше. Префикс с sudo для отладки не принадлежащего ему процесса.

Ответ 8

Отладка Ruby имеет сложную историю, заваленную инструментами, которые поддерживают только небольшую версию MRI. К счастью, для 2.0 и далее вы можете использовать byebug.

Использование командной строки прост: запустите byebug <your script>. Вы также можете отредактировать свой файл и отбросить вызов функции byebug там, где вы хотите начать отладку.