Risposte:
Usa il plugin pry-stack_explorer , ti permette di muoverti su e giù per lo stack di chiamate (con up
e down
), visualizzare lo stack di chiamate (con show-stack
) e così via:
Vedere qui:
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>)>
Per farlo senza plug-in di leva (avevo problemi con pry-stack_explorer), guarda caller
.
In realtà cerco il nome del mio progetto per filtrare tutti gli elementi impilati di rotaie irrilevanti. Ad esempio, se il nome del mio progetto fosse, archie
userei:
caller.select {|line| line.include? "archie" }
Il che mi dà la traccia dello stack che sto cercando.
Un modo più breve sarebbe:
caller.select {|x| x["archie"] }
Che funziona altrettanto bene.
caller.reject {|x| x["vendor/bundle"] || x["/.rbenv/versions/"] }
C'è pry-backtrace che è il backtrace per la sessione di Pry.
C'è anche wtf? . Quale spettacolo è il backtrace dell'eccezione più recente. Aggiungi più punti interrogativi per visualizzare più backtrace o un punto esclamativo per vedere tutto.
Digita help in pry per vedere tutti gli altri comandi :)
pry-backtrace
va bene, ma il pry-stack_explorer
plugin è molto più potente (anche se è un altro gioiello, un plugin)
Puoi usare il metodo del chiamante che è già definito nella libreria gem. Il valore restituito da quel metodo sarà un array. Quindi puoi applicare metodi di array per la ricerca in quel gruppo di righe
Di seguito è anche utile per una traccia potente. https://github.com/pry/pry-stack_explorer
Estendendo la risposta di Paul Oliver.
Se hai un elenco di frasi che desideri escludere in modo permanente, puoi farlo con una funzione di comandi personalizzati in Pry.
In ~/.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
La chiamata callerf
risulterà in un caller
output filtrato . I segni strani intorno #{output}
stanno colorando per replicare l'aspetto originale del caller
. Ho preso il colore da qui .
In alternativa, se non vuoi creare un comando personalizzato, usa Ctrl+R
per cercare nella cronologia dei comandi.
~/.pryrc
. In caso contrario, crealo e basta. ~/
indica sempre la cartella home sui sistemi Unix.