it-roy-ru.com

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

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

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

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

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

193
Ryan

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

exit-program
362
Evandro

Я использую:

disable-pry

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

95
stebooks

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

exit!

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

30
Blake

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

22
Hahn

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

disable-pry

Чтобы сдать в аренду, добавьте это в свой контроллер

ENV['DISABLE_PRY'] = nil
16
Chet3x16

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

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

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

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

14
horseyguy

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

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

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

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

[1] pry(#<AlbumsController>)>

тип

exit

это одно Слово будет делать, если нет:

control + c
0
Heartless Vayne