Odpowiedzi:
Użyj wtyczki pry-stack_explorer , która pozwala na poruszanie się w górę iw dół stosu wywołań (za pomocą up
i down
), wyświetlanie stosu wywołań (za pomocą show-stack
) i tak dalej:
Spójrz tutaj:
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>)>
Aby to zrobić bez żadnych wtyczek podważających (miałem problemy z pry-stack_explorer), po prostu spójrz na caller
.
Właściwie szukam nazwy mojego projektu, aby odfiltrować wszystkie nieistotne elementy stosu szyn. Na przykład, gdyby nazwa mojego projektu archie
brzmiała:
caller.select {|line| line.include? "archie" }
Co daje mi ślad stosu, którego szukam.
Krótszy sposób to:
caller.select {|x| x["archie"] }
Co działa równie dobrze.
caller.reject {|x| x["vendor/bundle"] || x["/.rbenv/versions/"] }
Jest pry-backtrace, który pokazuje ślad dla sesji Pry.
Jest też wtf? . Który program jest śladem ostatniego wyjątku. Dodaj więcej znaków zapytania, aby zobaczyć więcej śladu wstecznego lub wykrzyknik, aby zobaczyć wszystko.
Wpisz help w podważeniu, aby zobaczyć wszystkie inne polecenia :)
pry-backtrace
jest ok, ale pry-stack_explorer
wtyczka jest o wiele potężniejsza (choć to kolejny klejnot, wtyczka)
Możesz użyć metody caller, która jest już zdefiniowana w bibliotece gem. Wartość zwracana przez tę metodę będzie tablicą. Możesz więc zdarzenie zastosować metody tablicowe do wyszukiwania w tej grupie wierszy
Poniżej jest również pomocna w przypadku potężnego śledzenia. https://github.com/pry/pry-stack_explorer
Rozszerzając odpowiedź Paula Olivera.
Jeśli masz listę fraz, które chcesz trwale wykluczyć, możesz to zrobić za pomocą funkcji poleceń niestandardowych w Pry.
W ~/.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
Wywołanie callerf
spowoduje przefiltrowanie caller
danych wyjściowych. Dziwne znaki wokół #{output}
są kolorowane, aby odtworzyć oryginalny wygląd caller
. Wziąłem stąd kolor .
Alternatywnie, jeśli nie chcesz tworzyć niestandardowego polecenia, użyj Ctrl+R
do przeszukiwania historii poleceń.
~/.pryrc
. Jeśli nie, po prostu go utwórz. ~/
zawsze oznacza katalog domowy w systemach uniksowych.