En utilisant Pry dans Rails, lorsque je touche un point d'arrêt dans le code binding.pry
Je veux savoir comment je suis arrivé ici, qui m'a appelé, qui les a appelés, etc. Mais bizarrement, je ne vois pas cette commande. Quelqu'un sait-il ?
En utilisant Pry dans Rails, lorsque je touche un point d'arrêt dans le code binding.pry
Je veux savoir comment je suis arrivé ici, qui m'a appelé, qui les a appelés, etc. Mais bizarrement, je ne vois pas cette commande. Quelqu'un sait-il ?
Pour faire cela sans aucun plugin pry (j'avais des problèmes avec pry-stack_explorer), il suffit de regarder à caller
.
En fait, je cherche le nom de mon projet pour filtrer tous les éléments non pertinents de la pile de rails. Par exemple, si le nom de mon projet était archie
Je l'utiliserais :
caller.select {|line| line.include? "archie" }
Ce qui me donne la trace de la pile que je cherche.
Un moyen plus court serait :
caller.select {|x| x["archie"] }
Ce qui fonctionne tout aussi bien.
Il y a pry-backtrace qui montre le backtrace de la session Pry.
Il existe également wtf ? . qui montre le backtrace de l'exception la plus récente. Ajoutez des points d'interrogation pour afficher une plus grande partie de la rétrospective ou un point d'exclamation pour tout voir.
Type aide in pry pour voir toutes les autres commandes :)
Utilisez le pry-stack_explorer il vous permet de vous déplacer vers le haut et vers le bas de la pile d'appels (avec l'option up
y down
), afficher la pile d'appels (avec show-stack
), et ainsi de suite :
voir ici :
Frame number: 0/64
From: /Users/johnmair/ruby/rails_projects/personal_site/app/controllers/posts_controller.rb @ line 7 PostsController#index:
5: def index
6: @posts = Post.all
=> 7: binding.pry
8: end
[1] pry(#<PostsController>)> show-stack
Showing all accessible frames in stack (65 in total):
--
=> #0 index <PostsController#index()>
#1 [method] send_action <ActionController::ImplicitRender#send_action(method, *args)>
#2 [method] process_action <AbstractController::Base#process_action(method_name, *args)>
#3 [method] process_action <ActionController::Rendering#process_action(*arg1)>
<... clipped ...>
[2] pry(#<PostsController>)> up
Frame number: 1/64
Frame type: method
From: /Users/johnmair/.rvm/gems/ruby-2.0.0-p0/gems/actionpack-3.2.8/lib/action_controller/metal/implicit_render.rb @ line 4 ActionController::ImplicitRender#send_action:
3: def send_action(method, *args)
=> 4: ret = super
5: default_render unless response_body
6: ret
7: end
[3] pry(#<PostsController>)>
En prolongement de la réponse de Paul Oliver.
Si vous avez une liste de phrases que vous voulez exclure de façon permanente, vous pouvez le faire avec une fonction de commandes personnalisées dans Pry.
Sur ~/.pryrc
:
Pry::Commands.block_command "callerf", "Filter the caller backtrace" do
output = caller.reject! { |line| line["minitest"] || line["pry"] }
puts "\e[31m#{output.join("\n")}\e[0m"
end
Appel à callerf
donnera lieu à un filtrage caller
sortie. Signes étranges autour #{output}
est coloré pour reproduire l'aspect original de la caller
. J'ai pris la couleur de aquí .
Alternativement, si vous ne voulez pas créer une commande personnalisée, utilisez Ctrl+R
pour rechercher dans l'historique des commandes.
Vous pouvez utiliser la méthode caller qui est déjà définie dans la bibliothèque gem. La valeur de retour de cette méthode sera un tableau. Vous pouvez donc appliquer les méthodes de tableau pour la recherche dans ce groupe de lignes.
Ci-dessous est également utile pour la trace puissante. https://github.com/pry/pry-stack_explorer
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.