RailsアプリケーションでPryを使用しています。モデルのループ内でbinding.pry
を設定して、問題をデバッグしようとしました。例えば:
(1..100).each do |i|
binding.pry
puts i
end
quit
と入力すると、次の反復に進み、再び停止します。ループから抜け出す方法はありますので、quit
を100回入力する必要はありませんか?
現在、私はそれから抜け出す方法を知っている唯一の方法は、使用することです CTRL+C アプリケーションを再起動します。
Pryを無条件に終了するには、次を入力します
exit-program
@ Nickのコメントから編集:動作する:
!!!
私が使う:
disable-pry
これにより、プログラムは実行されますが、実行を停止し続けることはできなくなります。これは、コンソールでデバッグするときに特に役立ちます。
すべてを終了するには、次を使用します。
exit!
これは、進行中のすべてのバインディングを無視する必要があります。
三重感嘆符(!!!
)がそうします。
つかいます
disable-pry
レンタルするには、これをコントローラーに追加します
ENV['DISABLE_PRY'] = nil
binding.pry
ステートメントは、GDBのブレークポイントとまったく同じです。 GDBのこのようなブレークポイントも100回ヒットします。
ループの最初の反復でbinding.pry
を1回だけヒットさせる場合は、binding.pry
の条件を次のように使用します。
(1..100).each do |i|
binding.pry if i == 1
puts i
end
次に、exit
と入力するだけで、現在のセッションを終了します。
上記の2つの以前の回答に基づいて:
君たちありがとう!あなたのアドバイスは私を本当に助けてくれました!
DISABLE_PRY
環境変数を常に心配しないために個人的に使用する単純な愚かなトリックを共有したいだけです。このコールバックをプロジェクトのベースコントローラApplicationController
に永続的に追加します。 disable-pry
が呼び出されるたびに、PRYが自動的に再度有効になります。
# app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
before_action :reenable_pry
private
def reenable_pry
ENV['DISABLE_PRY'] = nil
end
end
Gem pry-moves
を使用すると、f
(finishコマンド)を使用してループを抜けることができます
例:
42: def test
43: 3.times do |i|
=> 44: binding.pry
45: puts i
46: end
47: puts :finish
48: end
[1] pry(main)> f
0
1
2
Frame: 0/1 method
From: playground/sand.rb:47 main
42: def test
43: 3.times do |i|
44: binding.pry
45: puts i
46: end
=> 47: puts :finish
48: end
「q」を押すと、このように表示されます
[1] pry(#<AlbumsController>)>
タイプ
exit
そうでない場合、この1つのWordが行います。
control + c