2

重複の可能性:
大規模な C++ レガシー アプリケーションでの「デッド コード」の検索

私のプロジェクトには、それぞれに多数のグローバル関数を含む多数の C ソース ファイルがあります。これらの多くは、呼び出し元からまったく参照されなくなりました。これらの関数のうち、誰にも参照されていないものを特定する簡単な方法はありますか?

VC で生成されたマップファイルが役に立ちそうです。しかし、関数名がいつどのようにマップ ファイルにリストされているのか正確にはわかりません。

4

2 に答える 2

4

プログラムに関する多くの指標を提供するCCCC (無料のオープン ソース) を使用できます。もう 1 つのオプションは、Coverity (無料ではありません) です。

この質問は、次の質問と重複している可能性があります:レガシー C/C++ プロジェクトでのデッド コード検出

于 2012-05-24T07:23:48.923 に答える
1

マップファイルは何の役にも立たないと思います。私が見た他のマップ ファイルと同じように、シンボルが使用されている場所 (もしあれば) は示さず、シンボルが定義されている場所のみを示します。できることはdumpbin 、オブジェクト ファイルに対して実行することです。dumpbin /relocationsたとえば、実際には、再配置が必要な可能性のあるアドレスを持つシンボルのすべての使用が表示されます (実際には、静的な有効期間を持つ関数と変数)。次に、出力に対して通常のツールを使用して、関心のある関数がそこにあるかどうかを判断します。(主に Unix で作業してきた者として、私は CygWin をインストールして使用 grepしていました。Windows のさまざまな Unix ツールに相当するネイティブのツールについては詳しくありません。)

dumpbin /symbolsオブジェクトファイルごとに出力を 解析し、定義したすべての関数の名前を取得してから、の出力をdumpbin /relocations使用して、使用する関数のリストを表示し、最後に 2 つの diff を実行します。(Microsoft は の出力dumpbinを使いにくくするために手を尽くしているようですが、それでもそれほど難しくはありません。どの行を無視すればよいかを知っておく必要があります。)

于 2012-05-24T07:48:36.780 に答える