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

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

194 голосов
/ 05 ноября 2011

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

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

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

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

Ответы [ 9 ]

375 голосов
/ 27 июня 2012

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

exit-program

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

!!!
101 голосов
/ 12 февраля 2014

Я использую:

disable-pry

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

30 голосов
/ 14 августа 2013

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

exit!

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

22 голосов
/ 18 ноября 2014

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

17 голосов
/ 25 июля 2014

Использование

disable-pry

Для сдачи в аренду, добавьте это в свой контроллер

ENV['DISABLE_PRY'] = nil
14 голосов
/ 05 ноября 2011

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

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

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

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

1 голос
/ 15 июня 2018

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

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

Я просто хочу поделиться простым глупым трюком, которым я лично пользуюсь, чтобы не беспокоиться о переменной окружения 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
0 голосов
/ 29 мая 2019

нажмите 'q', и вы увидите вот так

[1] pry(#<AlbumsController>)>

type

exit

это одно слово подойдет, если нет:

control + c
0 голосов
/ 07 октября 2018

Используя gem pry-moves вы можете выйти из цикла, используя f (команда финиша)


пример:

    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
...