我正在尝试使用 pry 和 pry-byebug 在 Rails 控制台中逐步执行某些代码。我启动了控制台
pry -r ./config/environment
然后我设置了一个断点:
break Foo#bar
然后新建一个Foo
并调用bar
它:
Foo.new.bar
我预计 step into Foo#bar
,但该方法只是正常执行。
有什么方法可以让这个工作流程发挥作用吗?
我正在尝试使用 pry 和 pry-byebug 在 Rails 控制台中逐步执行某些代码。我启动了控制台
pry -r ./config/environment
然后我设置了一个断点:
break Foo#bar
然后新建一个Foo
并调用bar
它:
Foo.new.bar
我预计 step into Foo#bar
,但该方法只是正常执行。
有什么方法可以让这个工作流程发挥作用吗?
我找到了答案:调试器不可重入。所以你需要这样做:
[1] pry(main)> binding.pry
[1] pry(main)> break Foo#bar
Breakpoint 1: Foo#bar (Enabled) :
6: def bar
7: end
[2] pry(main)> c # continue and exit the debugger we started on the first line
=> nil
[3] pry(main)> Foo.new.bar
Breakpoint 1. First hit.
这是我通常使用 pry-byebug 的方式
将调用添加到binding.pry
方法的第一行Foo#bar
跑rails console
称呼Foo.new.bar
你现在应该看到 pry REPL
嗯,当我使用 pry-byebug 调试我的代码时,我使用以下方式:
需要'撬-byebug'
def main # 做一些编码 puts "Hello" binding.pry # 断点将 "World" end
主要的
然后在运行它时,我的终端将返回进入 irb 模式并返回:
> 3: def main
> 4: puts "Hello"
> 5:
> 6: binding.pry
> => 7: puts "World!"
> 8: end
>
> [1] pry(main)>
所以代码指示了我现在的位置,从那时起,我可以检查断点之前读取的每个变量(在第 6 行)。断点表明终端在第 6 行之后还没有读取内容,所以如果我在那里有变量,终端将无法识别它们。
然后我可以键入next,因此 binding.pry 将跳转到下一个可用的 binding.pry 点或运行整个代码。或者我可以简单地键入继续。
需要记住的是在提交代码之前删除require 'pry- byebug ' 和所有断点行,因为我们不希望代码卡在这些点上,对吧?用户可能不知道如何处理它:)
希望它有所帮助!第一次尝试为这个很棒的社区做出贡献:D