我正在使用Pry和我的Rails应用程序。我在模型的循环中设置binding.pry
以尝试调试问题。例如:
(1..100).each do |i|
binding.pry
puts i
end
当我输入quit
时,它会进入下一次迭代并再次停止。有没有办法走出循环,所以我不必输入quit
100次?
目前,我知道如何摆脱它的唯一方法是使用 CTRL + C 并重新启动应用程序。
答案 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