如何调试Ruby代码?

29

我在运行Ubuntu 10.10,并想要调试一个简单的脚本。花了半天时间尝试各种方法,但最终放弃了。我应该怎么办?

我从Ubuntu软件仓库安装了ruby-dev,并执行了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的执行目录不在我的路径中。所以,至少rdebug现在似乎可以使用了。


相关问题,虽然更专注于printf调试:https://dev59.com/VW865IYBdhLWcg3wKLT5 - Andrew Grimm
可能是如何调试Ruby脚本?的重复问题。 - Ciro Santilli OurBigBook.com
如果您想了解如何使用 pry-byebugpry 来暂停、检查、继续执行以及进入和退出方法,可以查看我的答案获取更加实时的回答。 - software_writer
11个回答

0

尝试默认的 Ruby 调试器,方法如下:

ruby -r debug filename[, ...] 

或者如果它是CLI脚本,只需更改其第一行:

#!/usr/bin/env ruby

to:

#!/usr/bin/env ruby -rdebug

脚本将在每个异常处停止。

或者检查以下脚本示例:

#!/usr/bin/env ruby
class Hello
   def initialize( hello )
      @hello = hello
   end
   def hello
      @hello
   end
end

salute = Hello.new( "Hello, Mac!" )
puts salute.hello

你可以按照以下步骤进行调试:
# ruby -r debug hello.rb
Debug.rb
Emacs support available.

hello.rb:3:class Hello
(rdb:1) v l
  salute => nil
(rdb:1) b 10
Set breakpoint 1 at hello.rb:10
(rdb:1) c
Hello, Mac!

来源: Ruby调试器


或者使用lldb/gdb。以下是将脚本回溯打印到前台的简单示例:

echo 'call (void)rb_backtrace()' | lldb -p $(pgrep -nf ruby)

如果更适合,将lldb替换为gdb。在非所拥有的进程上调试时,请加上sudo前缀。


一个很不错的概念。使用内置调试器。谁会想到呢。反正,这对我很有效。ruby-debug是否已经作为默认调试器集成到了ruby命令中,还是这是另一种不同的工具? - labyrinth
我也不是Ruby开发人员,但在某个时候我不得不调试一些我不熟悉的代码。 - kenorb

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