Emacsでrubydbを利用してステップ実行する

    ruby-debugについて

    Rubyには、debugというデバッカが標準ライブラリとしてついている。

    これをつかうと、gdbのようなステップ実行ができる。

    使い方

    コンソールから以下のように入力する。

    ruby -rdebug [filename]
    

    (rdb:1)というコンソールが現れて、入力待ちになる。操作方法は以下のとおり。

    ステップ実行関連のコマンドは以下。ほぼgdbですね。

      
      b[reak] [file:|class:][line|method]
      b[reak] [class.][line|method]   set breakpoint to some position
    

    wat[ch][expression] set watchpoint to some expression

    b[reak] list breakpoints

    del[ete][ nnn] delete some or all breakpoints

    c[ont] run until program ends or hit breakpoint s[tep][ nnn] step (into methods) one line or till line nnn n[ext][ nnn] go over one line or till line nnn l[ist][ (-|nn-mm)] list program, - lists backwards

    q[uit] exit from debugger r[estart] restart program


    個人的には、このへんの値参照が役立ちそう。


    
    v[ar] g[lobal]             show global variables
    v[ar] l[ocal]              show local variables
    v[ar] i[nstance][object]  show instance variables of object
    v[ar] c[onst][object]     show constants of object
    

    あとは、watchコマンドとdispコマンドを組み合わせたのがよさそう。


    Emacsといっしょにつかう

    Emacsようのelispをつかうと、実行中のステップがEmacsから見ることができる。

    elispはRubyのソースコードのmiscディレクトリのなかにある。

    rubydb3x.elとrubydb2x.eclが入っているけれど,rubydx2x.elは19.2x以前向けなので,3xを使用する。

    rubydb3x.elをロードパスが通った場所において、init.elに以下を追加。

    (autoload 'rubydb "rubydb3x" "run rubydb on program file in buffer" t)
    

    これで、M-x rubydbをおすとデバッガが起動する。

    ヘルプコマンドから抜きだし

    Commands
      b[reak] [file:|class:][line|method]
      b[reak] [class.][line|method]
                                 set breakpoint to some position
      wat[ch] [expression]       set watchpoint to some expression
      cat[ch] ([exception]|off)  set catchpoint to an exception
      b[reak]                    list breakpoints
      cat[ch]                    show catchpoint
      del[ete][ nnn]             delete some or all breakpoints
      disp[lay] [expression]     add expression into display expression list
      undisp[lay][ nnn]          delete one particular or all display expressions
      c[ont]                     run until program ends or hit breakpoint
      s[tep][ nnn]               step (into methods) one line or till line nnn
      n[ext][ nnn]               go over one line or till line nnn
      w[here]                    display frames
      f[rame]                    alias for where
      l[ist][ (-|nn-mm)]         list program, - lists backwards
                                 nn-mm lists given lines
      up[ nn]                    move to higher frame
      down[ nn]                  move to lower frame
      fin[ish]                   return to outer frame
      tr[ace] (on|off)           set trace mode of current thread
      tr[ace] (on|off) all       set trace mode of all threads
      q[uit]                     exit from debugger
      v[ar] g[lobal]             show global variables
      v[ar] l[ocal]              show local variables
      v[ar] i[nstance] [object]  show instance variables of object
      v[ar] c[onst] [object]     show constants of object
      m[ethod] i[nstance] [obj]  show methods of object
      m[ethod] [class|module]    show instance methods of class or module
      th[read] l[ist]            list all threads
      th[read] c[ur[rent]]       show current thread
      th[read] [sw[itch]] [nnn]  switch thread context to nnn
      th[read] stop [nnn]        stop thread nnn
      th[read] resume [nnn]      resume thread nnn
      pp expression              evaluate expression and pretty_print its value
      p expression               evaluate expression and print its value
      r[estart]                  restart program
      h[elp]                     print this help