同じにやっても動かない

書いてある通りやっているのに動かないのです

Windows7でRails3 + NetBeans + デバッガー が動かない

Rails3のコーディング環境としてNetBeansを使っております。
せっかくNetBeans使っているのでどうしてもデバッガーを動かしたくなりました。

ググってみると皆様苦労されているようでして、成功事例はいくつかあるものの、その通りやってもいつもの通りうまく行かないわけです。

色々とやってみたところ、ここでも動くようになりましたので、手順を紹介します。

以下の条件が同じ方は、私が遭遇した状況と似ていると思われるので、参考にして頂くと良いかもしれません。

  • RubyのバージョンがRubyInstaller 1.9.3
  • NetBeansのバージョンが7.3
  • linecach19のインストールはうまくいくけど、ruby-debug-base19がインストールできない

関係あるかどうかわからないけど、事前にやっていたこと

Rubyのインストール】
RubyInstallerバージョンが良いと下記参照サイトに書いてありましたので、1.9.3の最新版をインストールします。

Action*3 WindowsでRuby1.9.2+Rails3+NetBeans6.9.1+Debugger
各種バージョンが違うからか、このサイトで教えて頂いた方法では上手くインストールできませんでした。

【gemのアップデート】

> gem update --system

ちなみに私の環境では、下記のようなエラーがでてこれすらはまります。

ERROR:  While executing gem ... (ArgumentError)
    invalid byte sequence in Windows-31J

ここでもググって先人の知恵をお借りし、

> set LANG=ja_JP.UTF-8

してからアップデートできることがわかりました。

【rakeのアップデート】

> gem update rake

ちなみに、ここで先程のLANG環境変数を設定してあると、今度はこれがこけますのでご注意ください。

railsのインストール】

> gem install rails

ruby-debug***のインストール

【Devkitのインストール】
Devkitをインストールします。
RubyInstallerのダウンロードページからDevKit-tdm-32-4.5.2-20111229-1559-sfx.exeをダウンロードし、適当な場所に解凍してください。
私は "c:\rubydevkit" というフォルダを作り、そこに解凍しました。

rubyのパスが通っているコマンドプロンプトで以下を叩いてインストール終了です。

> cd c:\rubydevkit
> ruby dk.rb init
> ruby dk.rb install
> devkitbars.bat

【linecache19のインストール】
これが通らない場合は、何か私の環境と違う原因があると思われます。

> gem install linecache19

ruby-debug-base19のインストール】
こいつがくせものです。
素直に

> gem install ruby-debug-base19

しても

> ruby_debug.c:29:19: error: conflicting types for 'rb_iseq_compile_with_option'

となってエラー終了します。

ぐぐると色々な方法が書いてあるのですが、私の所でうまく行ったのは、最新のgemをダウンロードしてきてローカルでインストールする方法。
どうも、gemサーバーにあるruby-debug-base19(ruby-debug-base19-0.11.25)が良くないようで、最新版(ruby-debug-base19-0.11.26)だと問題なくインストールできる模様。

というわけでここからダウンロードしてきてインストールします。

> cd 'gemをダウンロードしたフォルダ'
> gem install -l ruby-debug-base19-0.11.26.gem

ruby-debug-ide19のインストール】
ruby-debug-base19がインストールできれば、問題なくインストールできるはずです。

> gem install ruby-debug-ide19

【ちゃんとインストールできたか確認
アプリケーションのルートで、デバッガーオプション付きでサーバーを立ち上げてみましょう。

> rails s -u

下記のようなログが出ていれば、インストール成功です。

=> Booting WEBrick
=> Rails 3.2.9 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
.......
=> Debugger enabled
[2013-03-12 16:19:49] INFO  WEBrick 1.3.1

NetBeansの設定

NetBeansのバージョンは7.1.2】
当初NetBeans 7.3で試していたのですが、なぜか"プロジェクトをデバッグ(F5)"が全然動作しません。
バージョンを7.1.2にしたところばっちり動いたので、とりあえず7.1.2で使用を開始しました。
7.3で動かす方法をご存知の方は教えて頂けますと嬉しいです。

ちなみに、NetBeansRails対応にする方法は下記ページを参照して頂くと良いと思います。私もここを参考にインストールしました。
NetBeans 7.1にRuby on Railsプラグインをインストールする手順

【アプリケーションのGemfileを修正】
下記を追記します。

# To use debugger
gem 'ruby-debug19'

念のため bundle install しておきます。

> bundle install

【ここでデバッガーを立ち上げる】
メニューバーの、デバッグ -> プロジェクトをデバッグ でデバッガー付きでサーバーを立ち上げます。
そうするとNetbeansの出力ウインドウに下記エラーが出るはず。

Fast Debugger (ruby-debug-ide 0.4.16, ruby-debug-base 0.11) listens on 127.0.0.1:53555
        C:/Ruby193p392/lib/ruby/gems/1.9.1/gems/ruby-debug-ide-0.4.16/lib/ruby-debug-ide.rb:120:in `debug_load'
        C:/Ruby193p392/lib/ruby/gems/1.9.1/gems/ruby-debug-ide-0.4.16/lib/ruby-debug-ide.rb:120:in `debug_program'
        C:/Ruby193p392/lib/ruby/gems/1.9.1/gems/ruby-debug-ide-0.4.16/bin/rdebug-ide:87:in `<top (required)>'
        C:/Ruby193p392/bin/rdebug-ide:19:in `load'
        C:/Ruby193p392/bin/rdebug-ide:19:in `<main>'
Uncaught exception: no such file to load -- script\rails

これもググると、先人が対処法を残しておいてくださっています。本当に感謝。
処方箋に従い、c:\Ruby193p392\lib\ruby\gems\1.9.1\gems\ruby-debug-ide-0.4.16\lib\ruby-debug-ide.rbを修正します。

if Debugger::PROG_SCRIPT == "script#{File::ALT_SEPARATOR || File::SEPARATOR}rails"
  ps = "#{Dir.pwd}/script/rails"
else
  ps = Debugger::PROG_SCRIPT
end
bt = debug_load(ps, options.stop, options.load_mode)

これでデバッガを再起動すれば、ちゃんと動き始めます。

【見事立ち上がりブレークもかかる!がwatchで変数を確認するとすぐ落ちる。。。】
まだやることがあるようです。。。
せっかくブレークがかかるようになったのですが、今度はwatchで変数を確認しようとすると、下記エラーを吐いて接続が落ちてしまいます。

Fast Debugger (ruby-debug-ide 0.4.9) listens on :54749
Exception in DebugThread loop: undefined method `is_binary_data?' for "#<HelloWorld:0x85915fc>":String

Google先生にお願いしたところ、またもや対処法を授けてくださる先人のページを見つけてきてくれました。
c:/Ruby193p392/lib/ruby/gems/1.9.1/gems/ruby-debug-ide19-0.4.12/lib/ruby-debug/xml_printer.rbに下記コード追加で治るとのこと。

class String
  def is_binary_data?
    ( self.count( "^ -~", "^\r\n" ).fdiv(self.size) > 0.3 || self.index( "\x00" ) ) unless empty?
  end
end

そして再度起動。。。
動いた、動いたよ、変数も確認できています(涙)
f:id:nyarugo:20130312164140p:plain

長かった~
ネット上に情報を残してくださったみなさま、Google先生、本当にありがとうございました。