2011-05-11
doxygen+graphvizでC++のソースコードを可視化する
オープンソースのソフトウェアはソースコードを読むことができるのが大きな魅力ですが、大規模なプロジェクトでは全体を見通すのに時間がかかってしまいます。そんなとき、C++のプロジェクトにはdoxygenとgraphvizを使ってソースコードからドキュメントを自動生成することができます。
doxygenは、元々はJavaのJavadocを参考にC++のソースコードを解析しているので、継承関係や包含関係などのオブジェクト指向な構造を可視化するのに向いています。本来なら専用のフォーマットに従ってコメントを入れておくとドキュメントに含めてくれるのですが、ソースコードリーディングの補助として使う場合には気にしなくて構いません。
Graphviz | Graphviz - Graph Visualization Software
インストール
CentOS
yumを使う
sudo yum install graphviz graphviz-gd
Mac OS X
MacPortを使う
sudo port install doxygen graphviz
HomeBrewを使う
sudo brew install doxygen graphviz
設定ファイル
doxygenでは、Doxyfileという設定ファイルで入力ファイルのパスなどを指定する必要があります。"doxygen -g"というコマンドでデフォルトの設定ファイルを生成してくれるのですが、そのままだとディレクトリを再帰的に探索してくれなかったり、privateメンバが可視化されなかったり、graphvizを用いた図の生成が行われないので、そのあたりも修正を行います。
ファイル全体はgithubにあります。
ここでは長いので差分だけ示します。
diff Doxyfile Doxyfile.bak 28c28 < PROJECT_NAME = --- > PROJECT_NAME = marisa-trie 321c321 < EXTRACT_ALL = NO --- > EXTRACT_ALL = YES 326c326 < EXTRACT_PRIVATE = NO --- > EXTRACT_PRIVATE = YES 331c331 < EXTRACT_STATIC = NO --- > EXTRACT_STATIC = YES 637c637 < RECURSIVE = NO --- > RECURSIVE = YES 1163c1163 < GENERATE_LATEX = YES --- > GENERATE_LATEX = NO 1544c1544 < HAVE_DOT = NO --- > HAVE_DOT = YES 1599c1599 < UML_LOOK = NO --- > UML_LOOK = YES 1626c1626 < CALL_GRAPH = NO --- > CALL_GRAPH = YES 1634c1634 < CALLER_GRAPH = NO --- > CALLER_GRAPH = YES
実行結果
それでは実行結果として生成されるグラフの一例を示します。
クラスの関係図です。継承関係は実線で、包含関係は点線で表します。
設定によりUML風の表示もできます。メンバが多いとややくどいかもしれません。
- 137 http://d.hatena.ne.jp/next49/20120116/p3
- 81 https://www.google.co.jp/
- 78 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=10&cts=1331299716216&ved=0CHgQFjAJ&url=http://d.hatena.ne.jp/nokuno/20110511/1305065337&ei=gQVaT7KZLeTImQWYzpS3Dw&usg=AFQjCNHexgnmAJ_TQsGnHnqOOtY_L_9s6g
- 77 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&cts=1331283549039&sqi=2&ved=0CEUQFjAC&url=http://d.hatena.ne.jp/nokuno/20110511/1305065337&ctbs=lr:lang_1ja&ei=L8ZZT9-1Ao_HmQXvn_TBDw&usg=AFQjCNHexgnmAJ_TQsGnHnqOOtY_L_9s6g&sig
- 66 http://www.google.co.jp/url?sa=t&rct=j&q=ソースコード 可視化&source=web&cd=14&ved=0CDUQFjADOAo&url=http://d.hatena.ne.jp/nokuno/20110511/1305065337&ei=xrK9Tpi0IKuZmQXlpZyxB
- 61 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cts=1331127079811&ved=0CDMQFjAB&url=http://d.hatena.ne.jp/nokuno/20110511/1305065337&ei=JGNXT-bQAbTKiQKz8YiHCw&usg=AFQjCNHexgnmAJ_TQsGnHnqOOtY_L_9s6g&sig2=Z_SBo3JumUtf8RvnjzMU_Q
- 53 http://www.google.co.jp/url?sa=t&rct=j&q=doxygen+graphviz&source=web&cd=3&ved=0CEEQFjAC&url=http://d.hatena.ne.jp/nokuno/20110511/1305065337&ei=viEQT5rtD8P-mAXa2pHcAw&usg=AFQjCNHexgnmAJ_TQsGnHnqOOtY_L_9s6g
- 50 http://www.google.co.jp/url?sa=t&rct=j&q=doxygen graphviz&source=web&cd=22&ved=0CG8QFjALOAo&url=http://d.hatena.ne.jp/nokuno/20110511/1305065337&ei=TBS4TtWqK6SdmQXDksXMAw&usg=AFQjCNHexgnmAJ_TQsGnHnqOOtY_L_9s6g
- 33 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&frm=1&source=web&cd=4&cts=1331113161453&ved=0CEcQFjAD&url=http://d.hatena.ne.jp/nokuno/20110511/1305065337&ei=CSdXT8v2GaHEmQWEw-29Dw&usg=AFQjCNHexgnmAJ_TQsGnHnqOOtY_L_9s6g&sig2=Jkm6ezp2W6Vn6yS9n
- 29 http://reader.livedoor.com/reader/







