2010-03-24 49 views
6

我熟悉一些JRuby代码,并且希望能够在代码中放置一个断点并从命令行运行(像往常一样),让它在达到那个时候进入调试器点。有什么我可以放在我的代码强制JRuby进入调试器?我要在我的Ruby(JRuby)代码中插入调试器?

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

(即我找了Ruby/JRuby的当量import pdb;pdb.set_trace()在Python)。

回答

5

你可以尝试NetbeansRuby IDE,它拥有嵌入式JRuby解释和调试工具,您可以在视觉上调试IDE直接。
如果使用IDE不是一个选择,只是去debug创业板安装到你的JRuby的发行版,并通过debugger命令使用它:

  1. 手动下载红宝石调试基本0.10.3.1的Java。宝石从debug-commons到本地目录。
  2. 安装宝石到你的JRuby宝石库:
    jruby -S gem install -l ruby-debug-base-0.10.3.1-java.gem
  3. 安装Ruby调试宝石:
    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

+0

Netbeans对我来说很好,只需要一点点配置。谢谢! – 2010-03-25 18:13:33

+1

在JRuby 1.5+中,所有必需的gem将默认安装,因此不需要安装任何东西(特别是使用非默认命令行选项)。因此,调试将在JRuby 1.5+开箱即用。 – vsizikov 2010-04-13 11:24:02

1
require 'rubygems' 
require 'ruby-debug' 
debugger 
+0

我得到了“LoadError:没有这样的文件加载 - ruby​​-debug” - 也许这在JRuby中不起作用? – 2010-03-24 00:11:34

+0

JRuby显然不支持非本地Ruby组件的任何gem;谷歌出现以下情况,但我不知道它是否有什么好处:http://debug-commons.rubyforge.org/ – bnaul 2010-03-24 00:36:53

1

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

相反的是人说的信息,不存在不似乎是预装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支持可用”),但它似乎工作。