【问题标题】:What do I put in my Ruby (JRuby) code to break into the debugger?我应该在我的 Ruby (JRuby) 代码中加入什么来闯入调试器?
【发布时间】:2011-01-31 01:30:34
【问题描述】:

我正在熟悉一些 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。)

【问题讨论】:

    标签: ruby debugging jruby break


    【解决方案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.”),但它似乎可以工作。

    【讨论】:

      【解决方案2】:

      你可以试试NetbeansRuby IDE,它嵌入了JRuby解释器和调试工具,你可以直接在IDE中进行可视化调试。
      如果您不适合使用 IDE,只需将 de debug gem 安装到您的 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 wiki、rdebug wiki 和JRuby wiki 的更多信息

      【讨论】:

      • Netbeans 对我来说工作得很好,只需要一点点配置。谢谢!
      • 在 JRuby 1.5+ 中,所有必需的 gems 都将默认安装,因此不需要安装任何东西(尤其是使用非默认命令行选项)。因此,调试将在 JRuby 1.5+ 中开箱即用。
      【解决方案3】:
      require 'rubygems'
      require 'ruby-debug'
      debugger
      

      【讨论】:

      • 我得到了“LoadError: no such file to load -- ruby​​-debug”——也许这在 JRuby 中不起作用?
      • 显然 JRuby 不支持任何带有非原生 Ruby 组件的 gem;谷歌出现了以下内容,但我不知道它是否有任何好处:debug-commons.rubyforge.org
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-30
      • 1970-01-01
      • 2019-10-30
      • 1970-01-01
      • 2021-10-19
      • 1970-01-01
      相关资源
      最近更新 更多