@ledsun blog

無味の味は佳境に入らざればすなわち知れず

ruby/debugをつかってみる

rubykaigi.org

を見ました。 良い機会なのでruby/debugを素振りしてみます。 次のRubyスクリプトを書きます。

require 'debug'

def baz n
  n
end

def bar n
  baz n
end

def foo n
  bar n
end

binding.b
result = foo(100)
p result

実行してみましょう。

ledsun@MSI:~/ruby-debugger►ruby main.rb
[10, 17] in main.rb
    10|
    11| def foo n
    12|   bar n
    13| end
    14|
=>  15| binding.b
    16| result = foo(100)
    17| p result
=>#0    <main> at main.rb:15

binding.b と書いたところで止まります。 実はカラフルに表示されています。 スクリーンショットを張ります。

main.rbを実行した直後

sを入力してEnterキーを押します。

sを入力してEnterキーを押したところ

binding.bの次の行に移動しました。 sstepコマンドです。 もう一度、sを入力してEnterキーを押します。

もう一度sを入力してEnterキーを押したところ

foo関数の中に入りました。 関数の中に入らずに次の行に進むにはnextコマンドをつかいます。 いまはためしません。

stepコマンドをつかってどんどん関数の中に入っていきます。

baz関数の中まで入ったところ

なにやら下のほうにframeという情報が表示されています。

=>#0    Object#baz(n=100) at main.rb:4
  #1    Object#bar(n=100) at main.rb:8
  # and 2 frames (use `bt' command for all frames)

btと入力してEnterキーを押してみます。

btを入力してEnterキーを押したところ

baz, bar, fooと中に入った関数が順に表示されます。 up, down, frameコマンドで表示されたframeを移動できるらしいです。 この辺からよくわからなくなりました。