プライデバッグ

pry デバッグの起動

デバッガを起動するには、binding.pry をコード内部のどこかに記述します。Rubyインタプリタがそのコードにぶつかると実行が停止し、コマンドを入力してプログラムの状態をデバッグすることができます。

PumaやSidekiqのような別のプロセスでコードをデバッグする場合は、binding.pry_shell 。その後、pry-shell実行ファイルを使用して、このセッションに接続できます。pry-shellの使用方法については、こちらのビデオをご覧ください。

caution
binding.pry を使用すると、オートロードのイシューが発生し、名前解決に失敗することがあります。必要であれば、より限定された機能セットでbinding.irb を代わりに使うことができます。

byebug vsbinding.pry vsbinding.irb

byebuggdb と非常によく似たインターフェイスを持っていますが、byebug は強力な Pry REPL を使っていません。

binding.pry は Pry を使いますが、byebug の機能の一部が欠けています。GitLabはpry-byebug gemを使います。このgemはbyebug の機能の一部をbinding.pry に持ってきているので、これを使うことで最もデバッグ能力が高まります。

byebug

コマンドの全リストはドキュメントをご覧ください。

Pry REPL はpry コマンドで起動できます。

pry

pry には多くの機能があり、このドキュメントではカバーしきれません。

また、help を pry セッションで実行すると、他に何ができるかを確認できます。

binding.irb

Ruby 2.7の時点で、IRBにはシンプルな対話型デバッガが同梱されています。

詳しくはドキュメントをご覧ください。

州ナビゲーション

ステート・ナビゲーションを使用すると、コード内を移動してメソッドなどを発見することができます:

# Change context
[1] pry(main)> cd Pry
[2] pry(Pry):1>

# Print methods
[2] pry(Pry):1> ls -m

# Find a method
[3] pry(Pry):1> find-method to_yaml

ソース閲覧

pry セッションからソースコードを参照します:

[1] pry(main)> $ Array#first
# The above is equivalent to
[2] pry(main)> cd Array
[3] pry(Array):1> show-source first

$show-source のエイリアスです。

ドキュメント閲覧

ソース・ブラウジングと似ているものに、ドキュメンテーション・ブラウジングがあります。

[1] pry(main)> show-doc Array#first

?show-doc のエイリアスです。

コマンド履歴

Control +Rコマンド履歴を検索できます。

ステップ

コードをステップスルーするには、以下のコマンドを使用します:

  • break:ブレークポイントの管理
  • step:次の行やメソッドにステップ実行します。複数回ステップ実行するには、オプションの数値引数を取ります。
  • next:同じフレーム内の次の行にステップオーバーします。また、複数回ステップするためにオプションの数値引数を取ります。
  • finish:現在のスタックフレームが戻るまで実行します。
  • continue:プログラムの実行を継続し、Pry セッションを終了します。

コールスタック・ナビゲーション

コールスタック内を移動するには、以下のコマンドを使用します:

  • backtrace:現在のスタックを表示します。左側の数字とframeコマンドを使ってスタックを移動できます。
  • up:スタックのフレームを上に移動します。複数のフレームを移動するには、オプションの数値引数を取ります。
  • down:スタックフレームを下に移動します。複数のフレームを移動するには、オプションの数値引数を取ります。
  • frame <n>:特定のフレームに移動します。引数なしで呼び出すと、現在のフレームを表示します。

ショートコマンド

byebug の代わりにbinding.pry を使用すると、snfc などのショートコマンドが機能しません。これらを再インストールするには、~/.pryrcに以下を追加してください:

if defined?(PryByebug)
  Pry.commands.alias_command 's', 'step'
  Pry.commands.alias_command 'n', 'next'
  Pry.commands.alias_command 'f', 'finish'
  Pry.commands.alias_command 'c', 'continue'
end

最後のコマンドを繰り返します。

次のスニペットを~/.pryrc に記述しておけば、Enter キーを押すだけで(例えばstepnextで)最後のコマンドを繰り返すことができます:

Pry::Commands.command /^$/, "repeat last command" do
  _pry_.run_command Pry.history.to_a.last
end

byebug はすぐにこれをサポートします。