2010-03-24 32 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支持可用」),但它似乎工作。