10

これに対する一種のフォローアップ/関連する質問。

何百ものクラスと大規模な継承階層を持つ大規模なコード ベースを把握しようとしています。継承階層の「主な静脈」を一目で確認できるようにしたいのですが、非常に具体的/特殊なことだけを行うすべての「周辺」クラスではありません。Visual Studio の "クラス ダイアグラムの表示" は、列車のように見え、画面全体に横に広がっており、あまり整理されていません。簡単に理解することはできません。

doxygen と graphviz を試してみましたが、結果は Visual Studio と多少似ています。私は見栄えの良いコールグラフを取得していますが、取得しようとしているものには詳細が多すぎます。

ある種の折りたたみ可能なビューで、継承階層をすばやく生成する方法が必要です。

4

9 に答える 9

7

大規模なコード ベースで作業を開始する場合、手動で行うのは素晴らしい学習体験です。私は通常、どのクラスが何から継承され、どのクラスにどのインスタンス、参照、または他のクラスへのポインターが含まれているかを確認します。あなたの隣に紙を持って、絵を描いてください...

于 2009-08-13T12:36:55.140 に答える
6

完全なクラス デザイナー ツールを使用する代わりに、Visual Studio の「クラス ビュー」または「オブジェクト ブラウザー」を使用するだけで、完全に折りたたみ可能なクラス階層が表示されます。

于 2009-08-13T16:53:27.060 に答える
5

優れた UML ツールがあれば、うまくいくはずです。

一般的な UML ツールのリストは次のとおりです: http://en.wikipedia.org/wiki/List_of_UML_tools

そこにはたくさんありますが、すべてさまざまな機能セットを備えています。いくつか試してみて、希望する出力が得られるかどうかを確認してください。無料のものに失敗した場合は、優れた商用グレードのUMLツールを購入する必要があるかもしれません

于 2009-08-13T11:56:57.697 に答える
4

CppDependを試すことができます。Doxygenのようなクラス階層は作成されませんが、プロジェクトの「全体像」を示すことができ、いくつかのコード メトリックも表示されます。

于 2009-08-13T12:48:41.333 に答える
3

私はこれを行うためにvalgrindとkcachegrindで最も成功しました。デバッグバイナリに対してvalgrindを実行し、関心のあるアクションを実行してから、出力をkcachegrindにインポートして、誰が何を、どのくらいの頻度で、いつ呼び出したかについて知りたいことをすべて確認します。さらに、動的に実行するため、静的分析では発生しない可能性が高いケースをキャッチします。

また、Enterprise Architectのリバースエンジニアリング機能を使用してある程度の成功を収めましたが、これはそれほどうまくいきません(ただし、実行可能なUMLモデルが得られます!)。

そして最後に、「理解」と呼ばれるツール。これは静的OO分析にはかなり適していますが、かなり高価で、それほど広く使用されていないと思います。

于 2009-08-14T07:10:31.087 に答える
2

リーズナブルな価格の商用製品については、Vizlogix(www.vizlogix.com)のSolidSXをチェックしてください。(北米以外の場合は、SolidSource(www.solidsourceit.com)にアクセスしてください。)

折りたたんだり展開したりできる放射状の図を生成します。また、Visual Studio(BSCと.NETの両方)とも統合されます。

于 2010-04-03T22:16:57.813 に答える
2

Source Insightを試してみてください。このツールで生成されたグラフの深さを設定できます。

Windows プラットフォーム用の C/C++ 呼び出しグラフ ユーティリティも参照してください。

于 2009-08-13T15:41:58.333 に答える
2

SourceNavigatorを確認してください。これはオープン ソースであり、多数のプラットフォームで動作し、階層ブラウザー、クラス ブラウザー、クロスリファレンス ブラウザーなどを備えており、コードをナビゲートして理解することができます。

特に新しいコードを調べて理解する必要がある場合は特に、しばらくの間使用しています。

于 2009-08-13T20:40:34.390 に答える
0

「主脈」の定義は何ですか? グラフレデューサーまたはスケルタイザーが必要な場合 (1 つを見つけて作成し、それを Doxygen や残りの部分が生成するものに適用することができます)、または「主脈」がコードの機能と関係があり、私はそうは思いません。自動化されたツールはそれを助けることができます。「これらは入力と出力を行う重要なビットです。これらの間のパスから 1 歩または 2 歩離れた要素のみを表示してください」と指摘できない限り。うーん、書くためのクールなツールのように聞こえます:)

...ある種の折りたたみ可能なビューでの継承階層。

繰り返しますが、ツールの素晴らしいアイデアです!

于 2009-08-13T18:40:12.337 に答える