我熟悉一些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。)
答案 0 :(得分:5)
您可以尝试Netbeans Ruby IDE,它嵌入了JRuby解释器和调试工具,您可以直接在IDE中进行可视化调试。
如果您不想使用IDE,只需在您的JRuby发行版中安装de debug
gem并通过debugger
命令使用它:
jruby -S gem install -l ruby-debug-base-0.10.3.1-java.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
的更多信息
答案 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支持可用。”)但它似乎有效。