我从互联网上复制了以下Ruby代码,并进行了一些更改,但它无法正常工作。
我该如何自行调试程序?
从Ruby 2.4.0开始,可以更轻松地在任何Ruby程序中启动IRB REPL会话。将以下代码放置在您想要调试的程序中的位置:
require 'irb'
binding.irb
你可以运行 Ruby 代码并打印本地变量。键入 Ctrl+D 或 quit
结束 REPL,让 Ruby 程序继续运行。
你也可以使用 puts
和 p
在程序运行时打印出值。
-w
(警告)标志irb
是一个很好的起点。试着用 irb
来处理小的可疑代码块。我喜欢 ruby-debug(Ruby 1.9+ 的 ruby-debug19)因为它可以轻松地停止正在运行的程序,检查变量,进入 irb,然后继续运行。 - the Tin Man现在,您可以启动调试器来运行脚本:
当执行到断点时,您可以检查变量等信息。
def say(word)
require 'debug'
puts word
end
printf调试
关于调试技术,一直存在争议,有些人喜欢通过打印语句来进行调试,而其他人则喜欢通过调试器深入挖掘。
我建议你尝试这两种方法。
实际上,最近有一位老的Unix专家表示,在某些情况下,printf调试是他更快的方式。
但如果你是新工作中需要理解大块代码的人,那么穿插其中,设置一些断点,跟踪它的工作方式非常有用。
这应该会让你了解代码的编织方式。
如果你是新接触其他人的软件,可能会对你有所帮助。
你很快就会发现,他们是否以聪明的方式排列,或者只是一堆垃圾。
@result = fetch_result
p "--------------------------"
p @result
这将在内容前面打印一行以便于识别,并将@result的内容打印到标准输出。
如果您使用像Rails这样的自动加载/重新加载框架,那么奖励就来了,您甚至不需要重新启动应用程序。(除非由于框架特定设置而未重新加载要调试的代码)
我发现这对我90%的用例都有效。您也可以使用ruby-debug,但我大多数时候觉得它过度杀伤力。
有许多具有不同功能的调试器,您可以根据自己的需求进行选择。我满足于pry-moves,因为它具备以下特点:
pry-byebug
和pry
来暂停、检查、继续执行、进入和退出方法,请查看我在类似问题中的回答。 - software_writer