我在VS2010 C++中有一個非常大的解決方案,並且有幾個項目,我只想保留那些實際需要的部分。C++找出需要的部分代碼
這是困難的,因爲一個項目的某些部分需要其他項目的其他部分。
是否有人知道如何我當我運行該應用程序時,可能使用一個附加的VS2010左右可以自動刪除未調用的代碼的那些部分?
我想這是一個相當不尋常的願望,但也許有人知道反正一個解決方案。
謝謝。
我在VS2010 C++中有一個非常大的解決方案,並且有幾個項目,我只想保留那些實際需要的部分。C++找出需要的部分代碼
這是困難的,因爲一個項目的某些部分需要其他項目的其他部分。
是否有人知道如何我當我運行該應用程序時,可能使用一個附加的VS2010左右可以自動刪除未調用的代碼的那些部分?
我想這是一個相當不尋常的願望,但也許有人知道反正一個解決方案。
謝謝。
不是一個自動的解決方案,但我用Doxygen的圖形功能,建立項目類depency樹:Doxygen doc on the subject
這是值得的鏈接選項打轉轉,看看他們是否能幫助你:在靜態鏈接器放棄代碼它不使用鏈接庫。它必須完成你想要的工作,即關閉所有使用的東西並丟棄其餘的東西。爲了從我正在維護的庫中刪除一些未使用的代碼,我在Visual Studio 2008中使用了這個工具。
我用/ OPT:「丟棄*從MYLIB.LIB」 REF/VERBOSE鏈接器命令行上,然後搜索的輸出用於使用正則表達式。我剛剛在visual studio 2010中試了一下(我沒有2012),和2008年有點不同。我需要/ OPT:REF/VERBOSE:REF,它似乎只能在調試下工作,因爲大概是鏈接時間優化正在成爲阻礙(在發佈的時候它說它丟棄了被使用的函數!)。無論如何,這是值得深入研究,因爲它在2008年的工作。我會有興趣聽到,如果你有任何地方(你可能想要嘗試一個簡單的測試項目第一)。
編輯:我有visual studio 2012在家裏,所以試了一下。
創建一個靜態庫TESTLIB與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!!!!");
}
與CPP文件的調試版本控制檯應用程序
#include "../Win32Project1/test.h"
int _tmain(int argc, _TCHAR* argv[])
{
used();
return 0;
}
然後,在控制檯應用程序的鏈接選項中將引用設置爲是(/ 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年的工作與修改說明。)
我 - 我的情況 - 一個相當不錯的解決方案。 我的解決方案包含大約20個項目,並且我可以卸載每個項目(以使其顯示爲灰色)。如果我的代碼仍然有效,我知道我可以拯救地刪除它。
對於VS2010這可能是一個新問題,但[這個問題可以幫助你(http://stackoverflow.com/questions/1413548/visual-studio-find-unused-code)。 –
你檢查過'VSInstr.exe'和'CodeCoverage.exe'嗎? – perreal