加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 使用pry-byebug设置条件断点

发布时间:2020-12-17 02:49:39 所属栏目:百科 来源:网络整理
导读:给出以下代码: require 'pry-byebug'10.times.with_index do |i| binding.pry puts iend 我想在“pry-byebug”中“循环直到i == 5然后休息”.从运行它帮助打破它似乎你可以通过“断点#”或“线#”识别断点.它似乎也可以使用条件,但是我没有让它工作: 试图
给出以下代码:

require 'pry-byebug'

10.times.with_index do |i|
  binding.pry
  puts i
end

我想在“pry-byebug”中“循环直到i == 5然后休息”.从运行它帮助打破它似乎你可以通过“断点#”或“线#”识别断点.它似乎也可以使用条件,但是我没有让它工作:

试图在#行上设置断点:

$ 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都不尊重这种情况,因为它太早停止了.我如何让它工作?

解决方法

从循环内部删除binding.pry并将其放在10.times之前:

binding.pry
10.times.with_index do |i|

然后运行代码.当它到达断点时,然后使用您想要的条件设置一个新的断点并继续.

回到你的实际代码.不要这样做:

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|

第二个只传递当前的“时间”值,从而产生更简单的代码.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读