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


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

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

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

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

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

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

14 280

14 ответов:

Oink-это инструмент, построенный поверх интерфейса Elsa C++. Свинина-это вилка Эльзы / Хрюка.

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

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

Mac OSX:

brew install cppcheck

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

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

  • определить конструктор копирования и оператор присваивания для классов с динамически выделенной памятью.
  • предпочитают инициализацию назначению в конструкторах.
  • сделать виртуальные деструкторы в базовых классах.
  • пусть "operator=" возвращает ссылку на *this.
  • не пытайтесь вернуть ссылку, когда должны вернуть объект.
  • различают префиксные и постфиксные формы операторов инкремента и декремента.
  • никогда не перегружайте "&&", "||", или ",".

в стадии разработки на данный момент, но лязгом делает анализ C и предназначен для обработки C++ с течением времени. Это часть LLVM.

обновление: хотя на целевой странице написано "анализатор находится в непрерывном процессе работы", это тем не менее сейчас документирована как статический анализатор для C и C++.

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

параметр компилятора: - fsyntax-только

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

в итоге:

-педантичный -стены -Wextra -Wcast-выровнять -Wcast-кач -Wctor-dtor-конфиденциальность-Wdisabled-оптимизация-Wformat=2 -Winit-собственной Wlogical-ОП -Wmissing-объявления -Wmissing-включать-изд -Wnoexcept -Волд-стиле-монолитно-Woverloaded-виртуальный -Wredundant-несколько деклараций -Wshadow -Wsign-преобразования -Wsign-промо -устриц.-нуль-страж-устриц.-переполнение=5 -Wswitch-по умолчанию -Wundef -Werror -кто-неиспользованные

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

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

cl / анализ образца.cpp

работа статического анализа Mozilla наверное стоит посмотреть.

Шина кажется, чтобы заполнить счет за С.

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

Mac OSX:

brew install splint

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

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

мы работали над плагином Eclipse CDT под названием metriculator. Он все еще находится в стадии разработки, но некоторые основные показатели (например, 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 статически анализирует исходный код C++ и генерирует программные метрики. Метрики реализованы в виде Шашки кодана. Результаты анализа можно изучить в отдельном представлении. Каждый метрика имеет настраиваемые свойства (например, порог для ' max строк кода на единицу функция'). Превышение этого порога сообщит о проблеме и создаст маркер в Редакторе исходного кода.

с metriculator вы можете:

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

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

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

вы должны попробовать oo-браузер он имеет удивительную интеграцию с xemacs

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

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