Skip to content

Instantly share code, notes, and snippets.

@tkyowa

tkyowa/gist:1378694

Last active May 23, 2017
Embed
What would you like to do?
ruby-debugを使ったRuby・Railsアプリケーションのデバッグ方法

ruby-debugを使ったRailsアプリケーションのデバッグ方法

インストール

gem install ruby-debug

デバッグ方法

デバッグをしたい場所で debugger メソッドをコールします。

rails consoleを --debugger オプション付きで起動します。起動時にデバッガが有効になった旨のメッセージが出力されます。

script/console --debugger
=> Debugger enabled

デバッグポイントを通るコードを実行します。

>> User.first.name

デバッガが起動します。以降のコンテキストはデバッガになります。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 だけでも同じ結果になります。

もっとも頻繁に使うのは eval コマンドでしょう。デバッグポイントのコンテキストで任意のRubyコードを実行することができます。

(rdb:1) eval self
#<User id: 

continue コマンドで次のブレークポイントまで処理を実行します。なければ制御は console に戻ります。

(rdb:1) continue
=> "千早"
>>

ruby-debugのコマンド

代表的なコマンドを紹介します。

h[elp]

ヘルプ. h でコマンドのヘルプを表示.

デバッガ操作

s[tep]

1行づつ実行

n[ext]

処理を進める(次の行を実行する)

c[ontinue]

処理を進める(ブレークポイントで止まる)

b[reak]

ブレークポイントを設定する

backtrace

Backtraceを表示

irb

debuggerが実行している行のコンテキストでIRBを実行

プログラム内部情報参照

l[ist]

ソースを表示する(list 入力ごとに、先に読み進める)
list= で現在行のソースを表示
list- で現在行の前を表示

v cl

クラス変数をすべて表示

var l

ローカル変数をすべて表示

var instance self

selfのインスタンス変数をすべて表示

詳細はコマンドのリファレンスを確認して下さい。
http://bashdb.sourceforge.net/ruby-debug.html#Debugger-Command-Reference

ruby-debugの設定ファイル

ユーザのホームディレクトリに .rdebugrc ファイルを作成すると ruby-debug実行時に読み込んでくれます。 下記のようなオプションが有用でしょう(#以降は削除して下さい)。

set autoeval    # rdebugのコマンド以外は常にevalする
set autolist    # 'next/step' のときに前後数行を表示 
set autoreload  # ソースの修正を都度読み込む

設定の一覧です。
http://bashdb.sourceforge.net/ruby-debug.html#ruby_002ddebug-settings

参考

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.