Вы можете использовать инструмент покрытия кода (динамический анализ), чтобы получить представление о том, что код не
выполняется, а затем вручную анализировать, чтобы увидеть, действительно ли этот код бесполезен.
Если вы хотите статический анализ, вам нужен инструмент, который может прочитать весь
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