デバッガを使う

だんだんRailsに慣れてくると、途中で止めて変数の内容を見たり、ステップ実行したりというようなデバッキングがしたくなりますよね。Rails2.0では ruby-debugを使った debuggerが正式に採用されて使い方も簡単ということだったのでやってみたのですが・・・。(以下、Windowsの場合です)

インストール

まず、gemで ruby-debugのインストールを行います。

 C:\www\2.5-55.jp> gem install ruby-debug
 Need to update 49 gems from http://gems.rubyforge.org
 .................................................
 complete
 Install required dependency columnize? [Yn]  Y
 Install required dependency ruby-debug-base? [Yn]  Y
 Select which gem to install for your platform (i386-mswin32)
  1. ruby-debug-base 0.10.1 (mswin32)
  2. ruby-debug-base 0.10.1 (ruby)
  3. Skip this gem
  4. Cancel installation
 > 1
 Install required dependency linecache? [Yn]  Y
 Select which gem to install for your platform (i386-mswin32)
  1. linecache 0.42 (mswin32)
  2. linecache 0.42 (ruby)
  3. linecache 0.41 (mswin32)
  4. linecache 0.41 (ruby)
  5. Skip this gem
  6. Cancel installation
 > 1
 Successfully installed ruby-debug-0.10.1
 Successfully installed columnize-0.1
 Successfully installed ruby-debug-base-0.10.1-mswin32
 Successfully installed linecache-0.42-mswin32
 Installing ri documentation for ruby-debug-0.10.1...
 Installing ri documentation for columnize-0.1...
 Installing ri documentation for ruby-debug-base-0.10.1-mswin32...
 Installing ri documentation for linecache-0.42-mswin32...
 Installing RDoc documentation for ruby-debug-0.10.1...
 Installing RDoc documentation for columnize-0.1...
 Installing RDoc documentation for ruby-debug-base-0.10.1-mswin32...
 Installing RDoc documentation for linecache-0.42-mswin32...

すべて(mswin32)の最新を選択しました。正常にインストールされてるようです。

実行

WEBサーバ(Mongrel)をデバッグモード(-u)で起動します。

 C:\www\2.5-55.jp> ruby script/server -p3002 -u
 => Booting Mongrel (use 'script/server webrick' to force WEBrick)
 => Rails application starting on http://0.0.0.0:3002
 You need to install ruby-debug to run the server in debugging mode. With gems, use 'gem install ruby-debug'

ruby-debugを入れたはずなのにインストールしろといってきます。おかしいです。(これはたまたま特定の環境でのみ発生する現象かもしれません。ググっても同様の情報はほぼありませんでしたから)

調査

こういうとき、rubyはソースがエディタで読めるのでありがたいですね。

  1. grepで「C:\ruby\*.rb」から 'need to install ruby-debug'を探します。「C:\ruby\lib\ruby\gems\1.8\gems\rails-2.0.2\lib\commands\servers\base.rb」にありました。
  2. なかを見てみると「require_library_or_gem 'ruby-debug'」で「ruby-debug.rb」を requireしようとしているところで例外を出しているようです。
  3. irbで「require_library_or_gem 'ruby-debug'」とやると、require_library_or_gemが定義されていないと怒られるので、「require 'ruby-debug'」とやってみたところ、エラーが表示されました。
  4. 「LoadError: no such file to load -- c:/ruby/lib/ruby/gems/1.8/gems/linecache-0.42-mswin32/lib/../ext/trace_nums」ということなので、trace_nums.rbを requireしようとして、そんなファイルないと言われてるようです。
  5. 実際、linecacheのフォルダを見てみても trace_numsは .cと .hのファイルがあるだけで .rbはありません。そもそも、このextフォルダは拡張ライブラリを作成するためのもののようです。

解決

じゃあ、これはいらないんじゃね、ということで、該当箇所をコメントアウトすることにしました。もし他のエラーが出るようならそのときはそのときで考えればいいし。

edit C:\ruby\lib\ruby\gems\1.8\gems\linecache-0.42-mswin32\lib\tracelines.rb
# require File.join(@@SRC_DIR, '..', 'ext', 'trace_nums')

この対処の後、WEBサーバをデバッグモードで起動するとちゃんと動いてデバッグもできました。

参考

  1. こちら(→Rails 2.0でデバッグをする新しいやり方 - Hello, world! - s21g)を参考にやってみました。いろいろと参考にさせていただいています。
  2. ruby-debugの使い方はこちら(→Ruby On Rails ピチカート街道 - Rails 2.0・その10(ruby-debugコマンドマニュアルv.0.10.0 デバッグの方法が簡単に) -)が詳しいです。たぶん、これからお世話になります。