如何使用Ruby Pry退出循环?

时间:2011-11-04 20:47:06

标签: ruby-on-rails ruby loops exit pry

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

(1..100).each do |i|
  binding.pry
  puts i
end

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

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

10 个答案:

答案 0 :(得分:370)

要无条件退出Pry,请键入

exit-program

编辑来自@ Nick的评论:也有效:

!!!

答案 1 :(得分:100)

我用:

disable-pry

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

答案 2 :(得分:30)

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

exit!

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

答案 3 :(得分:22)

三声惊叹(!!!)会这样做。

答案 4 :(得分:17)

使用

disable-pry

要启用,请将其添加到您的控制器

答案 5 :(得分:14)

binding.pry语句与GDB中的断点完全相同。 GDB中的这样一个断点也会被击中100次。

如果您只希望binding.pry被命中一次,那么对于循环的第一次迭代,则使用binding.pry上的条件,如下所示:

(1..100).each do |i|
  binding.pry if i == 1
  puts i
end

然后只需输入exit即可退出当前会话。

答案 6 :(得分:1)

基于上述前两个答案:

谢谢你们!你的建议对我帮助很大!

我只是想分享一个简单的愚蠢技巧,我个人不会一直担心var options = { multiExpand: true, allowAllClosed: false }; var accordion = new Foundation.Accordion($('#some-accordion'), options); 环境变量。将此回调永久添加到项目的基本控制器DISABLE_PRY。每次调用ApplicationController时,它都会自动重新启用PRY:

disable-pry

答案 7 :(得分:0)

使用宝石pry-moves,您可以使用f(完成命令)退出循环


示例:

    42: def test
    43:   3.times do |i|
 => 44:     binding.pry
    45:     puts i
    46:   end
    47:   puts :finish
    48: end

[1] pry(main)> f
0
1
2

Frame: 0/1 method
From: playground/sand.rb:47 main

    42: def test
    43:   3.times do |i|
    44:     binding.pry
    45:     puts i
    46:   end
 => 47:   puts :finish
    48: end

答案 8 :(得分:0)

按“ q”,您将看到这样的

[1] pry(#<AlbumsController>)>

类型

exit

如果没有,这一个字就能做到

control + c

答案 9 :(得分:0)

如果你只需要调试一次迭代,你可以只提出错误,逃避保证:

(1..100).each do |i|
  binding.pry
  raise
  puts i
end

或有条件:

(1..100).each do |i|
  if i == 50
    binding.pry 
    raise
  end
  puts i
end