如何使用Ruby Pry退出循环?

Rya*_*yan 200 ruby loops ruby-on-rails exit pry

我正在使用Pry和我的Rails应用程序.我binding.pry在我的模型中设置了一个循环来尝试调试问题.例如:

(1..100).each do |i|
  binding.pry
  puts i
end
Run Code Online (Sandbox Code Playgroud)

当我输入时quit,它会进入下一次迭代并再次停止.有没有办法走出循环所以我不必输入quit100次?

目前,我知道如何摆脱它的唯一方法是使用CTRL+ C并重新启动应用程序.

小智 390

要无条件退出Pry,请键入

exit-program
Run Code Online (Sandbox Code Playgroud)

  • 在Mac OSX上,按两次"Ctrl + C"将终止Pry会话,但也会有效地终止该终端窗口:后续输出是glitched,我需要关闭该终端选项卡并移动到新的终端选项卡.但是`!!!`没有这种加重效果. (4认同)

ste*_*oks 105

我用:

disable-pry
Run Code Online (Sandbox Code Playgroud)

这将使程序保持运行,但不会继续执行.在控制台中进行调试时,这尤其有用.

  • 要重新启用(从命令行):ENV ['DISABLE_PRY'] = nil (10认同)
  • 你如何从rails命令行重新启用它? (4认同)
  • 使用disable-pry后我无法重新进入pry.即使使用ENV ['DISABLE_PRY'] = nil之后 (2认同)
  • 要重新进入pry,您需要做的就是在控制器中设置`ENV ['DISABLE_PRY'] = nil`,而不是在命令行或rails控制台中. (2认同)

Bla*_*ake 30

要退出所有内容,请使用:

exit!
Run Code Online (Sandbox Code Playgroud)

这应该忽略所有进行中的绑定.

  • 这也会同时杀死服务器.如果你不想重启服务器,`exit-program`仍然是最好的选择. (4认同)
  • 只是为了澄清`exit-program`允许你维护你的`rails server`会话但似乎抛出`SystemExit` (3认同)

小智 24

三感叹号(!!!)会这样做.


小智 17

使用

disable-pry
Run Code Online (Sandbox Code Playgroud)

要重新设置,请将其添加到控制器

ENV['DISABLE_PRY'] = nil
Run Code Online (Sandbox Code Playgroud)


hor*_*guy 14

一个binding.pry说法是完全一样的GDB断点.GDB中的这样一个断点也会被击中100次.

如果你只想要binding.pry一次点击,对于循环的第一次迭代,那么使用条件binding.pry就像这样:

(1..100).each do |i|
  binding.pry if i == 1
  puts i
end
Run Code Online (Sandbox Code Playgroud)

然后只需键入即可退出当前会话exit.