ruby-debugのソースでは、への呼び出しは、ヒットするたびに常に実行を停止debuggerするように見えます。したがって、1つの解決策は、Moriが「アドホック」ソリューションで提案したように、デバッガーセッション自体の内部で微調整できるデバッガーの呼び出しを条件として、を呼び出さないようにすることですdebugger。これはおそらく最も適切な解決策であり、関連するコードに強いしつこい純度の問題がない限り、私が行うことです。
外部条件なしでデバッガセッション自体の内部でのみこれを実行したい場合は、それが可能です。コード自体にブレークポイントを設定する必要があります。その後、トリガーされたときにデバッガーでそのブレークポイントを削除できます。
require 'rubygems'
require 'ruby-debug'
Debugger.start
Debugger.add_breakpoint(__FILE__, __LINE__ + 2)
while true do
puts "Hi"
puts "mom"
end
Debugger.stop
これにより、この種の相互作用が発生します。
Breakpoint 1 at debug_test.rb:10
debug_test.rb:10
puts "Hi"
(rdb:1) c
Hi
mom
Breakpoint 1 at debug_test.rb:10
debug_test.rb:10
puts "Hi"
(rdb:1) c
Hi
mom
Breakpoint 1 at debug_test.rb:10
debug_test.rb:10
puts "Hi"
(rdb:1) info b
Num Enb What
1 y at ./debug_test.rb:10
breakpoint already hit 3 times
(rdb:1) del 1
(rdb:1) c
Hi
mom
Hi
mom
Hi
mom
...等々。
このようにして、コードにブレークポイントを設定し、完了したらそれを削除します。この行Debugger.add_breakpointが呼び出されると、ブレークポイントがリセットされるため、ループの外側にあり、2行下を向いていることに注意してください。この手法は、サーバーのロード時にのみブレークポイントを設定するスクリプトに簡単に抽出できますrequire。つまり、デバッガーモジュールの制御を中心にフレームワーククラス全体を記述できます。もちろん、ここまで進んだら、Moriのアドホックソリューションを実装するのに役立つシングルトンクラスを作成し、デバッガーステートメントを呼び出すかどうかを決定します。