web-dev-qa-db-fra.com

Comment puis-je sortir d'une boucle avec Ruby Pry?

J'utilise Pry avec mon application Rails. Je mets binding.pry dans une boucle de mon modèle pour essayer de déboguer un problème. Par exemple:

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

Lorsque je tape quit, il passe à la prochaine itération et s’arrête à nouveau. Y a-t-il un moyen de sortir de la boucle pour que je n'ai pas à taper quit 100 fois?

Actuellement, le seul moyen de m'en sortir est d'utiliser CTRL+C et redémarrez l'application.

193
Ryan

Pour quitter Pry sans condition, tapez

exit-program
362
Evandro

J'utilise:

disable-pry

Cela maintiendra le programme en cours d'exécution, mais l'empêchera de continuer à arrêter l'exécution. Cela est particulièrement utile lorsque vous effectuez un débogage dans la console.

95
stebooks

Pour tout quitter, utilisez:

exit!

Cela devrait ignorer toutes les liaisons en cours.

30
Blake

Une triple exclamation (!!!) ferait cela.

22
Hahn

Utilisation 

disable-pry

Pour le réactiver, ajoutez-le à votre contrôleur

ENV['DISABLE_PRY'] = nil
16
Chet3x16

Une instruction binding.pry est exactement la même chose qu'un point d'arrêt dans GDB. Un tel point d'arrêt dans GDB serait frappé 100 fois.

Si vous voulez seulement que le binding.pry soit touché une fois, pour la première itération de la boucle, utilisez une condition sur le binding.pry comme suit:

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

Vous quittez ensuite la session en cours en tapant simplement exit.

14
horseyguy

Basé sur les deux réponses précédentes ci-dessus:

Merci les gars! Vos conseils m'ont beaucoup aidé!

Je veux juste partager un truc simple et stupide, que j’utilise personnellement pour ne pas me soucier de la variable d’environnement DISABLE_PRY tout le temps. Ajoutez ce rappel au contrôleur de base ApplicationController de votre projet de manière permanente. Il réactiverait automatiquement PRY chaque fois que le disable-pry est appelé:

# 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

Avec gem pry-moves, vous pouvez sortir de la boucle avec f (commande de fin)


exemple:

    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

appuyez sur 'q' et vous verrez comme ça

[1] pry(#<AlbumsController>)>

type

exit

cette seule parole fera, sinon:

control + c
0
Heartless Vayne