Réponses:
Utilisez le plugin pry-stack_explorer , il vous permet de monter et descendre la pile d'appels (avec up
et down
), d'afficher la pile d'appels (avecshow-stack
), et ainsi de suite:
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 plug-in pry (j'avais des problèmes avec pry-stack_explorer), il suffit de regarder caller
.
En fait, je recherche le nom de mon projet pour filtrer tous les éléments de pile de rails non pertinents. Par exemple, si le nom de mon projet archie
était, j'utiliserais:
caller.select {|line| line.include? "archie" }
Ce qui me donne la trace de pile que je recherche.
Un moyen plus court serait:
caller.select {|x| x["archie"] }
Ce qui fonctionne aussi bien.
caller.reject {|x| x["vendor/bundle"] || x["/.rbenv/versions/"] }
Il y a un retour en arrière qui montre la trace de la session Pry.
Il y a aussi wtf? . Quelle émission est la trace de l'exception la plus récente. Ajoutez plus de points d'interrogation pour voir plus de la trace arrière ou un point d'exclamation pour tout voir.
Tapez help dans pry pour voir toutes les autres commandes :)
pry-backtrace
est ok, mais le pry-stack_explorer
plugin est beaucoup plus puissant (bien que ce soit un autre bijou, un plugin)
Vous pouvez utiliser la méthode de l'appelant déjà définie dans la bibliothèque de gemmes. La valeur de retour de cette méthode sera un tableau. Ainsi, vous pouvez appliquer des méthodes de tableau pour la recherche dans ce groupe de lignes
Ci-dessous est également utile pour une trace puissante. https://github.com/pry/pry-stack_explorer
S'étendant sur la réponse de Paul Oliver.
Si vous avez une liste de phrases que vous souhaitez exclure définitivement, vous pouvez le faire avec une fonctionnalité de commandes personnalisées 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 callerf
entraînera une caller
sortie filtrée . Des signes étranges #{output}
sont colorés pour reproduire le look original du caller
. J'ai pris la couleur d' ici .
Sinon, si vous ne souhaitez pas créer de commande personnalisée, utilisez Ctrl+R
pour rechercher dans l'historique des commandes.
~/.pryrc
. Sinon, créez-le. ~/
signifie toujours le dossier de départ sur les systèmes Unix.