Какие инструменты для статического анализа C ++ с открытым исходным кодом доступны?

Java имеет очень хорошие инструменты для статического анализа с открытым исходным кодом, такие как FindBugs , Checkstyle и PMD . Эти инструменты просты в использовании, очень полезны, работают на нескольких операционных системах и бесплатны .

Коммерческие продукты статического анализа C ++ доступны от поставщиков Klocwork , Gimpel и Coverity . Также существует менее известный анализатор PVS-Studio . Хотя наличие таких продуктов велико, стоимость слишком велика для студентов, и обычно довольно сложно получить пробную версию.

Альтернативой является поиск инструментов статического анализа с открытым исходным кодом C ++, которые будут работать на нескольких платформах (Windows и Unix). Используя инструмент с открытым исходным кодом, он может быть изменен для удовлетворения определенных потребностей. Найти инструменты было непростой задачей.

Ниже приведен краткий список инструментов статического анализа C ++, которые были найдены или предложены другими.

  • Проверка C ++ http://sf.net/projects/cppcheck/
  • Oink http://danielwilkerson.com/oink/index.html
  • Счетчик кода C и C ++ http://sourceforge.net/projects/cccc/
  • Splint (из ответов)
  • Свинина Mozilla (из ответов) (Это теперь часть Oink)
  • Дегидра Mozilla (из ответов)
  • Используйте опцию -Weffc++ для GNU g ++ (из ответов)

Каковы некоторые другие инструменты для статического анализа C ++ с открытым исходным кодом, которые все знают и могут быть рекомендованы?

Некоторые связанные ссылки.

  • Средство анализа статического кода C ++ в Windows
  • http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis
  • http://www.chris-lott.org/resources/cmetrics/
  • Бесплатный инструмент для проверки исходного кода C / C ++ на основе набора стандартов кодирования?
  • http://spinroot.com/static/
  • Выбор инструмента для анализа статического кода

Oink – это инструмент, созданный на верхней части Elsa C ++ front-end. Свинина Mozilla – это вилка Elsa / Oink.

См .: http://danielwilkerson.com/oink/index.html

CppCheck является открытым исходным кодом и кросс-платформенным.

Mac OS X:

 brew install cppcheck 

Что касается компилятора GNU, gcc уже имеет встроенную опцию, которая дает дополнительное предупреждение для тех, что есть -Wall. Вариант -Weffc ++, и речь идет о нарушениях некоторых рекомендаций Скотта Мейерса, опубликованных в его книгах « Эффективный и эффективный C ++ ».

В частности, опция определяет следующие пункты:

  • Определите конструктор копирования и оператор присваивания для classов с динамически распределенной памятью.
  • Предпочитают инициализацию назначения в конструкторах.
  • Сделать деструкторы виртуальными в базовых classах.
  • Имейте «operator =» вернуть ссылку на * this.
  • Не пытайтесь вернуть ссылку, когда вы должны вернуть объект.
  • Различать префиксные и постфиксные формы операторов инкремента и декремента.
  • Никогда не перегружайте «&&», «||» или «,».

В настоящее время разрабатывается, но clang анализирует C и нацелен на обработку C ++ с течением времени. Это часть проекта LLVM .

Обновление . Хотя целевая страница говорит, что «Анализатор является непрерывной работой», он тем не менее теперь документирован как статический анализатор для C и C ++.

Вопрос: Как запустить GCC / Clang для статического анализа? (только предупреждения)

Опция компилятора: -fsyntax-only

Кто-то еще упомянул -Weffc ++, но это на самом деле одно из единственных предупреждений GCC, которое я не включаю по умолчанию. Однако набор предупреждений, которые я включаю, является самым важным инструментом статического анализа в моем наборе. Вы можете увидеть полный список рекомендуемых предупреждений .

В итоге:

-специальный -Wall -Wextra -Wcast-align -Wcast-qual -Wctor-dtor-privacy -Wdisabled-optimization -Wformat = 2 -Winit-self -Wlogical-op -Wmissing-declarations -Wmissing-include-dirs -Wnoexcept -Wold -style-cast -Woverloaded-virtual -Wredundant-decls -Wshadow -Wsign-conversion -Wsign-promo -Wstrict-null-sentinel -Wstrict-overflow = 5 -Wswitch-default -Wundef -Werror -Wno-unused

