6

我正在熟悉一些 JRuby 代码,我希望能够在代码中放置一个断点并(像往常一样)从命令行运行,让它在到达该点时进入调试器。我可以在我的代码中放入一些东西来强制 JRuby 闯入调试器吗?

我试过运行jruby -r debug foo.rb(而不是通常的jruby foo.rb),然后用 设置断点b bar.py:98,然后继续。但是每次出现异常时调试器都会停止,并且在它到达我感兴趣的代码行之前似乎有很多异常。我希望能够将“break-into-debugger”我的代码中的行并运行jruby foo.rb并让调试器停止在该行的第一个位置。

(即,我正在寻找import pdb;pdb.set_trace()Python 中的 Ruby/JRuby 等价物。)

4

3 回答 3

5

您可以尝试Netbeans Ruby IDE,它嵌入了 JRuby 解释器和调试工具,您可以直接在 IDE 中进行可视化调试。
如果您不适合使用 IDE,只需将 de debuggem 安装到您的 JRuby 发行版中并通过debugger命令使用它:

  1. 手动将 ruby​​-debug-base-0.10.3.1-java.gem 从debug-commons下载 到本地目录。
  2. 将 Gem 安装到您的 JRuby Gem 存储库中:
    jruby -S gem install -l ruby-debug-base-0.10.3.1-java.gem
  3. 安装 ruby​​-debug gem:
    jruby -S gem install --ignore-dependencies ruby-debug

debugger命令现在应该可以工作了。

# test.rb
require 'rubygems'
require 'ruby-debug'
debugger
# run like this:
jruby --debug -S rdebug test.rb

有关Netbeans wikirdebug wikiJRuby wiki的更多信息

于 2010-03-24T13:49:26.697 回答
1

我在 Windows 7 上使用 JRuby 1.7.3 (1.9.3p385)。

与人们所说的相反,似乎没有预装 JRuby 的 ruby​​-debug 版本。但是,我通过运行gem install ruby-debug. 我在我的代码中启动调试器,如下所示:

require 'rubygems'
require 'ruby-debug'
debugger

debugger您应该在想要有断点的任何地方调用该方法。

我运行这样的代码:

jruby --debug program.rb

--debug选项是可选的,但如果没有它,您会收到“跟踪(例如 set_trace_func)不会捕获没有 --debug 标志的所有事件”的警告。

此处的另一个答案使用-S rdebug了命令行上的选项。该选项对于调试不是必需的,它使调试器在程序的最开始处启动。只需在需要时调用该debugger方法启动调试器即可;不要使用该选项。

即使没有 ruby​​-debug gem,似乎仍然有一些通过debug.rb内置到 JRuby 中的基本调试。您可以简单地写入load 'debug.rb'文件以启动调试器。它打印出一些垃圾消息(“Debug.rb”和“Emacs support available.”),但它似乎工作。

于 2013-04-17T02:28:35.237 回答
1
require 'rubygems'
require 'ruby-debug'
debugger
于 2010-03-24T00:09:28.880 回答