Вопрос

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

Это было полезно?

Решение

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

Другие советы

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

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

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

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

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

Моя компания 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

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

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

scroll top