如何调试Ruby方法并查看我的局部变量的值是否在变化?

时间:2017-12-20 15:24:36

标签: ruby debugging

以下面的方法为例,然后调用方法:

def count(n)
  x=3
  y=5

  n+=x
  n-=y

  puts n
end

count(3)

我想知道无论如何当我在我的终端中运行这个脚本时,当它到达实际调用该方法的count(3)行时,而不是简单地输出“n”,是否存在无论如何,我可以通过一个窗口逐行浏览方法,在那里我可以看到我的局部变量(n,x和y),这样我就可以看到“n”的值随着方法在输出最终值之前执行而改变我的终端。

2 个答案:

答案 0 :(得分:1)

您可以使用byebug gem完成此操作。

您可以通过简单地插入byebug行在代码中的任何位置添加断点,也可以通过调用脚本在调试模式下运行整个脚本:

byebug something-awesome.rb

当您进入调试模式时,您可以使用step命令一次一行地执行代码。

以下是此过程的示例:

[1, 10] in /Desktop/something-awesome.rb
=>  1: def count(n)
    2:   x = 3
    3:   y = 5
    4:
    5:   n += x
    6:   n -= y
    7:
    8:   puts n
    9: end
   10:
(byebug) step

[2, 11] in /Desktop/something-awesome.rb
    2:   x = 3
    3:   y = 5
    4:
    5:   n += x
    6:   n -= y
    7:
    8:   puts n
    9: end
   10:
=> 11: count(3)
(byebug) step

[1, 10] in /Desktop/something-awesome.rb
    1: def count(n)
=>  2:   x = 3
    3:   y = 5
    4:
    5:   n += x
    6:   n -= y
    7:
    8:   puts n
    9: end
   10:
(byebug) step

[1, 10] in /Desktop/something-awesome.rb
    1: def count(n)
    2:   x = 3
=>  3:   y = 5
    4:
    5:   n += x
    6:   n -= y
    7:
    8:   puts n
    9: end
   10:
(byebug) x
3

请注意,在我跳过第2行(在控制台输出的底部)之后,我现在可以在代码中键入x以查看x的值是什么

有关所有可用命令的列表,请查看Byebug文档的commands section

答案 1 :(得分:0)

我非常喜欢pry宝石。

它是一个非常棒且功能强大的界面,允许您通过实例和类(即cd User.first),列表方法(ls)更改目录,甚至可以与shell进行交互({{ 1}}) - 所有这一切都可以从你想要的地方放一个简单的shell-mode; .pwd

另外值得注意的是,Ruby 2.5即将发布binding.pry运费 - 我还没有看过它,但这本来就是本机的,并希望不再需要第三方宝石。