我在Rails应用程序中使用了撬。我设置了绑定。窥探我的模型中的一个循环,尝试调试一个问题。例如:

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

当我输入quit时,它会进入下一个迭代并再次停止。是否有一种方法可以退出循环,这样我就不必键入退出100次了?

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


当前回答

Use

disable-pry

若要可恢复,请将此添加到控制器中

ENV['DISABLE_PRY'] = nil

其他回答

使用gem pry-moves,你可以使用f (finish命令)跳出循环


例子:

    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

我使用:

disable-pry

这将保持程序运行,但将防止它继续停止执行。当您在控制台中调试时,这尤其有用。

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

如果你只想要绑定。在循环的第一次迭代中,要命中一次Pry,然后在绑定上使用条件。像这样撬:

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

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

如果你只需要调试一次迭代,你可以直接抛出错误,转义保证:

(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

Use

disable-pry

若要可恢复,请将此添加到控制器中

ENV['DISABLE_PRY'] = nil