回答:
pry-stack_explorerプラグインを使用すると、コールスタックを上下に移動したり(up
およびdown
)、コールスタックを表示したり(を使用show-stack
)などできます。
こちらをご覧ください:
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>)>
pryプラグインなしでこれを行うには(pry-stack_explorerで問題が発生していました)、を見てくださいcaller
。
実際には、プロジェクト名を探して、関係のないすべてのRailsスタック項目をフィルターで除外します。たとえば、私のプロジェクト名をarchie
使用した場合:
caller.select {|line| line.include? "archie" }
これにより、探しているスタックトレースがわかります。
より短い方法は次のとおりです。
caller.select {|x| x["archie"] }
これも同様に機能します。
caller.reject {|x| x["vendor/bundle"] || x["/.rbenv/versions/"] }
Pryセッションのバックトレースであるpry-backtraceがあります。
wtfもありますか?。どのショーが最新の例外のバックトレースです。さらに多くのバックトレースを表示するには疑問符を追加し、すべてを表示するには感嘆符を追加します。
他のすべてのコマンドを表示するには、pryにhelpと入力してください:)
pry-backtrace
大丈夫ですが、pry-stack_explorer
プラグインの方がはるかに強力です(別の宝石、プラグインですが)
gemライブラリ内で既に定義されている呼び出し元メソッドを使用できます。そのメソッドの戻り値は配列になります。だからあなたはその行の束で検索のために配列メソッドを適用するイベントをすることができます
以下は、強力なトレースにも役立ちます。 https://github.com/pry/pry-stack_explorer
ポール・オリバーの答えを拡張します。
完全に除外したいフレーズのリストがある場合は、Pryのカスタムコマンド機能でそれを行うことができます。
で~/.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
呼び出すcallerf
と、フィルタリングされたcaller
出力になります。周りの奇妙な看板#{output}
は、の元の外観を再現するために色分けされていますcaller
。こちらから色を取りました。
または、カスタムコマンドを作成したくない場合は、を使用Ctrl+R
してコマンド履歴を検索します。
~/.pryrc
。そうでない場合は、作成してください。~/
Unixシステムでは常にホームフォルダを意味します。