适用于Ruby的调试方法

时间:2016-10-09 17:22:16

标签: ruby debugging syntax runtime-error

RubyAlgorithmsTest.rb:31:in `+': no implicit conversion of Array into String (TypeError)
    from RubyAlgorithmsTest.rb:31:in `block in get_dependencies'
    from RubyAlgorithmsTest.rb:29:in `each'
    from RubyAlgorithmsTest.rb:29:in `get_dependencies'
    from RubyAlgorithmsTest.rb:81:in `read_file'
    from RubyAlgorithmsTest.rb:90:in `<main>'

我是Ruby编程的新手,我想知道如何解读上面显示的错误堆栈。我不知道如何判断错误首先出现在哪一行。我是按时间顺序读取堆栈的吗?这是代码的GitHub仓库:https://github.com/jeffreyyong/RubyAlgorithmsTest/

1 个答案:

答案 0 :(得分:3)

错误发生在第31行。这几乎总是正确的,但有时候实际问题会在其他地方发生,Ruby会在以后抱怨它。这在语法错误中更常见(例如,缺少结束块)。下一个线索是+,所以寻找你在做什么。看起来您正在尝试将Array连接到不允许的String。

堆栈跟踪的其余部分告诉您如何使用该行代码。因此,称为第28行的第90行称为第31行。

此时您有几个选择。您可以在第31行上方放置一些puts dependencies.inspectputs found_dependency.inspect并查看其内容。

或者您可以使用像Pry这样的工具(强烈推荐!)并暂停程序以检查它。要做到这一点,你需要:

  1. 通过“gem install pry”
  2. 安装gem
  3. 在ruby文件的顶部添加以下两行:

    要求'rubygems' 要求'撬'

  4. 在第31行上方添加第binding.pry

  5. 现在正常运行您的程序。
  6. 当Ruby到达binding.pry行时,它将打开一个IRB(技术上是Pry,但同样的东西)提示,你可以在那里检查代码。

    因此,您只需键入dependencies.class之类的内容即可返回结果。非常适合在那个位置搜索你的数据并弄清楚出了什么问题。