Hazy Idea Storage

エンジニアリング全般についての備忘録

【Rails】gemの中のコードに対してbinding.pryを仕込んでデバッグ

gemの中にbinding.pryを書いても、rails consoleの中でコードを実行するとbinding.pryは反応しない(ブレークポイントで止まってくれない) Rake Taskとして実行することでちゃんと止まってくれるようになるので、以下やり方を備忘録的にメモ

まずはpryするためにGemfileに以下を追加

group :development, :test do
  # Call 'byebug' anywhere in the code to stop execution and get a debugger console
  gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
  gem 'pry-rails'
  gem 'pry-byebug'
  gem 'pry-doc'
end

binding.pryを、ブレークポイントを仕込みたいファイルに記述(例としてsettinglogic.rbを記載しています)

# A simple settings solution using a YAML file. See README for more information.
class Settingslogic < Hash
  class MissingSetting < StandardError; end

...(中略)

      def method_missing(name, *args, &block)
          binding.pry #ブレークポイント
          instance.send(name, *args, &block)
      end

...

lib/task配下にrakeファイルを以下のように作成し、ブレークポイントを設置したコード部分を呼び出すタスクを書く

namespace :main do
  desc "settinglogic"
  task :task => :environment do
    result = Settings.cool
    p result
  end
end

あとは bundle exec rake main: をすれば目当てのブレークポイントで止まる。

$ bundle exec rake main:task

From: /Users/user/development/code_reading/vendor/bundle/ruby/2.6.0/gems/settingslogic-2.0.9/lib/settingslogic.rb:67 Settingslogic.method_missing:

    65: def method_missing(name, *args, &block)
    66:   binding.pry
 => 67:   instance.send(name, *args, &block)
    68: end

おわり