如何调试ruby代码?

bas*_*ibe 27 ruby debugging

我运行Ubuntu 10.10.我只是想调试一个简单的脚本.在花了半天时间试图弄清楚如何做到这一点后,我放弃了.我该怎么办?

ruby-dev从Ubuntu存储库安装
我运行sudo gem install ruby-debugsudo gem install ruby-debug-ide

我尝试了几种不同的方法来完成这项工作.我尝试require 'ruby-debug'然后debugger在代码中设置某个地方.但是Ruby找不到ruby-debug.
我尝试设置vim-ruby-debugger,这将需要很长时间才能执行:Rdebugger myScript.rb,并允许我设置断点,但似乎没有办法使用该调试器执行我的代码.
我尝试使用NetBeans,每次设置项目并单击任何内容时,它都会崩溃.

所以,亲爱的社区:必须有一种方法来调试Ruby.不是Rails.没有什么花哨.只是一些CLI脚本.请帮助我,否则我将失去理智.

编辑: gem exec dir不在我的路径中.所以,至少rdebug现在似乎有效.

the*_*Man 20

Ruby-debug适用于1.8+,ruby-debug19适用于1.9+.

ruby-debug易于学习且非常有用.您可以告诉应用程序在某个条件存在之前运行,然后让它中断,从而可以轻松找到零值或偶尔出现的其他条件.

从命令行使用rdebug appname,您将在调试器提示符处结束.如果你想运行到第100行并停止你可以进入c 100并且调试器将设置一个临时断点,程序将运行然后停在那里,如果它在执行路径中.一旦停止,临时断点将被清除.如果你总是想停在100行,你可以做b 100,然后c和调试器将设置一个永久性断点,继续,然后到达断点时停止.您可以清除断点,设置在某些条件适用时发生的条件,等等.您可以键入n以跳过子程序调用的下一条指令,或者单s步执行它们.有些命令以各种方式显示变量的内容,因此请阅读文档.

从rdebug里面你可以放入一个IRB shell,你的变量已经填充好了,这样你就可以看看会发生什么.从内部,您可以检查或设置值,帮助进行假设调整.如果您在rdebug中执行此操作,则可以使用更改的值继续执行该程序并查看其行为方式.

IRB有它的位置,它非常适合尝试,但它不是调试器的替代品,就像调试器可以做一些IRB-ish的东西,但不会取代它.这两种工具都是一个很好的组合,并且不依赖于打印语句或转储到日志文件.


Pry已经成为IRB和调试器的完美组合,值得研究.

  • 图形调试器非常漂亮,但它们提供的功能必须存在于较低级别,在图形下,否则它们将无法呈现任何内容.我花了很多时间在命令行上,忘记了IDE中的漂亮布局.不过,我依靠命令行调试器来向我展示变量中真正隐藏的内容; 我对它应该是什么有我的看法,但有时候翻译不同意我 - 而且在我说出不同之前它总是胜利.:-) (3认同)

小智 12

是好于IRB.以下是从README中获取的内容.

Pry是Ruby的标准IRB shell的强大替代品.它是从头开始编写的,提供了许多高级功能,包括:

  • 源代码浏览(包括带有pry-doc gem的核心C源代码)
  • 文档浏览
  • 实时帮助系​​统
  • 在编辑器中打开方法(编辑方法类#方法)
  • 语法突出显示
  • 命令shell集成(从Pry中启动编辑器,运行git和rake)
  • 要点整合
  • 在州周围导航(cd,ls和friends)
  • 运行时调用(使用Pry作为开发人员控制台或调试器)
  • 异构对象支持(BasicObject实例,IClasses,...)
  • 强大而灵活的指挥系统
  • 能够查看和重播历史记录

  • 许多便利命令受到IPython,Smalltalk和其他高级REPL的启发

  • 大量插件,提供远程会话,完整调试功能等.

Pry还旨在不仅仅是IRB的替代品; 它试图将REPL驱动的编程引入Ruby语言.它目前没有SLIME这样的工具能够像lisp一样强大,但这是Pry正朝着的大方向.

Pry也相当灵活,允许重要的用户定制很简单,可以将其设置为从具有readline方法的任何对象读取并写入任何具有puts方法的对象--Pry的许多其他方面也是可配置的,使其成为一个很好的选择实现自定义shell.


Jee*_*eet 5

  1. 在Ruby中:

    ruby -rdebug myscript.rb然后,

    • b:放点断点
    • 和n(ext)或s(tep)和c(ontinue)
    • p(uts)用于显示
  2. 在Rails中:使用启动服务器

    • 脚本/服务器--debugger

      并在代码中添加调试器.