デバックについて(rails)

binding.pryによるデバック

●binding.pryとは

pry-railsというデバック用のgemのおかげで使える機能のひとつ。pry-railsrails向けに開発されたデバックツール。処理を止めてその場所での変数がどうなっているか確認できる。

 

 

具体的な使い方

def index

    binding.pry

    @tweets = Tweet.includes(:user).page(params[:page]).per(5).order("created_at DESC")

end

 

上記のように任意の場所(処理が止まってしまった直前のコントローラーかビューに書くことが多い)にbinding.pryと書き、サーバーを立ち上げプログラムを動かすと、その場所で処理が止まり、ターミナル上では

pry(止めた場所)>

の入力待ち状態になる。

pry(止めた場所)>

に続いて確認したい変数やparamsと入力すると、その場所での変数の中身を確認できる。

 

また、scrapingファイルのようにrails sでサーバー立ち上げずにコンソールのみで作業するファイルにおいては、一度コンソール立ち上げ実行した後はpry(main)>からpry(止めた場所)>になってくれるのでbinding.pryで変数取得できる。

 

 

 

pメソッドによるデバック

 

●pメソッドとは

pメソッドとは、出力する値と共に型も一緒に出力してくれるメソッド。pメソッドを使う事で何処まで正常に変数に値が渡されているか調べることが出来る。rubyのメソッドなのでrubyファイルで使える。

文字列は””で囲まれた状態、数字はそのまま、nilならnil、配列は[ ]で囲まれた状態で中身の型の状態も示してくれる。タブ や改行 もそのまま示してくれる。

 

putsメソッドも値を出力してくれる点は似ているが、putsメソッドでは値の型まで示してくれない為、pメソッドを用いる。

 

 

具体的な使い方

ary = [1,2,3,4]

sum = 0

i = 0

while i <= 4

    p ary[i]    #←のようにpメソッドを使って調べたい変数を出力させる

    sum += ary[i]

    i += 1

end

puts sum

 

上記のファイルを実行すると、ターミナル上には、

1

2

3

4

nil

 

と出力され、while文が5回目に実行された時にiの値がnilになってしまったことが原因とわかるため、while文の条件をi<=3としてあげれば4回目までしか実行されなくなり、エラーが解決できる。