# Ruby 1.8系の場合
gem install ruby-debug
# Ruby 1.9系の場合
gem install debugger
bundlerの場合は
gem "ruby-debug"
をGemfile
に追記して bundle install
します。
デバッグしたい場所で debugger
メソッドをコールします。
class User
def name
debugger # ← これ
puts "千早"
end
end
rails consoleを --debugger
オプション付きで起動します。
起動時にデバッガが有効になった旨のメッセージが出力されます。
script/console --debugger
=> Debugger enabled
※ 通常のRubyプログラムの場合はruby-debugをrequireして手動でデバッガを有効にすることができます。rails consoleと同じように --debuggerオプションを実装するとよいでしょう(consoleでもrequireしているだけです)。なおDebugger.startメソッドの引数で挙動を変える事もできるようです(未検証)。
require 'ruby-debug'
#Debugger.start # やらなくてもよい
デバッグポイントを通るコードを実行します。
>> User.first.name
デバッガが起動します。以降のコンテキストはデバッガになります。
(rdb:1)
help
とtypeしてみましょう。
(rdb:1) help
ruby-debug help v0.10.4
Type 'help <command-name>' for help on a specific command
Available commands:
backtrace delete enable help method putl set trace
break disable eval info next quit show undisplay
catch display exit irb p reload source up
condition down finish kill pp restart step var
continue edit frame list ps save thread where
ヘルプが表示されました。 h は help のショートネームになっています。
eval
コマンドでデバッグポイントのコンテキストで任意のRubyコードを実行することができます。
(rdb:1) eval self
#<User id:
c[ontinue]
コマンドで次のブレークポイントまで処理を実行します。
なければ制御は console に戻ります。
(rdb:1) continue
=> "千早"
>>
q[uit]
(exit)コマンドでアタッチしているRubyのプロセスごと終了できます。
確認ダイアログを飛ばしたい場合は q!
で。
(rdb:1) q!
[tkyowa@host] $
代表的なコマンドを紹介します。
h - help <command>
<command>
のヘルプを表示します。
コマンドはフルネームで入力する必要があります(h c
などは不可)
s - step
処理を進めます(ステップイン)。
n - next
処理を進めます(ステップアウト)。
c - continue
処理を進めます(ブレークポイントで止まる)。
b - break <file:line>
ブレークポイントを設定します。 引数がない場合はブレークポイントのリストを表示します。
del - delete <num>
指定した番号のブレークポイントを削除します。 引数がない場合はすべてのブレークポイントを削除します。
disp - display <expression>
特定の式をコマンドの実行毎に評価し、表示します。 引数なしの場合は設定しているdisplayのリストが表示されます。
undisp - undisplay <num>
指定した番号のdisplayを削除します。 引数がない場合はすべてのdisplayを削除します。
irb
debuggerが実行している行のコンテキストでIRBを実行します。
l - list <-|=|nn-mm>
ソースを表示します。 引数なしの場合は現在行から以降の行を表示します。 list= で現在行のソースを表示します。 list- で現在行から前の行を表示します。
bt - backtrace(where)
バックトレースを表示します。
v[ar] cl[ass]
クラス変数をすべて表示します。
v l[ocal]
ローカル変数をすべて表示します。
v instance self
selfのインスタンス変数をすべて表示します。
info v
selfのローカル変数とインスタンス変数をすべて表示します。
詳細はコマンドのリファレンスを確認して下さい。
http://bashdb.sourceforge.net/ruby-debug.html#Debugger-Command-Reference
執筆予定
ユーザのホームディレクトリに .rdebugrc ファイルを作成すると ruby-debug実行時に読み込んでくれます。 下記のようなオプションが有用でしょう(#以降は削除して下さい)。
set autoeval # rdebugのコマンド以外は常にevalする
set autolist # 'next/step' のときに前後数行を表示
set autoreload # ソースの修正を都度読み込む
設定の一覧です。
http://bashdb.sourceforge.net/ruby-debug.html#ruby_002ddebug-settings
ruby-debug-completion と言うgemをインストールして読みこむようにすると ruby-debugインタプリタ内でコマンドや変数名などでTabキーによる自動補完が有効になります。素晴らしく便利なので導入をオススメします。
https://github.com/cldwalker/ruby-debug-completion
- http://doc.ruby-lang.org/ja/1.9.2/library/debug.html
- https://github.com/mark-moseley/ruby-debug
- http://bashdb.sourceforge.net/ruby-debug.html
- http://d.hatena.ne.jp/lurker/20060620/1150776685
- http://rubist.blog77.fc2.com/blog-entry-114.html
- http://nanorails.com/articles/2006/07/14/a-better-rails-debugger-ruby-debug/