Ruby / byebug / binding.pry:如何退一步?

时间:2015-05-05 20:10:40

标签: ruby-on-rails debugging byebug

我在binding.pry或byebug上键入next以跳到下一行。我使用step进入程序。我如何退步?

我一直在查看文档而没有运气。非常感谢。感谢。

4 个答案:

答案 0 :(得分:3)

使用ByeBug时无法退后一步。

答案 1 :(得分:1)

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

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

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

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

> debug Orders.for_user(current_user)

并检查那里发生了什么

为什么我们必须使用妥协?问题是红宝石环境并不能保持每一步的整个系统状态。大概是因为很可能你仍然会使用外部系统(例如通过API调用),这可能会改变他们的内部状态而你无法自动地回滚#34;。

答案 2 :(得分:0)

此Pry备忘单上没有列出后退或撤消步骤命令。我建议使用ctrl + c(x2),ctrl + d,将其放回您的容器中,然后再次击中绑定撬。

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

答案 3 :(得分:0)

您可以在binding.pry中使用上下方法

查看此处:

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>)>