Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 带pry byebug don'的断点;不要在控制台中触发_Ruby On Rails_Ruby_Pry_Byebug - Fatal编程技术网

Ruby on rails 带pry byebug don'的断点;不要在控制台中触发

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和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了,我找到了答案:调试器不是可重入的。因此,您需要这样做:

[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在其回答中的建议在代码本身中设置断点。如果是后者,请接受他的回答。