如何调试Ruby脚本

173

我从互联网上复制了以下Ruby代码,并进行了一些更改,但它无法正常工作。

我该如何自行调试程序?


8
投票重新开放。原帖明显想要类似GDB的单步调试功能。 - Ciro Santilli OurBigBook.com
请查看“debug.rb” - 由Ruby核心团队开发的新的Ruby调试工具。 - Marian13
为了得到更加实时的答案,展示如何使用 pry-byebugpry 来暂停、检查、继续执行、进入和退出方法,请查看我在类似问题中的回答 - software_writer
17个回答

6

从Ruby 2.4.0开始,可以更轻松地在任何Ruby程序中启动IRB REPL会话。将以下代码放置在您想要调试的程序中的位置:

require 'irb'
binding.irb

你可以运行 Ruby 代码并打印本地变量。键入 Ctrl+D 或 quit 结束 REPL,让 Ruby 程序继续运行。

你也可以使用 putsp 在程序运行时打印出值。


5
  1. 您可以在途中打印出变量
  2. 打开-w(警告)标志
  3. 使用诸如ruby-debug之类的工具

2
我想补充一下,irb 是一个很好的起点。试着用 irb 来处理小的可疑代码块。我喜欢 ruby-debug(Ruby 1.9+ 的 ruby-debug19)因为它可以轻松地停止正在运行的程序,检查变量,进入 irb,然后继续运行。 - the Tin Man

4
如果您使用RubyMine,调试Ruby脚本就变得简单而直接。
假设您有一个名为hello_world.rb的Ruby脚本。
1.设置断点
在第6行设置断点,如下所示。

enter image description here

2. 开始调试

现在,您可以启动调试器来运行脚本:

enter image description here

enter image description here

3. 检查变量等

当执行到断点时,您可以检查变量等信息。

enter image description here

供您参考的更多信息

  1. 如果您想使用RubyMine进行远程调试, 您可以这样做。
  2. 如果您想使用RubyMine对运行在Docker中的Rails进行远程调试, 也很简单。

我们有办法在RubyMine中调试外部库吗? - Am33d

3

2

printf调试

关于调试技术,一直存在争议,有些人喜欢通过打印语句来进行调试,而其他人则喜欢通过调试器深入挖掘。

我建议你尝试这两种方法。

实际上,最近有一位老的Unix专家表示,在某些情况下,printf调试是他更快的方式。

但如果你是新工作中需要理解大块代码的人,那么穿插其中,设置一些断点,跟踪它的工作方式非常有用。

这应该会让你了解代码的编织方式。

如果你是新接触其他人的软件,可能会对你有所帮助。

你很快就会发现,他们是否以聪明的方式排列,或者只是一堆垃圾。


这无疑是最好的答案,但它取决于情况。 - menriquez

1
最基本的调试器就是打印输出。大多数时候,你可能只想检查一些简单的对象,一个快速而简单的方法如下:
@result = fetch_result

p "--------------------------"
p @result

这将在内容前面打印一行以便于识别,并将@result的内容打印到标准输出。

如果您使用像Rails这样的自动加载/重新加载框架,那么奖励就来了,您甚至不需要重新启动应用程序。(除非由于框架特定设置而未重新加载要调试的代码)

我发现这对我90%的用例都有效。您也可以使用ruby-debug,但我大多数时候觉得它过度杀伤力。


1

有许多具有不同功能的调试器,您可以根据自己的需求进行选择。我满足于pry-moves,因为它具备以下特点:

  • 快速易懂的使用说明
  • 直观的步骤(如轻松进入块)
  • “回溯”功能(pry-moves部分满足了这一需求)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接