考虑到以下代码:
require 'pry-byebug'
10.times.with_index do |i|
binding.pry
puts i
end我想“循环直到i == 5然后中断”,而在pry-byebug内部。通过运行help break,您似乎可以通过“断点#”或“行#”来识别断点。您似乎也可以使用条件,但我无法让它工作:
试图在行#上设置断点:
$ ruby foo.rb
From: /Users/max/Dropbox/work/tmp/pry_debug/foo.rb @ line 5 :
1: require 'pry-byebug'
2:
3: 10.times.with_index do |i|
4: binding.pry
=> 5: puts i
6: end
[1] pry(main)> break foo.rb:5 if i == 5
Breakpoint 1: /Users/max/Dropbox/work/tmp/pry_debug/foo.rb @ 5 (Enabled) Condition: i == 5
2:
3: 10.times.with_index do |i|
4: binding.pry
=> 5: puts i
6: end
[2] pry(main)> continue
0
From: /Users/max/Dropbox/work/tmp/pry_debug/foo.rb @ line 5 :
1: require 'pry-byebug'
2:
3: 10.times.with_index do |i|
4: binding.pry
=> 5: puts i
6: end
[2] pry(main)> i
=> 1首先设置断点,然后在断点上设置条件:
➜ ~/D/w/t/pry_debug ruby foo.rb
From: /Users/max/Dropbox/work/tmp/pry_debug/foo.rb @ line 5 :
1: require 'pry-byebug'
2:
3: 10.times.with_index do |i|
4: binding.pry
=> 5: puts i
6: end
[1] pry(main)> break foo.rb:15
Breakpoint 1: /Users/max/Dropbox/work/tmp/pry_debug/foo.rb @ 15 (Enabled)
[2] pry(main)> break --condition 1 i == 5
[3] pry(main)> c
0
From: /Users/max/Dropbox/work/tmp/pry_debug/foo.rb @ line 5 :
1: require 'pry-byebug'
2:
3: 10.times.with_index do |i|
4: binding.pry
=> 5: puts i
6: end
[3] pry(main)> i
=> 1正如您所看到的,在这两种情况下,pry-byebug都不尊重这个条件,因为它停止得太快。我怎么才能让它起作用?
发布于 2017-01-05 17:17:10
从循环内部删除binding.pry,并将其放在10.times之前
binding.pry
10.times.with_index do |i|那就运行代码。当它到达断点时,使用您想要的条件和continue设置一个新的断点。
回到你的实际代码。别这么做:
10.times.with_index do |i|相反,这将做几乎相同的事情,但它更简单:
10.times do |i|Ruby正在做的事情如下:
>> 2.times.with_index.to_a
[
[0] [
[0] 0,
[1] 0
],
[1] [
[0] 1,
[1] 1
]
]与
>> 2.times.to_a
[
[0] 0,
[1] 1
]第一个是传入[0,0]、[1,1]等数组,因此为了正确起见,您的块参数需要如下所示:
10.times.with_index do |i, j|第二个只传递当前的"times“值,从而得到更简单的代码。
发布于 2017-01-04 23:26:49
我认为一个简单的方法是在代码中这样做:
require 'pry-byebug'
10.times.with_index do |i|
binding.pry if i == 5
puts i
end或者,如果您想在异常时停下来,您可以这样做:
require 'pry-byebug'
10.times.with_index do |i|
puts i rescue binding.pry # if the puts command throws an exception, you'll be taken to pry
endhttps://stackoverflow.com/questions/41474811
复制相似问题