Respostas:
Use o plug - in pry-stack_explorer , ele permite que você mova para cima e para baixo na pilha de chamadas (com up
e down
), exiba a pilha de chamadas (com show-stack
) e assim por diante:
Veja aqui:
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>)>
Para fazer isso sem nenhum plug-in pry (eu estava tendo problemas com pry-stack_explorer), basta olhar para caller
.
Na verdade, procuro o nome do meu projeto para filtrar todos os itens irrelevantes da pilha do Rails. Por exemplo, se o nome do meu projeto fosse, archie
eu usaria:
caller.select {|line| line.include? "archie" }
O que me dá o rastreamento de pilha que estou procurando.
Uma maneira mais curta seria:
caller.select {|x| x["archie"] }
O que funciona muito bem.
caller.reject {|x| x["vendor/bundle"] || x["/.rbenv/versions/"] }
Há um rastreamento de retorno que mostra o rastreamento de retorno para a sessão do Pry.
Também há wtf? . Qual show é o backtrace da exceção mais recente. Adicione mais pontos de interrogação para ver mais do backtrace ou um ponto de exclamação para ver tudo.
Digite help in pry para ver todos os outros comandos :)
pry-backtrace
está ok, mas o pry-stack_explorer
plugin é muito mais poderoso (embora seja outra joia, um plugin)
Você pode usar o método caller que já está definido dentro da biblioteca gem. O valor de retorno desse método será uma matriz. Então você pode aplicar métodos de array para pesquisa naquele monte de linhas
Abaixo também é útil para rastreamento poderoso. https://github.com/pry/pry-stack_explorer
Ampliando a resposta de Paul Oliver.
Se você tiver uma lista de frases que deseja excluir permanentemente, pode fazer isso com um recurso de comandos personalizados no Pry.
Em ~/.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
A chamada callerf
resultará em uma caller
saída filtrada . Sinais estranhos ao redor #{output}
são coloridos para replicar a aparência original do caller
. Eu peguei a cor daqui .
Alternativamente, se você não quiser fazer um comando personalizado, use Ctrl+R
para pesquisar no histórico de comandos.
~/.pryrc
. Se não, basta criá-lo. ~/
sempre significa a pasta pessoal em sistemas Unix.