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.)
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). –
Czy sprawdziłeś "VSInstr.exe" i "CodeCoverage.exe"? – perreal