Как выйти из цикла с Ruby Pry?

Я использую Pry с моим Rails-приложением. Я установил binding.pry внутри цикла в моей модели, чтобы попробовать и отладить проблему. Например:

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

Когда я набираю quit, он переходит к следующей итерации и снова останавливается. Есть ли способ выйти из цикла, поэтому мне не нужно набирать quit 100 раз?

В настоящее время единственный способ узнать, как выйти из него, - это использовать CTRL + C и перезапустить приложение.

Ответ 1

Чтобы выйти из Pry безоговорочно, введите

exit-program

Редактировать из @Nick комментарий: Также работает:

!!!

Ответ 2

Я использую:

disable-pry

Это приведет к тому, что программа будет запущена, но не позволит продолжить выполнение. Это особенно полезно при отладке консоли.

Ответ 3

Чтобы выйти из всего, используйте:

exit!

Это должно игнорировать все существующие привязки.

Ответ 4

Тройное восклицание (!!!) сделает это.

Ответ 5

Используйте

disable-pry

Чтобы переименовать, добавьте это в свой контроллер.

ENV['DISABLE_PRY'] = nil

Ответ 6

Оператор

A binding.pry точно такой же, как точка останова в GDB. Такая точка останова в GDB также будет удалена 100 раз.

Если вы хотите, чтобы binding.pry ударялся один раз, для первой итерации цикла, используйте условное выражение для binding.pry следующим образом:

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

Затем вы выходите из текущего сеанса, просто набрав exit.

Ответ 7

Основываясь на двух предыдущих ответах выше:

Спасибо вам, ребята! Ваши советы очень помогли мне!

Я просто хочу поделиться простым глупым трюком, который я лично использую, чтобы не беспокоиться о переменной окружения DISABLE_PRY все время. Добавьте этот обратный вызов в базовый контроллер ApplicationController вашего проекта навсегда. Он автоматически включит PRY каждый раз, когда вызывается disable-pry:

# app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
  before_action :reenable_pry

  private

  def reenable_pry
    ENV['DISABLE_PRY'] = nil
  end
end

Ответ 8

Используя 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