11

Linux に移植する必要がある大規模な C++ プロジェクトを継承しました。このプロジェクトには 200,000 行以上のソースがあり、300 以上のファイルにまたがっています。アプリケーションの内部構造の一般的な感覚をつかむことができるように、このプロジェクトで参照できる視覚的な依存関係/インクルード ツリーがあると非常に役立ちます。これは、コア モジュールと Windows ヘッダー ファイルの間の "障害行" を特定するのにも役立ち、後でそれらをスタブ化できます。

Visual Studio のクラス ビューアーは、単にそれをカットしていません。私はいろいろ読んでいて、Doxygen が依存関係を一覧表示するために一般的に使用されるツールであることを知りました。私はどちらかというと視覚的な人間なので、これはあまり役に立たないことがわかりました。幸いなことに、「Dot」と呼ばれるものを使用して Graphviz プラグインについて学び、パーツの依存関係ツリーを生成できるようになりました。残念ながら、私が望んでいたような大きな依存関係ツリーが 1 つあるのではなく、特定のファイルに対して何百もの小さな依存関係ツリーが生成されます。以下にいくつかの例を示します。

DoxygenDDLCommInfC DoxygenDDBItemBase

ご覧のとおり (期待しています)、Doxygen/GraphViz は、グラフが大きくなりすぎて子ノードがグレー表示されるとあきらめるようです。ツリーのさらに下にあるものを確認したい場合は、その特定のノードのグラフに移動する必要があります。これにより、グラフの視覚的な有用性が制限されるだけでなく、子ノードが元のグラフのいずれかのノードに依存している場合、これらのノードが再び表示されます。これにより、多くの重複した接続が発生し、特定のファイルからグラフを概念的に分離することが非常に困難になります。その結果、「ズームイン」しているように感じ、まだ全体像を見ることができません.

Doxygen の Expert ビューで DOT_GRAPH_MAX_NODES 設定をいじってみましたが、これは生成されるグラフの範囲に影響を与えないようです。任意の実行から生成された出力から、Doxygen 自体が何百ものグラフ ファイルを生成しているように見えますが、Graphviz はそれぞれのグラフを忠実に生成しています。 何百もの小さなグラフ ファイルではなく、1 つの大きなグラフ ファイルを Doxygen に生成させる既知の方法はありますか?

あるいは、ネストされたプリプロセッサ ディレクティブ、MIDL インターフェイス、および手動で定義されたインクルード パスを含む複雑な C++ プロジェクト ファイルを Doxygen のように処理する方法を知っている無料のビジュアル グラフ ソリューションはありますか?

私の検索では、一般的なグラフ作成ユーティリティ (またはそれらに関する質問) が見つかりましたが、大規模なC++ プロジェクトに固有のものは何も見つかりませんでした。確かに、何年にもわたって行われてきたすべてのコーディングを考えると、誰かがそのようなツールを持っているに違いありません!

ありがとう - アレックス

4

1 に答える 1

6

doxygen によって生成された XML ファイルを使用して、それらを (xml スタイルシートなどを使用して) 単一の巨大なドット形式のグラフ ファイルにマージし、その上で graphviz を実行できます。

Graphviz を自動的に呼び出す Doxygen は、グラフの数が多い場合に最も役立ちます。単一のグラフの場合、コンテンツを自動的に作成することは重要ですが、 を自動的に呼び出すことdotはそれほど重要ではありません。

于 2012-07-25T18:37:28.180 に答える