我键入next
binding.pry 或 byebug 以跳到下一行。我step
用来进入程序。我如何退后一步?
我一直在寻找没有运气的文档。非常感谢帮助。谢谢。
我键入next
binding.pry 或 byebug 以跳到下一行。我step
用来进入程序。我如何退后一步?
我一直在寻找没有运气的文档。非常感谢帮助。谢谢。
使用 ByeBug 时没有退路。
您可以在 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>)>
此 Pry Cheat Sheet 中没有列出后退或撤消步骤命令。我建议 ctrl + c (x2), ctrl + d 回到你的容器并再次点击绑定撬。
妥协的解决方案是使用pry-moves重新执行之前的代码片段。
例如,如果您在 Controller 的操作中停止:
def index
list = Orders.for_user(current_user)
=> binding.pry
end
而现在你想了解为什么是list
空的?- 你可以运行:
> debug Orders.for_user(current_user)
并检查那里发生了什么
为什么我们必须使用妥协?问题是 ruby 环境不会在每一步都保持系统的整体状态。大概是因为您很可能仍然会使用外部系统(例如通过 API 调用),这可能会改变它们的内部状态并且您不能自动“回滚”。