GDB において特定の回数関数が呼ばれたら break する
[shell]
# break point を表示。番号を知る
(gdb) info b
Num Type Disp Enb Address What
1 breakpoint keep y 0x0000000000413fab in scheme::VM::runLoop(scheme::Object*, __jmp_buf_tag*, bool) at src/VM-Run.cpp:982
2 breakpoint keep y 0x000000000040e240 in scheme::VM::tryJitCompile(scheme::Object) at src/VM.cpp:957
breakpoint already hit 3 times
# 2番の breakpoint において 121 回は通過し 122 回目で break するように指示
(gdb) ignore 2 121
Will ignore next 121 crossings of breakpoint 2.
(gdb) r
[/shell]
これ、初めて知りました。
ず〜っと前から、
「いや、これができないはずは無いでしょう・・・。」
と思いつつも、ず〜っと場当たり的に対処してきた問題でした。
具体的には、ローカル変数をインクリメントしつつ
[shell]
(gdb) break func if i==122
[/shell]
とかってやってました。
んなわけねぇ〜だろ!って思いながら。