2013-04-17 8 views
12

私はいくつかのプロジェクトでVS2010 C++に本当に巨大なソリューションを持っています。C++はコードの必要な部分を見つけます

1つのプロジェクトの一部で他のプロジェクトの他の部分が必要なので、難しいです。

私はアプリケーションを実行するときに呼び出されないコードの部分を、おそらくVS2010などのアドオンを使って自動的に削除する方法を知っている人はいますか?

これはむしろ異例の願いですが、とにかく誰かが解決策を知っていると思います。

ありがとうございます。

+0

VS2010の場合、これは潜在的に新しい質問ですが、[この質問はあなたを助けるかもしれません](http://stackoverflow.com/questions/1413548/visual-studio-find-unused-code)。 –

+0

あなたは 'VSInstr.exe'と' CodeCoverage.exe'をチェックしましたか? – perreal

答えて

4

ない自動ソリューションが、私は、プロジェクトのクラスのdepencyツリーを構築するためにDoxygenのグラフ機能を使用:リンカ破棄コードを静的に:Doxygen doc on the subject

4

それは、彼らはあなたを助けることができるかどうかを確認するためにリンクオプションで遊んで価値がありますリンクライブラリは使用しません。それは、あなたが望む仕事、つまり、使用されているすべてのものを取り、残りを捨てるという、まさにその仕事をしなければなりません。私はこれをVisual Studio 2008で使用して、私が維持していたライブラリから未使用のコードを削除しました。

リンカーのコマンドラインで/ OPT:REF/VERBOSEを使用し、正規表現を使用して、 "Discarded。* from MYLIB.lib"を検索しました。今はVisual Studio 2010で試してみましたが(2012年はありません)、2008年と少し違っていました。私は/ OPT:REF/VERBOSE:REFが必要でしたが、デバッグの下で動作するように見えました。リンク時の最適化が途中で行われています(リリース時に、使用された関数を破棄していたと言いました)。とにかく2008年にはうまくいきましたので、もっと詳しく調べる価値があります。あなたがどこにいても聞いてみたいと思うでしょう(最初に簡単なテストプロジェクトを試してみてください)。

編集:私は自宅でビジュアルスタジオ2012を持っているので試してみました。

作成さTEST.H

void used(); 
void unused(); 

とTEST.CPP

#include "test.h" 
#include <stdio.h> 

void used_by_used() 
{ 
    printf("used_by_used"); 
} 

void used() 
{ 
    used_by_used(); 
    printf("used"); 
} 

void used_by_unused() 
{ 

    printf("used_by_unused!!!!"); 
} 

void unused() 
{ 
    used_by_unused(); 
    printf("unused!!!!"); 
} 

とデバッグビルドの

#include "../Win32Project1/test.h" 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    used(); 
    return 0; 
} 

その後のcppファイルとコンソールアプリケーションの静的ライブラリTESTLIBコンソールアプリケーションのリンクオプションで[References to Yes](/ OPT:REF)と設定します。次に、コマンドラインオプションに "VERBOSE:REF"を追加します。リンカの出力では、迷惑メールの多くの中で、あなたは

1>  Discarded "void __cdecl unused(void)" ([email protected]@YAXXZ) from testlib.lib(test.obj) 
1>  Discarded "void __cdecl used_by_unused(void)" ([email protected]@YAXXZ) from testlib.lib(test.obj) 

を取得し、私はこれがうまくいけば、仕事をするべきであるのVisual Studio 2008でやったことに基づきます。 (あなたの質問は実際にはVisual Studio 2010で指定されていますが、このテクニックは2008年、2010年、2012年に修正されていると思います)

1

私の状況は非常に良い解決策です。 私のソリューションには約20のプロジェクトが含まれており、各プロジェクトをアンロードすることができます(グレー表示になるように)。私のコードがまだ動作していれば、私はそれを素早く削除することができます。

関連する問題