Это стоит играть вокруг с параметрами линии связи, чтобы увидеть, если они могут помочь вам: код компоновщика отбрасывает в статически которые он не использует. Он должен выполнять именно ту работу, которую вы хотите, т. Е. Закрыть все, что используется, и отказаться от остальных. Я получил эту работу в visual studio 2008, чтобы удалить неиспользуемый код из библиотеки, которую я поддерживал.
Я использовал/OPT: REF/VERBOSE в командной строке компоновщика, а затем обыскал результат для «Отбросил. * Из MYLIB.lib», используя регулярное выражение. Я попробовал это на визуальной студии 2010 только сейчас (у меня нет 2012), и это немного отличалось от 2008 года. Мне нужно/OPT: REF/VERBOSE: REF, и это только казалось, работало под отладкой, потому что предположительно оптимизация ссылок-ссылок мешает (при выпуске он сказал, что отбрасывает функции, которые были использованы!). В любом случае, стоит заглянуть в более подробно, потому что это работало в 2008 году. Мне было бы интересно услышать, если вы где-нибудь (вы можете попробовать простой, тестовый проект в первую очередь).
EDIT: У меня есть 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 это, мы надеемся, должны сделать эту работу. (Я вижу, теперь ваш вопрос на самом деле указан визуальной студией 2010. Я предполагаю, что этот метод будет работать в 2008, 2010 и 2012 годах с изменениями, как указано.)
Для VS2010 это потенциально новый вопрос, но [этот вопрос может помочь вам] (http://stackoverflow.com/questions/1413548/visual-studio-find-unused-code). –
вы проверили 'VSInstr.exe' и' CodeCoverage.exe'? – perreal