前回に引き続き、pryシリーズ第二弾。
今回は、目玉とも言えるデバッグでの使い方を紹介します。
導入
下記をGemfileに記述して bundle install
gem 'pry-byebug', group: :development
ブレークポイント
デバッグをしたい箇所(ブレークポイント)に下記を記述するだけです。
binding.pry
view内では以下のように記述します。
<% binding.pry %>
使い方
ブレークポイントの部分でpryコンソールが立ち上がります。
From: /app/app/controllers/admin/home_controller.rb @ line 10 Admin::HomeController#index: 4: def index 5: 6: array = ['hot', 'dog'] 7: 8: binding.pry 9: => 10: hogehoge = 'dog' 11: fugafuga = 'cat' 12: 13: set_user 14: end [1] pry(#<Admin::HomeController>)> array => ["hot", "dog"] [2] pry(#<Admin::HomeController>)> hogehoge => nil
ステップ実行
特定の処理のピンポイントで止めることができます。
ステップ実行に使えるコマンドを順に紹介します。
next
次の行へ
[1] pry(#<Admin::HomeController>)> next . . 10: hogehoge = 'dog' => 11: fugafuga = 'cat' 12: 13: set_user
step
次の行またはメソッドの内部へ
[1] pry(#<Admin::HomeController>)> step 25: def set_user => 26: @user = current_user 27: end
finish
現在のメソッドを抜ける
[1] pry(#<Admin::HomeController>)> finish From: /usr/local/bundle/gems/actionpack-5.0.4/lib/action_controller/metal/basic_implicit_render.rb @ line 4 ActionController::BasicImplicitRender#send_action: 3: def send_action(method, *args) => 4: super.tap { default_render unless performed? } 5: end
exit, continue, (Ctrl + D)
次のブレークポイントがある場合は、そこまで実行
なければpry終了
[1] pry(#<Admin::HomeController>)> exit 4: def index 5: 6: array = ['hot', 'dog'] 7: 8: binding.pry 9: 10: hogehoge = 'dog' 11: fugafuga = 'cat' 12: 13: set_user 14: binding.pry => 15: end
!!!
強制終了(プログラムも実行しない)
(即時にやめたい時)
次のブレークポイントがあっても終了
SystemExit at /admin exit
というエラー画面になります
まとめ
Model, View, Controller どこでも任意の場所でデバッグを容易にしてくれます。
一行ごと追っていけたり、メソッドの内部に入れたりするので
Railsの開発にはほぼマストだと思います。
今までなんとなくで使っていましたが、ちゃんと調べると知らなかったコマンド等があり勉強になりました。
参考
前回記事
pry-byebugでrubyをデバッグする Qiita
https://github.com/deivid-rodriguez/pry-byebug