nokunoの日記 このページをアンテナに追加 RSSフィード

2011-05-11

doxygen+graphvizでC++のソースコードを可視化する

オープンソースのソフトウェアはソースコードを読むことができるのが大きな魅力ですが、大規模なプロジェクトでは全体を見通すのに時間がかかってしまいます。そんなとき、C++のプロジェクトにはdoxygenとgraphvizを使ってソースコードからドキュメントを自動生成することができます。

doxygenは、元々はJavaのJavadocを参考にC++のソースコードを解析しているので、継承関係や包含関係などのオブジェクト指向な構造を可視化するのに向いています。本来なら専用のフォーマットに従ってコメントを入れておくとドキュメントに含めてくれるのですが、ソースコードリーディングの補助として使う場合には気にしなくて構いません。

Doxygen: Main Page

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にあります。

Page not found · 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

実行結果

それでは実行結果として生成されるグラフの一例を示します。

f:id:nokuno:20110510222159p:image

クラスの関係図です。継承関係は実線で、包含関係は点線で表します。


f:id:nokuno:20110510222158p:image

設定によりUML風の表示もできます。メンバが多いとややくどいかもしれません。

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。

リンク元