2013-04-17 11 views
12

Mam naprawdę duże rozwiązanie w VS2010 C++ z kilkoma projektami i chcę tylko zachować te części, które są rzeczywiście potrzebne.C++ znaleźć potrzebne części kodu

Jest to trudne, ponieważ niektóre części jednego projektu wymagają innych części innych projektów.

Czy ktoś wie, w jaki sposób mogę automatycznie usunąć te części kodu, które nie są wywoływane podczas uruchamiania aplikacji, być może przy użyciu dodatku dla VS2010 lub tak?

Sądzę, że jest to dość niezwykłe życzenie, ale być może ktoś i tak zna rozwiązanie.

Dziękuję.

+0

Dla VS2010 jest to potencjalnie nowe pytanie, ale [to pytanie może ci pomóc] (http://stackoverflow.com/questions/1413548/visual-studio-find-unused-code). –

+0

Czy sprawdziłeś "VSInstr.exe" i "CodeCoverage.exe"? – perreal

Odpowiedz

4

Warto zabawy z opcji łącza, aby zobaczyć, czy mogą pomóc: kod odrzutów łącznikowe w statycznie połączone biblioteki, których nie używa. Musi wykonać dokładnie taką pracę, jaką chcesz, tj. Zamknąć wszystko, co jest używane i odrzucić resztę. Pracowałem w visual studio 2008, aby usunąć nieużywany kod z biblioteki, którą utrzymywałem.

Użyłem/OPT: REF/VERBOSE w wierszu poleceń linkera, a następnie przeszukałem wynik dla "Zignorowano. * Z MYLIB.lib" używając wyrażenia regularnego. Wypróbowałem go w Visual Studio 2010 właśnie teraz (nie mam 2012), i było trochę inaczej niż w roku 2008. Potrzebowałem/OPT: REF/VERBOSE: REF, i wydawało się, że działa tylko w trybie debugowania, ponieważ prawdopodobnie optymalizacje w czasie łącza stają się przeszkodą (pod wersją mówi się, że odrzucano funkcje, które były używane!). W każdym razie warto przyjrzeć się bardziej szczegółowo, ponieważ działało to w 2008 roku. Byłbym zainteresowany usłyszeć, jeśli znajdziesz się w dowolnym miejscu (możesz najpierw wypróbować prosty, testowy projekt).

EDYCJA: Mam studio wizualne 2012 w domu, więc wypróbowałem to.

Utworzono statyczny testlib biblioteka z test.h

void used(); 
void unused(); 

i 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!!!!"); 
} 

i aplikacji konsoli z pliku cpp

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

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

wtedy dla kompilacji debugowania , w opcjach łącza dla aplikacji aplikacji konsolowej Odwołania do Tak (/ OPT: REF). Następnie dodaj "VERBOSE: REF" do opcji wiersza poleceń. W wyjściu łącznika między dużo śmieci można dostać

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) 

i na podstawie tego, co zrobiłem z visual studio 2008 to mam nadzieję, że powinien wykonać zadanie. (Widzę teraz, że twoje pytanie rzeczywiście dotyczyło wizualnego studia 2010. Zgaduję, że ta technika będzie działać w 2008, 2010 i 2012 roku z modyfikacjami, jak zauważono.)

1

Mam - dla mojej sytuacji - całkiem dobre rozwiązanie. Moje rozwiązanie zawiera około 20 projektów i mogę zwolnić każdy projekt (aby wyglądał na wyszarzony). Jeśli mój kod nadal działa, wiem, że mogę go bezpiecznie usunąć.

Powiązane problemy