Какие инструменты статического анализа C++ с открытым исходным кодом доступны? [закрытый]
Java имеет некоторые очень хорошие инструменты статического анализа с открытым исходным кодом, такие как FindBugs,Checkstyle и PMD. Эти инструменты просты в использовании, очень полезны, работает на нескольких операционных системах и свободный.
коммерческие продукты статического анализа C++ доступны. Хотя наличие таких продуктов отлично, стоимость просто слишком много для студентов, и это, как правило, довольно трудно получить пробную версию.
в альтернативой является поиск инструментов статического анализа C++ с открытым исходным кодом, которые будут работать на нескольких платформах (Windows и Unix). С помощью инструмента с открытым исходным кодом, он может быть изменен в соответствии с определенными потребностями. Найти инструменты было непростой задачей.
Ниже приведен краткий список инструментов статического анализа C++, которые были найдены или предложены другими.
- C++ Check http://sf.net/projects/cppcheck/
- Хрю http://danielwilkerson.com/oink/index.html
- счетчик кода C и C++http://sourceforge.net/projects/cccc/
- Шина (из ответов)
- свинина Mozilla (из ответов) (это теперь часть Хрю)
- обезвоживание Mozilla (из ответов)
- опции Использовать
-Weffc++
для GNU g++ (из ответов)
какие-то другое портативный статический анализ C++ с открытым исходным кодом инструменты, которые кто-нибудь знает и может быть рекомендован?
некоторые связанные ссылки.
- https://stackoverflow.com/questions/97454/c-static-code-analysis-tool-on-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/
- выбор инструмента статического анализа кода
14 ответов:
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 или что-то еще.
Джон Кармак также упоминает PVS-Studio на сообщение в блоге на тему "статический анализ кода".
Если под открытым исходным кодом вы действительно имели в виду" бесплатно", то Microsoft prefast анализ хороший. Окна-только конечно. Он полностью интегрирован в Visual Studio и компилятор. например:
cl / анализ образца.cpp
работа статического анализа Mozilla наверное стоит посмотреть.
Шина кажется, чтобы заполнить счет за С.
Если бы вы не указали open source я бы сказал Gimpel Software ' s PCLint вероятно, это один из лучших инструментов, доступных для статической проверки кода в C++. Но, конечно, это не с открытым исходным кодом.
Mac OSX:
brew install splint
мы работали над плагином 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 для каждого типа
- логические исходные строки кода
- количество членов на тип
- количество параметров на функцию
можно также кодировать расширения GCC в MELT (доменный язык, предназначенный для расширения GCC) или GCC плагины в C (гораздо сложнее), чтобы сделать некоторый пользовательский анализ.