なんか TCC だの WebKit だのを触っていると、ツリー構造を何度もなめてて同じコードを何度も通る感じになって、デバッガの breakpoint がイマイチ機能しない時があります。そういう時は printf を仕込んだり条件付き break を使ったりとかするわけですが、まぁそういうもののオルタナティブとして tracer を書いてみました。
http://github.com/shinh/fugatrace
Mach-O と ELF 両方で動かにゃならんので適当に Ruby で GDB を使ういい加減な作りになっています。名前は hogetrace リスペクトで。
出力としてはこんな感じ。
http://shinh.skr.jp/dat_dir/trace.html.gz
重要なオプションは -g と -b と -R で、 -g は gdb の rbreak を使って正規表現で breakpoint を指定します。 -b は手動で break 。複数仕込む時はカンマで区切る。 break で止める場所の前に
本当は -r というフラグで GDB のじゃなくて Ruby の正規表現で break する位置を指定できるようにしたかったのだけど、 Mac の GDB の rbreak が WebKit でやるとメモリ使いつくして落ちるので今のところやってません。