16

我键入nextbinding.pry 或 byebug 以跳到下一行。我step用来进入程序。我如何退后一步?

我一直在寻找没有运气的文档。非常感谢帮助。谢谢。

4

4 回答 4

5

使用 ByeBug 时没有退路。

于 2017-07-24T10:11:57.840 回答
2

您可以在 binding.pry 中使用 up & down 方法

看这里:

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>)> 
于 2018-08-31T08:29:10.210 回答
0

此 Pry Cheat Sheet 中没有列出后退或撤消步骤命令。我建议 ctrl + c (x2), ctrl + d 回到你的容器并再次点击绑定撬。

https://gist.github.com/lfender6445/9919357

于 2018-08-24T17:22:54.970 回答
0

妥协的解决方案是使用pry-moves重新执行之前的代码片段。

例如,如果您在 Controller 的操作中停止:

def index
    list = Orders.for_user(current_user) 
=>  binding.pry
end

而现在你想了解为什么是list空的?- 你可以运行:

> debug Orders.for_user(current_user)

并检查那里发生了什么


为什么我们必须使用妥协?问题是 ruby​​ 环境不会在每一步都保持系统的整体状态。大概是因为您很可能仍然会使用外部系统(例如通过 API 调用),这可能会改变它们的内部状态并且您不能自动“回滚”。

于 2018-05-01T09:48:28.173 回答