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.
Pour quitter Pry sans condition, tapez
exit-program
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.
Pour tout quitter, utilisez:
exit!
Cela devrait ignorer toutes les liaisons en cours.
Une triple exclamation (!!!
) ferait cela.
Utilisation
disable-pry
Pour le réactiver, ajoutez-le à votre contrôleur
ENV['DISABLE_PRY'] = nil
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
.
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
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
appuyez sur 'q' et vous verrez comme ça
[1] pry(#<AlbumsController>)>
type
exit
cette seule parole fera, sinon:
control + c