Ответ 1
Oink - это инструмент, созданный на верхней части Elsa С++ front-end. Mozilla Pork - это вилка Elsa/Oink.
В Java есть несколько очень хороших инструментов статического анализа с открытым исходным кодом, таких как FindBugs, Checkstyle и PMD. Эти инструменты просты в использовании, очень полезны, работают на нескольких операционных системах и бесплатны.
Коммерческие C++ продукты статического анализа доступны. Несмотря на то, что такие продукты - это здорово, для студентов стоимость слишком велика, и получить пробную версию, как правило, довольно сложно.
Альтернатива - найти инструменты статического анализа с открытым исходным кодом C++, которые будут работать на нескольких платформах (Windows и Unix). Используя инструмент с открытым исходным кодом, он может быть изменен в соответствии с определенными потребностями. Поиск инструментов не был легкой задачей.
Ниже приведен краткий список инструментов статического анализа C++, которые были найдены или предложены другими.
-WeffC++
для GNU g++ (из ответов)Какие другие портативные с открытым исходным кодом C++ инструменты статического анализа, что кто -то знает и может быть рекомендован?
Некоторые ссылки по теме.
Oink - это инструмент, созданный на верхней части Elsa С++ front-end. Mozilla Pork - это вилка Elsa/Oink.
CppCheck является открытым исходным кодом и кросс-платформенным.
Mac OSX:
brew install cppcheck
Что касается компилятора GNU, gcc уже имеет встроенную опцию, которая позволяет дополнительно предупреждать о том, что -Wall. Опция -WeffС++, а также о нарушениях некоторых рекомендаций Скотта Майерса, опубликованных в его книгах "Эффективный и эффективный С++".
В частности, опция обнаруживает следующие элементы:
В настоящее время разработка, но clang делает C-анализ и нацелена на обработку С++ с течением времени. Это часть проекта LLVM.
Обновить. На целевой странице говорится: "Анализатор является непрерывным процессом в процессе работы", тем не менее он теперь документально подтвержден как статический анализатор для C и С++.
Вопрос: Как запустить GCC/Clang для статического анализа? (только предупреждения)
Компилятор: -fsyntax-only
Кто-то еще упомянул -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 или что-то в этом роде.
Джон Кармак также упоминает PVS-Studio в этом интересном блоге сообщение "Анализ статического кода" .
Если под открытым исходным кодом вы действительно имели в виду "бесплатный", то предварительный анализ Microsoft является хорошим. Конечно, только для Windows. Он полностью интегрирован в Visual Studio и компилятор. например:
cl /analyze Sample.cpp
Работа по статическому анализу Mozilla, вероятно, стоит посмотреть.
Splint, кажется, заполняет счет для C.
Если вы не указали открытый исходный код, я бы сказал Gimpel Software PCLint, вероятно, является одним из лучших инструментов для проверки статического кода на С++. Но, конечно, это не с открытым исходным кодом.
Mac OSX:
brew install splint
Microsoft PREFast также доступна в комплекте драйверов Windows. Версия 7.0 доступна для загрузки здесь.
В документах Microsoft указано, что он должен выполняться только с кодом драйвера, но этот (старый) пост в блоге содержит шаги для его запуска. Возможно, он может быть интегрирован в обычный процесс сборки?
Мы работаем над подключаемым модулем 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 статически анализирует исходный код С++ и генерирует метрики программного обеспечения. Метрики реализуются как Коданские шашки. Результаты анализа могут быть изучены в отдельном виде. каждый метрика имеет настраиваемые свойства (например, пороговое значение для "максимальных строк кода за функция '). Превышение этого порога сообщит о проблеме и создаст маркер в редакторе исходного кода.
с метрикулятором вы можете:
В настоящее время метрикулятор имеет следующие показатели:
Вы должны попробовать использовать оо-браузер, у которого есть потрясающая интеграция с xemacs
Можно также расшифровать код GCC в MELT (язык, специфичный для домена, предназначенный для расширения GCC) или плагины GCC в C (много сложнее), чтобы выполнить некоторый выборочный анализ.
Doxygen выполняет некоторый анализ потока управления и генерирует графики. Возможно, это не то, что вы ищете, но я с удовольствием смотрю на них.