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

Лучший способ отладки сторонних драгоценных камней в рубине

Поскольку внутри рубинового драгоценного камня может быть много методов Ghost, я не думаю, что это хорошая идея изучить внутренний механизм рубинового драгоценного камня, просто прочитав его исходный код статически, Есть ли способ прикрепить исходный файл камня третьей части к выполняемому рубиновому процессу для отладки, чтобы я мог установить точку останова и посмотреть, как все работает динамически?
BTW, я попытался перейти к исходному файлу камня третьей части в RubyMine, нажав контекстное меню "Go To- > Implementations" оператора "require" или другой символ драгоценного камня третьей части (require 'watir' например), без успеха. Это нормально для среды IDE динамического языка ввода, например Ruby, для отказа от навигации по символам?

4b9b3361

Ответ 1

Я хотел бы знать, есть ли лучший способ сделать это, но как я обычно это делаю:

  • Добавьте рубиновый отладочный камень в свой Gemfile (или ruby-debug19, если вы на Ruby 1.9.2)
  • Найдите драгоценный камень, выполнив bundle show gemname. Я нахожусь на Mac, поэтому я обычно подключаю его к pbcopy, поэтому он копируется в буфер обмена. bundle show rails | pbcopy
  • Откройте папку gem в своем любимом редакторе. mvim /path/to/gem/directory
  • Перейдите к файлу и строке, где вы хотите поместить точку останова *, и вставьте debugger над соответствующей строкой.
  • Загрузите страницу, запустите тест или сделайте все, что угодно, чтобы запустить файл Gem.
  • Когда выполнение останавливается в отладчике, вы можете проверять переменные (p variable_name) и перемещаться по строкам с помощью команд ruby ​​debugger.

* Знание того, где поставить точку останова, может немного понять код, но вы должны начать с lib/gemname.rb

Ответ 2

Я бы не стал редактировать файлы Gem, как это предлагается в принятом в настоящее время ответе. Вместо этого поместите команду debugger в один из ваших файлов приложений и используйте команду break, чтобы установить точку останова в драгоценном камне. Я использую rvm с gemset, так вот как я это делаю:

break /Users/chris/.rvm/gems/[email protected]<gemset>/gems/<gem_name>-<gem-version>/<path_to_file>:<line_number>

Ответ 3

В языках, которые изменяют код во время выполнения, например Ruby, трудно точно прогнозировать 100% истоков символов, методов и т.д.

Я имею дело с большим количеством сторонних камней, которые нуждаются в анализе исходного кода, и я обнаружил, что лучшим инструментом для этой задачи является Netbeas + его плагины Ruby и Rails.

  • обеспечивает хорошую навигацию в исходном коде зависимых камней (в отличие от других альтернатив)
  • визуальные точки останова и отладка, которые фактически работают (со следами и всеми) **

** у него есть некоторые сбои с вызовами метода в упущенных блоках кода (например, каждый {}), но я научился справляться с этими

Обычно я устанавливаю точки останова и анализирую код во время выполнения.