C++で関数呼出しを視覚化 コールグラフを出力してみよう
「Graphvizによるファンクション・コールの視覚化」を参考に、今開発中の Scheme インタプリタのコールグラフを出力してみた。
pvtrace のインストール
http://www.mtjones.com/developerworks/pvtrace.zip
大きめの trace をしたいのであらかじめいくつかソースを書き換える。
symbols.h
#define MAX_FUNCTIONS 2000 // 元は 200 だった
stack.c
#define MAX_ELEMENTS 50000 // 元は 500 だった
インストール
$ make $ sudo make install
graphviz のインストール
$ sudo apt-get install graphviz
ターゲットのコンパイル
今回は Scheme のインタプリタがターゲット。
CXXFLAGS/CFLAGS に -finstrument-functions を追加。
pvtrace に付属している instrument.c をコンパイル/リンク。
pvtrace 実行
$ pvtrace ./scheme
graph.dot が出力される。
これを graphviz に喰わせれば出力されるのだけど C++ のシンボルが
_GLOBAL__I__ZN6monash5Macro5errorE [shape=rectangle]
と見にくいので c++filt でデマングルしてやる。