Usando Pry no Rails, quando eu atingir um ponto de interrupção na ligação de código.
Quero saber como cheguei aqui, quem me ligou, quem os chamou, etc. Mas, estranhamente, não vejo esse comando. Alguém sabe?
fonte
Usando Pry no Rails, quando eu atingir um ponto de interrupção na ligação de código.
Quero saber como cheguei aqui, quem me ligou, quem os chamou, etc. Mas, estranhamente, não vejo esse comando. Alguém sabe?
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 :)
fonte
pry-backtrace
está ok, mas opry-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
fonte
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
:A chamada
callerf
resultará em umacaller
saída filtrada . Sinais estranhos ao redor#{output}
são coloridos para replicar a aparência original docaller
. 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.fonte
~/.pryrc
. Se não, basta criá-lo.~/
sempre significa a pasta pessoal em sistemas Unix.