Answers:
使用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-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-backtrace,它显示了Pry会话的回溯。
还有wtf吗?。哪个节目是最新异常的回溯。添加更多问号以查看更多回溯记录,或添加感叹号以查看所有内容。
在pry中键入help以查看所有其他命令:)
pry-backtrace
可以,但是pry-stack_explorer
插件功能更强大(尽管它是另一个宝石,一个插件)
您可以使用在gem库中已经定义的调用者方法。该方法的返回值将是一个数组。因此,您可以在那几行事件中应用数组方法进行搜索
下面对于强大的跟踪也很有帮助。 https://github.com/pry/pry-stack_explorer
扩展Paul Oliver的答案。
如果您有要永久排除的短语列表,可以使用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系统上始终表示主文件夹。