Skip to content

Instantly share code, notes, and snippets.

@tkyowa
Last active May 23, 2017 08:15
Show Gist options
  • Save tkyowa/1378694 to your computer and use it in GitHub Desktop.
Save tkyowa/1378694 to your computer and use it in GitHub Desktop.
ruby-debugを使ったRuby・Railsアプリケーションのデバッグ方法

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

インストール

gem install ruby-debug

デバッグ方法

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

class User < ActiveRecord::Base
  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

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

TIPS

ruby-debug-completion

ruby-debug-completion と言うgemをインストールして読みこむようにすると ruby-debugインタプリタ内でコマンドや変数名などでTabキーによる自動補完が有効になります。素晴らしく便利なので導入をオススメします。

https://github.com/cldwalker/ruby-debug-completion

参考

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment