6

問題

私は最近、大規模でなじみのない、複数の部門にまたがる C++ コードベースを扱っていることに気付きました。特定のヘッダーのどのソースファイルでどのシンボルが使用されているかをマッピングする方法を見つけたいと思います。これは、1 つの部門だけが特定の機能を使用している場合、その機能を共有領域からその部門の領域に移動できることを期待しています。


試み

私の最初の考えは、シンボルテーブルを使用することでした。プロジェクトをコンパイルし、各オブジェクト ファイルのシンボルをダンプします。そこから、ヘッダー ファイルのシンボルが使用されているかどうかを確認するスクリプトを簡単に作成できると考えました。このアプローチは実行可能に思えますが、ヘッダーから探しているシンボルのリストを作成する必要があります。私の限られた知識では、このようなプロセスを自動化する方法がわかりません。何百ものヘッダー ファイルをテストする必要があるため、手動で行うことは問題外です。


質問

  • 私のアプローチは有効ですか?もしそうなら..
    • ヘッダー ファイルからシンボル名を生成するには、何を使用できますか?
  • そうでない場合..
    • 他に何ができますか?

さらに、私は Linux を使用していますが、ほとんどの開発チームは Windows のみの環境で作業しています。両方のプラットフォームで使用できるユーティリティは何ですか?


どんな助けでも大歓迎です。

4

3 に答える 3

2

API をクリーンアップする必要があるときは、callcatcherからの情報を使用することがあります。基本的に、コンパイル中にすべてのシンボルのデータベースを構築し、一部のビルド製品でどのシンボルが使用されているかを判断できるようにします。

また、DXR ( githubのコード、インストール例) を使用して、定義されたコードがどこでどのように使用されているかを参照することもあります。DXR を使用した callcatcher とは対照的に、より詳細にドリルダウンできます。DXR の設定はかなり大変ですが、作業するのに十分なコードがある場合は、その価値があるかもしれません。

スペクトルの反対側には、cscopeのようなツールがあります。C++ コードではあまりうまく機能しませんが、それでも非常に便利です。ただし、100kloc 以上を処理する場合は、すぐに制限を感じるでしょう。

これらのツールの 1 つだけを選択する必要があり、大規模なコード ベース (>1Mloc) で作業する場合、私は間違いなく DXR を選択します。

于 2012-08-30T23:09:11.577 に答える
1

非常に昔ながらの単純な、おそらく unix のみですが、etagsを知っていますか? 私が似ていると思うgnu globalもあります。

gnu グローバル リンクは、ここでの「同様のツールとの比較」の議論を参照しており、これも役立つ可能性があります。

于 2012-08-30T23:17:03.667 に答える
1

doxygenを使用することで、記述した情報から合理的なスタートを切ることができます。

doxygen 形式のコメントを含まないソースの場合でも、作成されたドキュメントには、特定のシンボルが使用されている場所 (つまり、ソース ファイル) のリストを含めることができます。

また、doxygen を使用して html ドキュメントを生成できるため、ソース ツリーをナビゲートするのが簡単になります。ソース ツリー内のクラスの関係図を生成するドット機能を有効にすると、さらに効果的です。

于 2012-08-30T23:25:56.050 に答える