В Java есть очень хорошие инструменты статического анализа с открытым исходным кодом, такие как FindBugs, Checkstyle и PMD. Эти инструменты просты в использовании, очень полезны, работают в нескольких операционных системах и бесплатно.
Доступны коммерческие продукты статического анализа C++. Хотя наличие таких продуктов - это здорово, их стоимость слишком высока для студентов, и обычно довольно сложно получить пробную версию.
Альтернативой является поиск инструментов статического анализа C++ с открытым исходным кодом, которые будут работать на нескольких платформах (Windows и Unix). Используя инструмент с открытым исходным кодом, его можно модифицировать в соответствии с определенными потребностями. Найти инструменты было непростой задачей.
Ниже приведен краткий список инструментов статического анализа C++, которые были найдены или предложены другими.
-Weffc++ для GNU g ++ (из ответов)Какие портативные инструменты статического анализа C++ с открытым исходным кодом Другие известны всем и могут быть рекомендованы?
Некоторые ссылки по теме.
Для коммерческого инструмента существует также CppDepend (cppdepend.com), и, возможно, для студентов может быть достаточно пробной версии.





Шина, кажется, оплачивает счет за C.
Если бы вы не указали открытый исходный код, я бы сказал, что Gimpel SoftwarePCLint, вероятно, является одним из лучших инструментов, доступных для проверки статического кода на C++. Но, конечно, это не с открытым исходным кодом.
Mac OS X:
brew install splint
Но дорого для одного разработчика :) Мне больше нравится бесплатное
Шина предназначена для C, а не для C++. Не знаю, планируют ли они расширять охват или нет. Надеюсь на это!
Да, стоит попробовать pclint, его аналог в unix называется flexe-lint, версия 9.0 должна быть быстрее, чем версия 8.x, версия 9.0 также поддерживает предварительно скомпилированный заголовок для ускорения анализа. Вам нужно время, чтобы приручить pc-lint, у него есть ложные срабатывания, которые могут доставить вам неприятности, если вы не можете выборочно игнорировать его.
Если под «открытым исходным кодом» вы действительно имели в виду «бесплатный», то анализ предварительный завтрак от Microsoft подойдет вам. Конечно, только для Windows. Он полностью интегрирован в Visual Studio и компилятор. например.:
cl /analyze Sample.cpp
В какой версии и редакции это доступно?
Кажется, встроен в компилятор, который бесплатен. Интеграция возможна только в версии Team.
Статический анализ Mozilla, наверное, стоит посмотреть.
Что касается компилятора GNU, в gcc уже есть встроенная опция, которая включает дополнительный предупреждение к параметрам -Wall. Вариант - -WeffC++, и он о нарушениях некоторых правил Скотт Мейерс, опубликованных в его книгах "Эффективный и более эффективный C++".
В частности, опция определяет следующие элементы:
В дополнение к gcc -Wall и -WeffC++, -Wextra выполняет некоторый хороший бесплатный статический анализ, например, ветки, которые не возвращают значение, или проверяют беззнаковое значение меньше нуля. Примечательно, как часто профессиональные программисты думают, что последнее - хорошая идея ...
Уф, -Weffc++ предупреждает о тонны конструкций, которые прекрасно подходят для большой кодовой базы. Однако я поддерживаю предложение -Wextra; без него не выходить из дома!
На данный момент в разработке, но лязгать выполняет анализ C и нацелен на обработку C++ с течением времени. Это часть проекта LLVM.
Обновлять: Хотя на целевой странице написано: «Работа над анализатором постоянно продолжается», тем не менее, теперь это задокументированный как статический анализатор как для C, так и для C++.
Вопрос: Как запустить GCC / Clang для статического анализа? (только предупреждения)
Параметр компилятора: -fsyntax-only
LLVM - очень интересный проект, который по сравнению с gcc генерирует более оптимизированные двоичные файлы за меньшее время; и clang, когда он будет завершен, будет его интерфейсом ...
Другой редактор добавил информацию о переключателе -fsyntax-only. Просто обратите внимание, что это, по сути, запрос на запуск анализа, который компилятор будет запускать без фактической компиляции, и выдачи предупреждений. Я не уверен, но думаю, что это отличается от статического анализа.
Oink - это инструмент, созданный на основе интерфейса Elsa C++. Mozilla's Pork - это форк Elsa / Oink.
См .: http://danielwilkerson.com/oink/index.html
За свою жизнь я скомпилировал более 1000 программ, но, ради бога, я не могу скомпилировать этот пакет ни при каких условиях. Я пробовал использовать Fedora, Ubuntu, WSL, Cygwin, MSYS2, Windows - но нет. Всегда чего-то не хватает, а документация просто ужасна. Не поймите меня неправильно, я считаю, что инструмент превосходный. Но сайт и документация выглядят так, будто их никто не трогал лет 10-15.
Doxygen выполняет некоторый анализ потока управления и генерирует графики. Возможно, это не то, что вы ищете, но я нашел их полезными для просмотра.
CppCheck является кроссплатформенным и открытым исходным кодом.
Mac OS X:
brew install cppcheck
@gio Я лично не видел никаких проблем. Я считаю, что CppCheck может игнорировать или исключать определенные пути или файлы, что помогает сузить область действия.
В Windows: choco install cppcheck
Вы должны попробовать oo-browser, у него отличная интеграция с xemacs
Microsoft PREFast также доступен в Windows Driver Kit. Версия 7.0 загружается здесь.
В документации Microsoft указано, что его следует запускать только с кодом драйвера, но в этом (старом) Сообщение блога изложены шаги по его запуску. Возможно, это можно будет интегрировать в обычный процесс сборки?
PREFast сильно замедлит ваш процесс сборки, для любого реального проекта ваш сервер сборки, возможно, не может себе этого позволить.
@zhaorufei: Большинство статических анализов не «быстрые»; им по определению предстоит довольно сложная работа по анализу кода. Если вам все время не нравится стоимость сборки, просто сделайте ее необязательной.
Можно также закодировать расширения GCC в ТАЯТЬ (специфический для домена язык, разработанный для расширения GCC) или плагины GCC на C (намного сложнее), чтобы провести некоторый собственный анализ.
Прочитал один из PDF-файлов о MELT и расширении gcc с помощью melt, мне кажется, что добавлять свои собственные плагины в gcc все еще слишком сложно / сложно. Непрактичный способ для обычного пользователя.
Расширение GCC сложно, независимо от того, как вы это делаете (через плагины C, через MELT или даже через Python). Это потому, что GCC сложен. А настройка инструмента статического анализа C++ Любые - это жесткий, потому что спецификация языка C++ очень сложна, и вам придется справиться с большей частью этой сложности (любая нетривиальная программа на C++ использует множество функций C++, возможно, через стандартную библиотеку C++) .
Джон Кармак также упоминает PVS-Studio в этом интересном сообщение в блоге "Статический анализ кода".
Это не «открытый исходный код», и абсолютно и определенно не «бесплатный» в любом значении этого слова. Это хорошо известный инструмент статического анализа (я думаю, второй по охвату), но его цена довольно высока.
Мы работаем над подключаемым модулем 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++ и генерирует метрики программного обеспечения. Метрики реализованы как Шашки Codan. Результаты анализа можно просмотреть в отдельном окне. Каждый метрика имеет настраиваемые свойства (например, порог для максимального количества строк кода на функция '). Превышение этого порога сообщит о проблеме и создаст маркер. в редакторе исходного кода.
с помощью метрикулятора вы можете:
В настоящее время метрикулятор предоставляет следующие метрики:
Кто-то еще упомянул -WeffC++, но на самом деле это одно из немногих предупреждений 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 или что-то в этом роде.
Commercial, DMS Software Reengineering Toolki, обрабатывает Java, C, C++ и COBOL, обеспечивает синтаксический анализ, построение AST, разрешение имени / типа, анализ управления / потока данных, пользовательский анализ и преобразование. См. semanticdesigns.com/Products/DMS/DMSToolkit.html.