2008-07-06 source to dot w/graphviz
ありそうだけど見つからなかったので作ってみる。
-a を付けるとソースファイル内で完結しない呼び出しも表示。(グラフが大きくなりすぎるかも)
正規表現で関数宣言と関数参照を適当にparseしてるだけなので、Cじゃなくても使えちゃうかも。
上記理由によりマクロ定義は宣言と見なされず、引数付きマクロは関数呼び出しと見なされる。
perl5.8 の Recursive Patterns を使ってるのでperlのバージョンに依存している。
require 5.10; して perl5.10 のちゃんとした Recursive Patterns を使ったほうがいいかな。
dot -Tpng とかやれば画像でも出力できるけど、レンダリングに超時間かかるのと、
表示も大変なのでなんだかんだで pdf が一番扱いやすいかなぁ。
しかし参考にしたこの記事は秀逸だ。http://www.ibm.com/developerworks/jp/linux/library/l-graphvis/index.html call回数を線の太さや色で表すともっといいかも。
gprof2dot も簡単に作れそうなのでそのうち作ろう。

usage: source2dot [-a] prog1.c [prog2.c [...]] source2dot -a /usr/src/bin/cat/cat.c | dot -Tpdf > cat_a.pdf source2dot /usr/src/lib/libc/regex/*.c | dot -Tpdf > regexp.pdf source2dot /usr/src/usr.bin/gzip/*.c | neato -Tpdf > gzip.pdf source2dot -a /usr/src/lib/libc/regex/*.c | dot -Tpdf > regexp_a.pdf source2dot -a /usr/src/usr.bin/gzip/*.c | neato -Tpdf > gzip_a.pdf
-a を付けるとソースファイル内で完結しない呼び出しも表示。(グラフが大きくなりすぎるかも)
正規表現で関数宣言と関数参照を適当にparseしてるだけなので、Cじゃなくても使えちゃうかも。
上記理由によりマクロ定義は宣言と見なされず、引数付きマクロは関数呼び出しと見なされる。
perl5.8 の Recursive Patterns を使ってるのでperlのバージョンに依存している。
require 5.10; して perl5.10 のちゃんとした Recursive Patterns を使ったほうがいいかな。
dot -Tpng とかやれば画像でも出力できるけど、レンダリングに超時間かかるのと、
表示も大変なのでなんだかんだで pdf が一番扱いやすいかなぁ。
しかし参考にしたこの記事は秀逸だ。http://www.ibm.com/developerworks/jp/linux/library/l-graphvis/index.html call回数を線の太さや色で表すともっといいかも。
gprof2dot も簡単に作れそうなのでそのうち作ろう。
EOF