Идентификация мертвого кода (C++)

52
задан Community 23 May 2017 в 02:23
поделиться

5 ответов

Вы захотите что-то вроде C++ QA ( http://www.programmingresearch.com/QACPP_MAIN.html ), также видеть http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis для аналогичных продуктов.

Вы ищете статический инструмент анализа кода, который обнаруживает недостижимый код; много инструкций по кодированию (таких как MISRA-C++, если я не ошибаюсь) требуют, чтобы никакой недостижимый код не существовал. Аналитический инструмент, снабженный приводом конкретно для осуществления такой инструкции, был бы лучшим выбором.

И Вам понравится быть в состоянии найти другое использование для инструмента также.

6
ответ дан 7 November 2019 в 09:38
поделиться

Я не знаю Визуальный C и также рекомендовал - Wunreachable-код определенные инструменты покрытия. Как решение для Вашей ситуации я попробовал бы следующее:

  1. Делают с ctags (или подобная программа), список всех Ваших символов в Вашем источнике
  2. Включает в Вашем компиляторе устранение мертвого кода (я принял бы его значения по умолчанию к на)
  3. , Включают Вашу whole-program/link оптимизацию времени (таким образом, он знает, что не используемые функции в Вашем moduls не требуются другим внешним обликом и отбрасываются)
  4. , Берут символы от Вашего двоичного файла и сравнивают их с символами от 1.

Другой подход мог быть некоторым генерирующимся инструментом графа вызовов (например, doxygen).

3
ответ дан flolo 7 November 2019 в 09:38
поделиться

Запишите сценарий, который случайным образом удаляет функцию (из исходного кода) и перекомпилировал все с нуля. Если это все еще компилирует - что функция была мертвым кодом.

-3
ответ дан Krzysztof Kowalczyk 7 November 2019 в 09:38
поделиться

Один подход, который работает на меня - с Дельфи - должен позволить отладить и запустить Вашу программу под отладчиком.

, Когда программа Дельфи запущена под отладчиком, шоу IDE в поле, какие строки кода могут быть установлены как точки останова. Код, который действительно мертв - т.е. был разделен компоновщиком/компилятором, очевиден, поскольку точки останова не могут быть установлены там.

Некоторые дополнительные примечания, поскольку комментаторы, кажется, неправильно понимают это:

a: Вы не должны пытаться установить точку останова на каждой строке. Просто откройте исходный файл в IDE, и быстро просмотрите его путем прокрутки. Мертвый код легко определяется.

b: Это не 'проверка' покрытия кода. Вы не должны запускать приложение, чтобы видеть, достигает ли оно строк.

c: я не достаточно знакомый VS2008, так не может сказать, будет ли это предложение работать.

0
ответ дан Roddy 7 November 2019 в 09:38
поделиться

Я знаю, что продукты Gimpel Lint ( PC-Lint и Flexelint ) будут определять недоступный код и неиспользуемые / неиспользуемые модули.

Они оба попадают в категорию инструментов статического анализа.

У меня нет связи с Gimpel, я просто довольный постоянный клиент.

8
ответ дан 7 November 2019 в 09:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: