WikiSort.ru - Не сортированное

ПОИСК ПО САЙТУ | о проекте
Cppcheck
Тип Статический анализатор кода
Написана на C++
Первый выпуск 8 мая 2007
Последняя версия
Лицензия GPLv3
Сайт cppcheck.sourceforge.net

Cppcheck — статический анализатор кода для языка C/C++, предназначенный для поиска ошибок, которые не обнаруживаются компиляторами. Главной целью проекта является сведение до минимума количества ложных срабатываний при поиске ошибок[2].

Анализатор способен проверять нестандартные участки кода, включающие использование расширений компилятора, встраиваемый ассемблер и т. п.[3]

Возможности

Обнаруживает различные типы ошибок в программах[4].

  • Проверяет выход за пределы.
  • Обнаруживает утечки памяти.
  • Обнаруживает возможное разыменовывание NULL-указателей.
  • Обнаруживает неинициализированные переменные.
  • Обнаруживает неправильное использование STL.
  • Проверяет обработку исключительных ситуаций на безопасность.
  • Находит устаревшие и неиспользуемые функции.
  • Предупреждает о неиспользуемом или бесполезном коде.
  • Находит подозрительные участки кода, которые могут содержать в себе ошибки.

Также позволяет скачивать и подключать правила[5] и дополнения[6] из репозиториев cppcheck. Собственные правила для проверок могут быть добавлены посредством регулярных выражений[3].

Возможно уточнение стандарта, которому соответствует проверяемый код. Поддерживаются следующие стандарты: C89, С99, С11, С++03, С++11, POSIX. При этом одновременно можно указывать несколько стандартов сразу (например, С11 и POSIX)[7].

Помимо стандарта можно указать целевую платформу для более точного определения ошибок. Каждая платформа определяет размеры базовых типов данных и специфичные для платформы типы данных[3]. Среди доступных можно указать UNIX-подобную операционную систему либо операционную систему Windows разрядностью 32 или 64 бита[7].

Особенности статического анализа

Перед выполнением статического анализа исходный код преобразуется в представление, удобное для дальнейшего анализа. Программа удаляет все комментарии, подставляет вместо макросов их определения, заменяет все переопределения типов на оригинальные типы данных, приводит код к единому стилю оформления. Если значения переменных известны, то вместо названий переменных подставляются их значения. К названиям переменных добавляются их уникальные идентификаторы в рамках программы, что упрощает дальнейший анализ использования переменных. Например, int a; может быть заменено на int a@1;, если переменная объявлена первой в программе. Также производятся и другие упрощения кода, предназначенные для облегчения анализа. Следующим этапом идёт проверка кода согласно загруженным в программу правилам, которые сопоставляют код с шаблонами критических и стилевых ошибок. Самые простые правила могут основываться на использовании регулярных выражений[8].

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

Использование

Работа с Cppcheck производится из командной строки. Начиная с версии 1.33, также доступен кроссплатформенный графический интерфейс, написанный на Qt[9].

Для анализа одного или нескольких исходных файлов достаточно запустить программу cppcheck, передав ей в качестве аргументов пути к проверяемым файлам. Если вместо имени файла указать каталог, программа будет осуществлять рекурсивный обход каталога и анализировать все компилируемые файлы в нём[3].

Пример запуска анализа нескольких файлов и каталога на UNIX-подобных операционных системах:

cppcheck test1.c test2.c relative/path/test3.c /absolute/path/test4.c project/src/

Пример проверки файла

Рассмотрим пример программы на языке Си с ошибкой, из-за которой перепутаны местами индекс массива и его размер. Файл test.c:

 1 #include <stdlib.h>
 2 #include <stdio.h>
 3 
 4 int main()
 5 {
 6     char s[255];
 7     s[255] = '\0';
 8 
 9     return EXIT_SUCCESS;
10 }

Для проверки файла test.c на ошибки с помощью Cppcheck необходимо исполнить следующую команду:

cppcheck test.c

После исполнения команды будет показано сообщение об ошибке выхода за пределы массива при обращении к переменной s:

[test.c:7]: (error) Array 's[255]' accessed at index 255 which is out of bounds.

Интеграция с инструментами разработки

Поддерживает интеграцию с различными инструментами разработки[10]:

См. также

Примечания

  1. Release 1.86 — 2018.
  2. Cppcheck - A tool for static C/C++ code analysis. cppcheck.sourceforge.net. Проверено 21 января 2016.
  3. 1 2 3 4 Мануал по Cppcheck версии 1.75.
  4. cppcheck / Wiki / ListOfChecks. sourceforge.net. Проверено 21 января 2016.
  5. danmar/cppcheck - rules. GitHub. Проверено 21 января 2016.
  6. danmar/cppcheck - add ons. GitHub. Проверено 21 января 2016.
  7. 1 2 Ubuntu Manpage: cppcheck - Tool for static C/C++ code analysis. manpages.ubuntu.com. Проверено 31 января 2016.
  8. Daniel Marjamäki. Writing Cppcheck rules. Part 2 - The Cppcheck data representation (англ.) : сайт. — 2010.
  9. cppcheck / News: cppcheck-1.33. sourceforge.net. Проверено 8 марта 2016.
  10. cppcheck / Wiki / Home. sourceforge.net. Проверено 21 января 2016.
  11. FAQ - (англ.). codedx.com. Проверено 31 января 2016.
  12. CoderGears, https://www.codergears.com/home. CppDepend :: Achieve higher C/C++ code quality. www.cppdepend.com. Проверено 31 января 2016.
  13. Automatic static code analysis before uploading your code. Omerez. Проверено 21 января 2016.

Ссылки

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии