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

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

Коммерческие C++ продукты статического анализа доступны. Несмотря на то, что такие продукты - это здорово, для студентов стоимость слишком велика, и получить пробную версию, как правило, довольно сложно.

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

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

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

Некоторые ссылки по теме.

Ответ 1

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

Смотрите: http://danielwilkerson.com/oink/index.html

Ответ 2

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

Mac OSX:

brew install cppcheck

Ответ 3

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

В частности, опция обнаруживает следующие элементы:

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

Ответ 4

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

Обновить. На целевой странице говорится: "Анализатор является непрерывным процессом в процессе работы", тем не менее он теперь документально подтвержден как статический анализатор для C и С++.

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

Компилятор: -fsyntax-only

Ответ 5

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

Вкратце:

-pedantic -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 или что-то в этом роде.

Ответ 7

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

cl /analyze Sample.cpp

Ответ 9

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

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

Mac OSX:

brew install splint

Ответ 10

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

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

Ответ 11

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

Подробнее см. http://sinv-56013.edu.hsr.ch/redmine/projects/metricular/wiki/Documentation, например, демонстрацию видео и документацию.

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

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

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

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

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

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

  • McCabe (Cyclomatic Complexity)
  • EfferentCoupling для каждого типа
  • Логические исходные коды кода
  • Число членов на тип
  • Количество параметров для каждой функции

Ответ 12

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

Ответ 13

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

Ответ 14

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