Rails4でのデバッグ方法

Posted by Tatsuyano on Wed, Feb 18, 2015
In
Tags ruby, rails

最近覚えたデバッグ方法を、備忘のためにまとめておきます。

ログに出力する

ActiveSupport::Logger#debugメソッドを使って、rails serverの標準出力にデバッグコードを出力する。

logger.debug(‘Hello world’)

SQLを出力する

ActiveRecord::Relation#to_sqlメソッドでSQLを出力する。

User.all.to_sql #=> SELECT “users”.* FROM “users”

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

コード内にbinding.pryというコードを書くと、そこまで実行中のプログラムが中断され、 以降をコンソール上からデバッグできます。

Gemfile

gem ‘pry-rails’,  group: [:development, :test]
gem ‘pry-byebug’, group: [:development, :test]

$ bundle install
$ rails server

中断したい箇所にbinding.pryを記述。

def index
  @users = User.all

binding.pry # <- This!

logger.debug(‘—— 1 ——-’) logger.debug(‘—— 2 ——-’) logger.debug(‘—— 3 ——-’) logger.debug(‘—— 4 ——-’) end


ブレークポイントの移動はnext,step,exitで行う。

     7: def index
     8:   @users = User.all
     9:
    10:   binding.pry
    11:
 => 12:   logger.debug(‘—— 1 ——-’)
    13:   logger.debug(‘—— 2 ——-’)
    14:   logger.debug(‘—— 3 ——-’)
    15:   logger.debug(‘—— 4 ——-’)
    16: end

おまけ1 出力結果を見やすく整形する

  • pコマンド

p Array.new(10) { {:hoge => :fuga} }
#=> [{:hoge=>:fuga}, {:hoge=>:fuga}, {:hoge=>:fuga}, {:hoge=>:fuga}, {:hoge=>:fuga}, {:hoge=>:fuga}, {:hoge=>:fuga}, {:hoge=>:fuga},
{:hoge=>:fuga}, {:hoge=>:fuga}]

  • ppコマンド

require ‘pp’
pp Array.new(10) { {:hoge => :fuga} }
#=> [{:hoge=>:fuga},
{:hoge=>:fuga},
{:hoge=>:fuga},
{:hoge=>:fuga},
{:hoge=>:fuga},
{:hoge=>:fuga},
{:hoge=>:fuga},
{:hoge=>:fuga},
{:hoge=>:fuga},
{:hoge=>:fuga}]

おまけ2 オブジェクトの情報を出力する

  • Object#inspectメソッドでオブジェクトを文字列として出力する。

User.inspect

  • オブジェクトのメソッドを出力する

User.methods

  • オブジェクト(クラス)の継承関係を出力する

User.ancestors

参考サイト& 書籍