115

在 Rails 中使用 Pry,当我在代码 binding.pry 中遇到断点时

我想知道我是怎么到这里的,谁给我打电话,谁给他们打电话等等。但奇怪的是我没有看到那个命令。有人知道吗?

4

5 回答 5

160

要在没有任何 pry 插件的情况下执行此操作(我在使用 pry-stack_explorer 时遇到了问题),只需查看caller.

我实际上是在寻找我的项目名称来过滤掉所有不相关的 Rails 堆栈项。例如,如果我的项目名称是archie我会使用:

caller.select {|line| line.include? "archie" }

这给了我正在寻找的堆栈跟踪。

更短的方法是:

caller.select {|x| x["archie"] }

这同样有效。

于 2014-02-07T05:49:03.700 回答
89

pry-backtrace显示了 Pry 会话的回溯。

还有wtf?. 哪个节目是最近异常的回溯。添加更多问号以查看更多回溯或添加感叹号以查看全部内容。

在 pry 中键入help以查看所有其他命令 :)

于 2013-03-08T21:25:52.447 回答
56

使用pry-stack_explorer插件,它允许您上下移动调用堆栈(使用updown),显示调用堆栈(使用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>)> 
于 2013-03-09T02:09:49.047 回答
2

扩展保罗奥利弗的回答。

如果您有一个想要永久排除的短语列表,您可以使用 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搜索命令历史记录。

于 2019-04-08T10:50:07.987 回答
1

您可以使用已在 gem 库中定义的调用方方法。该方法的返回值将是一个数组。因此,您可以事件应用数组方法以在那一堆行中进行搜索

下面也有助于强大的跟踪。 https://github.com/pry/pry-stack_explorer

于 2014-12-23T13:33:54.883 回答