Инструмент для анализа источников C ++ (MSVC) - PullRequest
2 голосов
/ 19 июня 2009

Мне нужен инструмент, который анализирует источники C ++ и говорит, какой код не используется. Размер источников ~ 500мб

Ответы [ 4 ]

2 голосов
/ 19 июня 2009

PC-Lint это хорошо. Если это должно быть бесплатно / с открытым исходным кодом, ваш выбор сокращается. Cppcheck бесплатен и будет проверять наличие неиспользуемых частных функций. Я не думаю, что он ищет такие вещи, как неподготовленные классы вроде PC-Lint.

0 голосов
/ 12 июля 2009

Вы можете использовать инструмент покрытия кода (динамический анализ), чтобы получить представление о том, что код не выполняется, а затем вручную анализировать, чтобы увидеть, действительно ли этот код бесполезен.

Если вы хотите статический анализ, вам нужен инструмент, который может прочитать весь 500 МБ исходного кода (оценка 20 миллионов строк? Ух ты!) И вычислите консервативная оценка того, что используется. Это требует делать очки анализ по всей системе.

И вот почему: если вы пропустите какой-либо модуль Z, и решите, что FOO не используется, вы может позже узнать, что Z оказался тем, кто использовал FOO, или более тонко, Z скопировал значение указателя, который, как оказалось, имел & FOO в нем к третьему модулю M, который в свою очередь вызвал "неиспользуемую" функцию через указатель.

Это означает, что нет инструмента статического анализа, который читает только отдельные модули (модули компиляции) могут безопасно ответить на этот вопрос. И в ваших масштабах вы не можете позволить себе совершать глупые ошибки.

Моя компания Semantic Designs провела анализ точек для 35 миллионов линейных систем. кода C с использованием нашего инструментария реинжиниринга программного обеспечения DMS. DMS может читать очень большие системы исходного кода. Требуется пользовательский инструмент, не так много, потому что исходный код был в нечетном (Archiac) диалект C ++ (системы на чрезвычайно современных диалектах не могут быть такими большими, не хватает времени для их кодирования!), а потому что в очень больших системах Есть другие специфические факторы в игре. Для системы C мы сделали, был собственный динамический компоновщик, и это повлияло на анализ точек, который в свою очередь должен был быть настроен.

Поскольку у систем масштаба, которые вы обсуждаете всегда, есть такие сюрпризы (BIBSEH: «Потому что в больших системах все происходит»), вы будете скорее всего нужен специальный инструмент для ответа на вопрос. DMS разработан быть настроенным См http://www.semanticdesigns.com/Products/DMS/DMSToolkit.html и http://www.semanticdesigns.com/Products/FrontEnds/CppFrontEnd.html

0 голосов
/ 19 июня 2009

Еще раз, я добавлю AQTime в обсуждение. Имеет статический анализ кода для большинства, если не для всех поддерживаемых языков. Хотя я не особо углублялся в это, я в основном использовал динамические профилировщики (память, производительность и т. Д.)

0 голосов
/ 19 июня 2009

Инструмент покрытия кода - это то, что вам нужно, но вам придется запустить нашу программу через все функции и посмотреть, что обозначено как неиспользуемое. Поскольку код может быть экспортированными функциями DLL, вам нужно убедиться, что ничто не использует их внешне. Некоторые инструменты покрытия кода: Purify, CTC ++, Boundschecker могут иметь функциональность покрытия кода, если я правильно помню, и кучу других инструментов.

Будьте очень осторожны при удалении любой функции, которая могла быть экспортирована, не зная, какая внешняя программа может связывать / использовать ее.

...