Ruby Pry ile bir döngüden nasıl çıkabilirim?


212

Pry uygulamasını Rails uygulamamla kullanıyorum. binding.pryBir sorunu denemek ve hata ayıklamak için modelimde bir döngü içine ayarladım . Örneğin:

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

Ben yazarken quit, bir sonraki yineleme gider ve tekrar durur. Ben quit100 kez yazmak zorunda değilsiniz bu yüzden döngü dışına adım bir yolu var mı ?

Şu anda nasıl çıkacağımı bilmenin tek yolu CTRL+ kullanmak Cve uygulamayı yeniden başlatmaktır.

Yanıtlar:


413

Pry'den koşulsuz olarak çıkmak için şunu yazın

exit-program

@ Nick'in yorumundan düzenle : Ayrıca çalışıyor:

!!!

Teşekkürler @Evandro, tam da aradığım şey bu!
Ryan

Açıkçası bağlamayı hemen vuracak olsanız da, sadece kullanmak exitprogramın çalışmaya devam etmesine izin verecektir.
AJP

1
Bu koşarken benim için işe yaramadı rspec. Ancak CTRL-C, iki kez yaptı.
Eric Walker

5
Mac OSX'te, Ctrl + Ciki kez basmak Pry oturumunu öldürür, ancak aynı zamanda bu terminal penceresini etkili bir şekilde öldürür: sonraki çıkış, o terminal sekmesini kapatıp yeni bir pencereye geçmem gereken şekilde aksaklık yapar. Ancak !!!bu ağırlaştırıcı etkisi yoktur.
Topher Hunt

@Evandro Bunun beni nasıl kurtardığı hakkında hiçbir fikrin yok!
Sri Harsha Kappala

111

Kullanırım:

disable-pry

Bu programın çalışmaya devam etmesini sağlayacak, ancak yürütmeyi durdurmaya devam edecektir. Bu özellikle konsolda hata ayıklarken faydalıdır.


11
Yeniden etkinleştirmek için (komut satırından): ENV ['DISABLE_PRY'] = nil
stebooks

2
devre dışı bırakma-pry kullandıktan sonra pry yeniden girmek mümkün değildi. ENV kullandıktan sonra bile ['DISABLE_PRY'] = nil
daslicious

2
Tekrar denemek için tek yapmanız gereken ENV['DISABLE_PRY'] = nilkontrol cihazınızda komut satırı VEYA raylar konsolunda değil.
Atul Khanduri

Bu, bekçi kullanırken kullanmak için mükemmel olanıdır ve sadece o test çalıştırması için gözetlemeyi durdurmasını istemektedir. Bir sonraki test çalıştırmasında sıfırlanacaktır.
BBonifield

31

Her şeyden çıkmak için şunu kullanın:

exit!

Bu, devam eden tüm bağlamaları göz ardı etmelidir.


4
Bu, aynı zamanda sunucuyu da öldürür. exit-programsunucuyu yeniden başlatmak istemiyorsanız yine de muhtemelen en iyi seçenektir.
Ryan

3
Sadece açıklığa kavuşturmak exit-programiçin rails serveroturumunuzu sürdürmenize izin verir, ancak bir atmak gibi görünüyorSystemExit
Alan David Garcia

24

Üçlü ünlem ( !!!) bunu yapardı.


Bu OSX 10.11.4 (El Capitan) benim için bir çözümdü , disable-pry+ ENV['DISABLE_PRY'] = nilcombo deneyin vermedi ama exit-programbana bir systemExit verdi denedim. Bu sadece işe yarıyor. ( 3.2.22.2 raylarında , 0.10.3 ve yakut 1.9.3'ü kaldırın )
SidOfc

17

kullanım

disable-pry

Yenilemek için bunu kumandanıza ekleyin

ENV['DISABLE_PRY'] = nil

14

Bir binding.pryifade GDB'deki bir kesme noktasıyla tamamen aynıdır. GDB'de böyle bir kırılma noktası da 100 kez çarpacaktı.

Yalnızca bir binding.prykez vurulmasını istiyorsanız, döngünün ilk yinelemesi için, binding.prybenzer bir koşul kullanın :

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

Daha sonra sadece yazarak geçerli oturumdan çıkarsınız exit.


1

Yukarıdaki iki cevaba dayanarak:

Sağolun beyler! Tavsiyeleriniz bana gerçekten çok yardımcı oldu!

Ben sadece DISABLE_PRYçevre değişkeni hakkında endişelenmemek için kişisel olarak kullandığım basit bir aptal numarayı paylaşmak istiyorum . Bu geri aramayı ApplicationControllerprojenizin temel denetleyicisine kalıcı olarak ekleyin. Her disable-pryçağrıldığında PRY'yi otomatik olarak yeniden etkinleştirir :

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

  private

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

1

Gem pry-moveskullanarak f(bitirme komutu) kullanarak döngüden çıkabilirsiniz.


misal:

    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' tuşuna bastığınızda aynen böyle göreceksiniz

[1] pry(#<AlbumsController>)>

tip

exit

bu tek kelime yapacaktır, eğer değilse:

control + c
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.