Skip to content

3.2.1 アプリケーションをデバッグする

Katuyuki Kakigi edited this page Jan 14, 2016 · 3 revisions

Pry

Pryはirbの代替となる非常に強力な対話型インタプリタです。
また、プラグインを追加することによりデバッガーとしての機能も実現できます。

Pryのインストール

$ gem install pry pry-doc

Pryを利用する

Pryを実行する

$ pry
[1] pry(main)> 1 + 2
=> 3
[2] pry(main)> "ruby".upcase
=> "RUBY"

Pryのスコープの移動を利用する

[3] pry(main)> foo = "foo"
=> "foo"
[4] pry(main)> cd foo
[5] pry("foo"):1> ls
Comparable#methods: <  <=  >  >=  between?
String#methods: 
  %    ascii_only?  chomp       delete          encode          hash      lstrip     reverse     setbyte      start_with?  to_c    tr_s!              
  *    b            chomp!      delete!         encode!         hex       lstrip!    reverse!    shell_split  strip        to_f    unicode_normalize  
  +    bytes        chop        downcase        encoding        include?  match      rindex      shellescape  strip!       to_i    unicode_normalize! 
  <<   bytesize     chop!       downcase!       end_with?       index     next       rjust       shellsplit   sub          to_r    unicode_normalized?
  <=>  byteslice    chr         dump            eql?            insert    next!      rpartition  size         sub!         to_s    unpack             
  ==   capitalize   clear       each_byte       force_encoding  inspect   oct        rstrip      slice        succ         to_str  upcase             
  ===  capitalize!  codepoints  each_char       freeze          intern    ord        rstrip!     slice!       succ!        to_sym  upcase!            
  =~   casecmp      concat      each_codepoint  getbyte         length    partition  scan        split        sum          tr      upto               
  []   center       count       each_line       gsub            lines     prepend    scrub       squeeze      swapcase     tr!     valid_encoding?    
  []=  chars        crypt       empty?          gsub!           ljust     replace    scrub!      squeeze!     swapcase!    tr_s  
self.methods: __pry__
locals: _  __  _dir_  _ex_  _file_  _in_  _out_  _pry_
[6] pry("foo"):1> upcase
=> "FOO"

Pryをアプリケーションで使えるようにする

Gemfileにpryを追加する

group :development do
  gem 'sinatra-reloader'
  gem 'pry'
end

バンドルを実行

$ bundle

_lib/application.rb_の7行目に以下のコードを追加する

require 'pry'

コードで確認したい部分に以下のコードを追加する

binding.pry

上記のコードを通る部分のアプリケーションを実行すると以下の様になりpryを実行できるようになる

From: /home/ubuntu/workspace/lib/application.rb @ line 39 self.GET /:

    34:       require 'sinatra/reloader'
    35:       register Sinatra::Reloader
    36:     end
    37: 
    38:     get '/' do
 => 39:       binding.pry
    40:       redirect '/tasks'
    41:     end
    42: 
    43:     get '/tasks' do
    44:       @tasks = Task.order('created_at DESC')

[1] pry(#<Todo::Application>)> 

ステップ実行できるようにする

Gemfileにpry-byebugを追加する

group :development do
  gem 'sinatra-reloader'
  gem 'pry'
  gem 'pry-byebug'
end

バンドルを実行

$ bundle

binging.pryを指定した箇所で以下のコマンドを実行できるようになる

コマンド 説明
step 次の行、あるいはメソッドへステップ実行する
next 現在のスタックの次の行までプログラムを実行する
continue プログラムの続きを実行する
up 上位スタックに移動する
down 下位スタックに移動する
frame 特定のフレームに移動する
break ブレークポイントを設定する

.pryrcによる設定

Gemfileにawesome_printを追加する

group :development do
  gem 'sinatra-reloader'
  gem 'pry'
  gem 'pry-byebug'
  gem 'pry-stack_explorer'
  gem 'awesome_print'
end

バンドルを実行

$ bundle

.pryrcファイルを追加

$ touch .pryrc

.pryrcファイルを編集する

# Set alias
if defined?(PryByebug)
  Pry.commands.alias_command 'c', 'continue'
  Pry.commands.alias_command 's', 'step'
  Pry.commands.alias_command 'n', 'next'
  Pry.commands.alias_command 'f', 'finish'
end

# Hit Enter to repeat last command
Pry::Commands.command /^$/, "repeat last command" do
  _pry_.run_command Pry.history.to_a.last
end

# For awesome_print
require "awesome_print"
AwesomePrint.pry!
    
# Editer
Pry.config.editor = "vi"
Clone this wiki locally