Ruby on rails 带pry byebug don'的断点;不要在控制台中触发
我试图使用pry和pry byebug在Rails控制台中逐步执行一些代码。我启动了控制台Ruby on rails 带pry byebug don'的断点;不要在控制台中触发,ruby-on-rails,ruby,pry,byebug,Ruby On Rails,Ruby,Pry,Byebug,我试图使用pry和pry byebug在Rails控制台中逐步执行一些代码。我启动了控制台 pry-r./config/environment 然后我设置了一个断点: break Foo#bar 然后制作一个新的Foo并在其上调用bar: Foo.new.bar 我希望进入Foo#bar,但方法只是正常执行 有什么方法可以让这个工作流正常工作吗 以下是我通常使用pry byebug的方式 在方法Foo#bar 运行rails控制台 调用Foo.new.bar 您现在应该可以看到pry REPL了
pry-r./config/environment
然后我设置了一个断点:
break Foo#bar
然后制作一个新的Foo
并在其上调用bar
:
Foo.new.bar
我希望进入Foo#bar
,但方法只是正常执行
有什么方法可以让这个工作流正常工作吗 以下是我通常使用pry byebug的方式 在方法
Foo#bar
运行rails控制台
调用Foo.new.bar
您现在应该可以看到pry REPL了,我找到了答案:调试器不是可重入的。因此,您需要这样做:
[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调试代码时,我使用以下方式:
首先需要在编码开始时使用pry byebug gem
需要“用撬棍撬”
def main#进行一些编码
“你好”
binding.pry#此处为断点
“世界”
结束
主要
然后在运行时,我的终端将返回进入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点,或者运行整个代码。或者我可以简单地键入continue
需要记住的是,在提交代码之前删除require'pry byebug'和所有断点行,因为我们不希望代码卡在这些点上,对吗?用户可能不知道如何处理它:)
希望有帮助!第一次尝试为这个了不起的社区做贡献:D虽然这会奏效,OP似乎对从pry byebug会话中动态添加断点感兴趣。他似乎在尝试这种方法,但我不知道这是否是因为他知道这种方法,不想使用它,或者他只是需要任何方法来让它工作。这个答案中的值肯定是——并不意味着它没有功绩。我希望OP能够澄清是否有要求他能够动态地完成这项工作。我确实知道这种方法,但在我不想修改的库中进行挖掘时,上述方法通常对我很有用。:)您是否尝试过使用基于行号的方法来解决此问题?从文档中:break app/models/user.rb:15
这似乎更为明确。此外,您能否澄清,您是否有要求能够在pry byebug会话中执行此操作,或者您是否可以按照@kcdragon在其回答中的建议在代码本身中设置断点。如果是后者,请接受他的回答。