我在Ruby(JRuby)代码中放入什么来打入调试器?

时间:2010-03-24 00:02:16

标签: ruby debugging jruby break

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

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

(即我在Python中寻找与import pdb;pdb.set_trace()相当的Ruby / JRuby。)

3 个答案:

答案 0 :(得分:5)

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

  1. debug-commons中的ruby-debug-base-0.10.3.1-java.gem手动下载到本地目录。
  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
  4. debugger命令现在可以正常工作。

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

    有关Netbeans wikirdebug wikiJRuby wiki

    的更多信息

答案 1 :(得分:1)

require 'rubygems'
require 'ruby-debug'
debugger

答案 2 :(得分: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支持可用。”)但它似乎有效。