29 Mar 2014, 04:02

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

ruby-debugについて

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

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

使い方

<div class="outline-text-3" id="text-1-1">
  <p>
    コンソールから以下のように入力する。
  </p>

  <pre><code>ruby -rdebug [filename]

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

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

  <pre><code>  

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

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

  <pre><code>

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

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

  <ul class="org-ul">
    <li>
      <a href="http://d.hatena.ne.jp/takihiro/20100404/1270370312">http://d.hatena.ne.jp/takihiro/20100404/1270370312</a>
    </li>
  </ul>
</div></p>

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をおすとデバッガが起動する。

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

<div class="outline-text-3" id="text-2-1">
  <pre><code>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 catch 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 trace set trace mode of current thread trace 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