Antworten:
Verwenden Sie das Plugin pry-stack_explorer , mit dem Sie den Aufrufstapel (mit up
und down
) auf und ab bewegen, den Aufrufstapel (mit ) anzeigen show-stack
usw. können:
siehe hier:
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>)>
Um dies ohne Pry-Plugins zu tun (ich hatte Probleme mit pry-stack_explorer), schauen Sie sich einfach an caller
.
Ich suche tatsächlich nach meinem Projektnamen, um alle irrelevanten Schienenstapelelemente herauszufiltern. Wenn mein Projektname beispielsweise wäre, würde archie
ich Folgendes verwenden:
caller.select {|line| line.include? "archie" }
Das gibt mir die Stapelspur, die ich suche.
Ein kürzerer Weg wäre:
caller.select {|x| x["archie"] }
Welches funktioniert genauso gut.
caller.reject {|x| x["vendor/bundle"] || x["/.rbenv/versions/"] }
Es gibt eine Pry-Backtrace , die die Backtrace für die Pry-Sitzung zeigt.
Es gibt auch wtf? . Welche Show ist die Rückverfolgung der letzten Ausnahme. Fügen Sie weitere Fragezeichen hinzu, um mehr von der Rückverfolgung anzuzeigen, oder ein Ausrufezeichen, um alles anzuzeigen.
Geben Sie help in pry ein, um alle anderen Befehle anzuzeigen :)
pry-backtrace
ist in Ordnung, aber das pry-stack_explorer
Plugin ist viel mächtiger (obwohl es ein weiteres Juwel ist, ein Plugin)
Sie können die Aufrufermethode verwenden, die bereits in der Gem-Bibliothek definiert ist. Der Rückgabewert dieser Methode ist ein Array. Sie können also Array-Methoden für die Suche in dieser Reihe von Zeilen anwenden
Unten ist auch hilfreich für leistungsstarke Trace. https://github.com/pry/pry-stack_explorer
Erweiterung auf Paul Olivers Antwort.
Wenn Sie eine Liste von Phrasen haben, die Sie dauerhaft ausschließen möchten, können Sie dies mit einer benutzerdefinierten Befehlsfunktion in Pry tun.
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
Das Aufrufen callerf
führt zu einer gefilterten caller
Ausgabe. Seltsame Zeichen #{output}
sind farbig, um das ursprüngliche Aussehen des zu reproduzieren caller
. Ich habe die Farbe von hier genommen .
Wenn Sie keinen benutzerdefinierten Befehl erstellen möchten, können Sie alternativ den Befehlsverlauf Ctrl+R
durchsuchen.
~/.pryrc
. Wenn nicht, erstellen Sie es einfach. ~/
bedeutet immer den Home-Ordner auf Unix-Systemen.