2013-03-08 8 views
69

Pry in Rails benutzen, wenn ich einen Haltepunkt in dem Code Hit binding.pryPry: Zeigen Sie mir den Stapel

Ich möchte wissen, wie ich hierher gekommen, der mich angerufen, der sie genannt, etc. Aber Seltsamerweise sehe ich diesen Befehl nicht. Weiß jemand?

Antwort

41

die pry-stack_explorer Plugin verwenden, ist es Sie die Aufrufliste nach oben und nach unten ermöglicht (mit up und down), die Aufrufliste angezeigt werden (mit show-stack), und so weiter:

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>)> 
75

Es gibt pry-backtrace, die das Backtrace für die Pry-Sitzung anzeigen.

Es gibt auch wtf?. Welche Show ist das Backtrace der letzten Ausnahme? Fügen Sie weitere Fragezeichen hinzu, um mehr vom Backtrace oder ein Ausrufezeichen anzuzeigen, um alles zu sehen.

Typ help in hebeln alle anderen Befehle zu sehen :)

+1

'hebeln-backtrace' ist ok, aber' hebeln-stack_explorer' Plugin ist viel mächtiger (obwohl es ist ein weiteres Juwel, ein Plugin) – horseyguy

+7

aber die Tatsache ist, manchmal nicht diese Funktionen alle verwenden :) – nXqd

+3

Danke ich wusste nicht wtf? Befehl! –

66

dies ohne hebel Plugins zu tun (ich war Probleme mit hebeln-stack_explorer) mit, nur Blick auf caller.

Ich suche eigentlich nach meinem Projektnamen, um alle irrelevanten Schienenstapelelemente herauszufiltern. Zum Beispiel würde, wenn mein Projektname archie ist ich benutze:

caller.select {|line| line.include? "archie" } 

die mir die Stack-Trace gibt, die ich suche.

würde ein kürzerer Weg:

caller.select {|x| x["archie"] } 

, die genauso gut funktioniert.

+0

Das ist großartig. Ich war genervt, weil es den Aufruf-Stack enthielt und ich wollte nur, was speziell aus meiner Anwendung kam. +1! – cdpalmer

+3

Perfekt. Ich habe tmux eine Tastenkombination hinzugefügt, um diese einzugeben (bind 'B' send-keys '...^M'), stattdessen eine "reject", so dass es generischer ist: '' 'caller.reject {| x | x ["Verkäufer/Bündel"] || x ["/. rbenv/versions /"]} '' ' – hoodslide

+2

Wahrlich, um für die Ruby-Community zu bilden, ist die einzige nützliche Antwort unter dem Rat begraben, einige Plugins zu installieren. –

1

Sie können die Aufrufmethode verwenden, die bereits in der Edelsteinbibliothek definiert ist. Der Rückgabewert dieser Methode wird ein Array sein. So können Sie Array-Methoden für die Suche in diesem Zeilenbündel anwenden.

Unten ist auch hilfreich für leistungsstarke Trace. https://github.com/pry/pry-stack_explorer

Verwandte Themen