À l'aide de Pry in Rails, lorsque je frappe 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 curieusement, je ne vois pas cet ordre. Est-ce que quelqu'un sait?
Utilisez le plugin pry-stack_Explorer , il vous permet de monter et de descendre dans la pile d'appels (avec up
et down
), d'afficher la pile d'appels (avec show-stack
), etc:
vois 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>)>
Pour faire cela sans aucun plugin (je rencontrais des problèmes avec pry-stack_Explorer), il suffit de regarder caller
.
En fait, je cherche mon nom de projet pour filtrer tous les éléments de pile non pertinents Rails. Par exemple, si mon nom de projet était archie
, j'utiliserais:
caller.select {|line| line.include? "archie" }
Ce qui me donne la trace de pile que je cherche.
Un moyen plus court serait:
caller.select {|x| x["archie"] }
Ce qui fonctionne aussi bien.
Il y a pry-backtrace qui affiche la trace de la trace de la session Pry.
Il y a aussi wtf? . Quelle émission est la trace de la plus récente exception. Ajoutez plus de points d'interrogation pour afficher davantage de la trace ou un point d'exclamation pour tout visualiser.
Tapez help dans le levier pour voir toutes les autres commandes :)
Vous pouvez utiliser la méthode de l'appelant déjà définie dans la bibliothèque de pierres précieuses. La valeur de retour de cette méthode sera un tableau. Donc, vous pouvez éventuellement appliquer des 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
Étendre la réponse de Paul Oliver.
Si vous souhaitez exclure de manière permanente une liste de phrases, vous pouvez le faire avec une fonction de commande personnalisée dans Pry.
Dans ~/.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
L'appel de callerf
aboutira à une sortie filtrée de caller
. Signes étranges autour de #{output}
est en train de colorier pour reproduire l'aspect original du caller
. J'ai pris la couleur de ici .
Sinon, si vous ne voulez pas créer de commande personnalisée, utilisez Ctrl+R
pour rechercher dans l'historique des commandes.