Rubyには、ruby-debugというデバッカが標準ライブラリとしてついている。
これをつかうと、gdbのようなステップ実行ができる。
ruby-debbugの使い方
コンソールから以下のように入力する。
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といっしょにruby-debugをつかう
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