あなたがRuby 1.9.2以降を使用している場合は、デバッガの宝石(gem install debugger
)をインストールしてください。デバッグするには、debugger
の宝石を直接、またはバイナリredbug
を使用する方法があります。おもちゃのスクリプトを持つふりをして、$blah
がfoo()
(外部ライブラリのふりをしている)を呼び出した後に4である理由を知りたいとします。
方法1:debugger
含めるこれは、あなたのコード内で手動でブレークポイントを設定している:
require 'debugger'
$blah = 3
def foo
$blah += 1
end
def bar
$blah += 4
end
foo()
debugger() # opens rdb
bar()
puts $blah
実行して、このruby debug.rb
として。これは、ルビー・デバッグコンソールにあなたを起動します:
% ruby debug.rb
debug.rb:15
bar()
(rdb:1) list
[10, 19] in debug.rb
10 $blah += 4
11 end
12
13 foo()
14 debugger()
=> 15 bar()
16
17 puts $blah
(rdb:1) display $blah
1: $blah = 4
方法2:rdebug debug.rb
を実行し、シェルから
$blah = 3
def foo
$blah += 1
end
def bar
$blah += 4
end
foo()
bar()
puts $blah
:rdebug
を実行すると、ここで私たちの例のサンプルスクリプト、debug.rb
です。ここでは例のセッションです:
% rdebug debug.rb
(rdb:1) list 1,20
[1, 20] in /mnt/hgfs/src/stackoverflow/debug.rb
=> 1 $blah = 3
2
3 def foo
4 $blah += 1
5 end
6
7 def bar
8 $blah += 4
9 end
10
11 foo()
12 bar()
13
14 puts $blah
(rdb:1) break 12
Breakpoint 1 file /mnt/hgfs/src/stackoverflow/debug.rb, line 12
(rdb:1) display $blah
1: $blah =
(rdb:1) continue
Breakpoint 1 at /mnt/hgfs/src/stackoverflow/debug.rb:12
1: $blah = 4
/mnt/hgfs/src/stackoverflow/debug.rb:12
bar()
(rdb:1) display $blah
2: $blah = 4
キーコマンドがbreak LINE-NUMBER
とdisplay VARIABLE
です。希望が助けてくれる!
リソース
これは、 'gdb'やその他のCデバッガを使ってブレークポイントを設定することを意味します。 Rubyや拡張機能を有効にしてデバッグを有効にする(つまり、 '-g'でコンパイルする)と便利です。あなたはこれがどのように行われるかの段階に入る、またはリンクを提供することができれば、私はおそらくあなたに –
@muistooshortはbabonkはCの関数( 'malloc_error_break'にブレークポイントを設定する必要があるということです)を使用して、インタプリタまたはCベースの拡張をバックトラックして、誰がポインタを2回解放しているかを把握することができます。 – babonk