我将 Pry 与我的 Rails 应用程序一起使用。我binding.pry
在模型中设置了一个循环来尝试调试问题。例如:
(1..100).each do |i|
binding.pry
puts i
end
当我输入quit
时,它会进入下一次迭代并再次停止。有没有办法跳出循环,所以我不必输入quit
100 次?
目前我知道如何摆脱它的唯一方法是使用CTRL+C并重新启动应用程序。
我将 Pry 与我的 Rails 应用程序一起使用。我binding.pry
在模型中设置了一个循环来尝试调试问题。例如:
(1..100).each do |i|
binding.pry
puts i
end
当我输入quit
时,它会进入下一次迭代并再次停止。有没有办法跳出循环,所以我不必输入quit
100 次?
目前我知道如何摆脱它的唯一方法是使用CTRL+C并重新启动应用程序。
要无条件退出 Pry,请键入
exit-program
从@Nick 的评论编辑:也有效:
!!!
我用:
disable-pry
这将保持程序运行,但会阻止它继续停止执行。当您在控制台中进行调试时,这尤其有用。
要退出所有内容,请使用:
exit!
这应该忽略所有正在进行的绑定。
三重感叹号 ( !!!
) 可以做到这一点。
采用
disable-pry
要重新启用,请将其添加到您的控制器
ENV['DISABLE_PRY'] = nil
语句与 GDB 中的binding.pry
断点完全相同。GDB 中的这样一个断点也会被命中 100 次。
如果您只想binding.pry
命中一次,对于循环的第一次迭代,请使用类似的条件binding.pry
:
(1..100).each do |i|
binding.pry if i == 1
puts i
end
然后,您只需键入即可退出当前会话exit
。
使用 gem ,您可以使用(finish 命令)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
按'q',你会看到像这样
[1] pry(#<AlbumsController>)>
类型
exit
如果没有,这一个词就可以了:
control + c
基于以上两个先前的答案:
谢谢你们!你的建议对我帮助很大!
我只是想分享一个简单的愚蠢技巧,我个人使用它来一直不用担心DISABLE_PRY
环境变量。将此回调ApplicationController
永久添加到项目的基本控制器。每次disable-pry
调用它都会自动重新启用 PRY:
# app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
before_action :reenable_pry
private
def reenable_pry
ENV['DISABLE_PRY'] = nil
end
end
如果您只需要调试一次迭代,则可以只引发错误,转义保证:
(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