Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

byebugをつかってRuby2.0系のスクリプトをデバッグする

byebugをつかうと、
ruby2.0系スクリプトを一行毎に実行したり
値を確認したり内部でirbを実行できたり(!)します

bash@ruby-code$ byebug byebugtest.rb 
[1, 10] in /Users/shironoryouta/src/ruby-code/byebugtest.rb
=>  1: def sample_func( a, b )
    2:   a + b
    3: end
    4: 
    5: puts 'hello'
    6: 
    7: sum = 0
    8: 
    9: sum = sample_func(1, 8)
   10: 

(byebug)

ここで入力が可能となるので、
まずは一行実行する"step"を放り込みます。

(byebug) step

[1, 10] in /Users/shuzo/src/ruby-code/byebugtest.rb
    1: def sample_func( a, b )
    2:   a + b
    3: end
    4: 
=>  5: puts 'hello'
    6: 
    7: sum = 0
    8: 
    9: sum = sample_func(1, 8)
   10: 

(byebug)

やったぜ。

更にstepを続けていきます。
putsで表示された文字列が出てるのが確認いただるかと

(byebug) step
hello

[2, 11] in /Users/shuzo/src/ruby-code/byebugtest.rb
    2:   a + b
    3: end
    4: 
    5: puts 'hello'
    6: 
=>  7: sum = 0
    8: 
    9: sum = sample_func(1, 8)
   10: 
   11: sum -= 1

(byebug) 

displayは変数の値を確認するコマンドです。

(byebug) display sum
1: sum = nil
(byebug) step
1: sum = 0

[4, 13] in /Users/shuzo/src/ruby-code/byebugtest.rb
    4: 
    5: puts 'hello'
    6: 
    7: sum = 0
    8: 
=>  9: sum = sample_func(1, 8)
   10: 
   11: sum -= 1
   12: 
   13: puts 'bye'

(byebug) display sum
2: sum = 0

[1, 10] in /Users/shuzo/src/ruby-code/byebugtest.rb
    1: def sample_func( a, b )
=>  2:   a + b
    3: end
    4: 
    5: puts 'hello'
    6: 
    7: sum = 0
    8: 
    9: sum = sample_func(1, 8)
   10: 

(byebug) step
1: sum = 9
2: sum = 9

[4, 13] in /Users/shironoryouta/src/ruby-code/byebugtest.rb
    4: 
    5: puts 'hello'
    6: 
    7: sum = 0
    8: 
    9: sum = sample_func(1, 8)
   10: 
=> 11: sum -= 1
   12: 
   13: puts 'bye'

(byebug) display sum
3: sum = 9

やめるにはexit

(byebug) exit
Really quit? (y/n) y

なんと、内部でirbやpryを呼び出す事も可能です。
こりゃもうわかんねぇな

(byebug) irb
irb(main):001:0>