web-dev-qa-db-ja.com

Ruby Pryでループから抜け出すにはどうすればよいですか?

RailsアプリケーションでPryを使用しています。モデルのループ内でbinding.pryを設定して、問題をデバッグしようとしました。例えば:

(1..100).each do |i|
  binding.pry
  puts i
end

quitと入力すると、次の反復に進み、再び停止します。ループから抜け出す方法はありますので、quitを100回入力する必要はありませんか?

現在、私はそれから抜け出す方法を知っている唯一の方法は、使用することです CTRL+C アプリケーションを再起動します。

194
Ryan

Pryを無条件に終了するには、次を入力します

exit-program

@ Nickのコメントから編集:動作する:

!!!
378
Evandro

私が使う:

disable-pry

これにより、プログラムは実行されますが、実行を停止し続けることはできなくなります。これは、コンソールでデバッグするときに特に役立ちます。

102
stebooks

すべてを終了するには、次を使用します。

exit!

これは、進行中のすべてのバインディングを無視する必要があります。

30
Blake

三重感嘆符(!!!)がそうします。

23
Hahn

つかいます

disable-pry

レンタルするには、これをコントローラーに追加します

ENV['DISABLE_PRY'] = nil
17
Chet3x16

binding.pryステートメントは、GDBのブレークポイントとまったく同じです。 GDBのこのようなブレークポイントも100回ヒットします。

ループの最初の反復でbinding.pryを1回だけヒットさせる場合は、binding.pryの条件を次のように使用します。

(1..100).each do |i|
  binding.pry if i == 1
  puts i
end

次に、exitと入力するだけで、現在のセッションを終了します。

14
horseyguy

上記の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
1
zinovyev

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
0

「q」を押すと、このように表示されます

[1] pry(#<AlbumsController>)>

タイプ

exit

そうでない場合、この1つのWordが行います。

control + c
0
Heartless Vayne