Обратите внимание, что для некоторых из них требуется новая версия gcc, поэтому вам может потребоваться исключить их из списка, если вы застряли на 4.5 или что-то в этом роде.

Джон Кармак также упоминает PVS-Studio в этом интересном сообщении в блоге «Анализ статического кода» .

Если по Open Source вы действительно имели в виду «бесплатно», то предварительный анализ Microsoft является хорошим. Только для Windows. Он полностью интегрирован в Visual Studio и компилятор. например:

cl / analysis Sample.cpp

Статический анализ Mozilla, вероятно, стоит посмотреть.

Кажется, что Splint заполняет счет за C.

Если вы не указали открытый исходный код, я бы сказал, что PCLint от Gimpel Software, вероятно, является одним из лучших инструментов для проверки статического кода на C ++. Но, конечно, это не с открытым исходным кодом.

Mac OS X:

 brew install splint 

Microsoft PREFast также доступен в комплекте драйверов Windows. Версия 7.0 можно скачать здесь .

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

Мы работаем над подключаемым модулем Eclipse CDT, называемым метрикулятором. Он все еще находится в стадии разработки, но некоторые основные показатели (например, LSLOC, McCabe, EfferentCoupling) уже реализованы.

См. http://sinv-56013.edu.hsr.ch/redmine/projects/metricular/wiki/Документация для получения дополнительной информации, такой как демонстрация видео и документация.

Последняя ночная assembly доступна для установки через сайт обновлений по адресу: http://sinv-56013.edu.hsr.ch/metriculator/updatesite-nightly/site/

Дальнейшее описание

Metriculator статически анализирует исходный код C ++ и генерирует метрики программного обеспечения. Метрики реализуются как Codan checkers. Результаты анализа могут быть изучены в отдельном виде. Каждая метрика имеет настраиваемые свойства (например, пороговое значение для «максимальных строк кода для каждой функции»). Превышение этого порога сообщит о проблеме и создаст маркер в редакторе исходного кода.

с метрикулятором вы можете:

  • анализировать файлы и папки C ++
  • определить пороговые значения показателей и включить / отключить метрику с использованием страницы предпочтений Codans
  • есть маркеры проблем в редакторах исходного кода
  • анализировать результаты
  • результаты экспортных метрик как облако тегов (доступны как дополнительная функция через сайт обновлений)

В настоящее время метрикулятор имеет следующие показатели:

  • Маккабе (цикломатическая сложность)
  • EfferentCoupling для каждого типа
  • Логические исходные строки кода
  • Количество участников на тип
  • Количество параметров на функцию

Вы должны попробовать оо-браузер, который имеет потрясающую интеграцию с xemacs

Можно также кодировать расширения GCC в MELT (язык, специфичный для домена, предназначенный для расширения GCC) или плагины GCC на C (намного сложнее), чтобы выполнить какой-либо пользовательский анализ.

Doxygen выполняет некоторый анализ streamа управления и генерирует графики. Возможно, это не то, что вы ищете, но я с удовольствием смотрю на них.

Interesting Posts

Как получить переменные данные из classа

Недопустимая проблема с доступом к нескольким streamам

Как работают магнитные ссылки BitTorrent?

FTP-соединение постоянно прерывается в определенный момент

Помощь оптимизации цикла цикла для окончательного назначения

Как избежать обратных косых черт в строке R

Как заставить renderdocui.exe запустить GTAVLauncher.exe, а скрипт hook v dll находится в каталоге игр?

Как я могу сохранить процесс после закрытия сеанса шпатлевки?

Удалите расширение .php с .htaccess

Чистая установка Mac OS X Lion на новый SSD

Перечисление всех дополнительных компонентов

Рекомендации по сериализации объектов в пользовательский строковый формат для использования в выходном файле

Какой лучший план для установки Linux? Разделение / home, / usr, / boot?

Создавайте бесплатные / платные версии приложения из того же кода

В чем разница между режимами Release и Debug в Visual Studio?

Давайте будем гением компьютера.