Cppcheck | |
---|---|
Тип | Статический анализатор кода |
Написана на | C++ |
Первый выпуск | 8 мая 2007 |
Последняя версия | |
Лицензия | GPLv3 |
Сайт | cppcheck.sourceforge.net |
Cppcheck — статический анализатор кода для языка C/C++, предназначенный для поиска ошибок, которые не обнаруживаются компиляторами. Главной целью проекта является сведение до минимума количества ложных срабатываний при поиске ошибок[2].
Анализатор способен проверять нестандартные участки кода, включающие использование расширений компилятора, встраиваемый ассемблер и т. п.[3]
Обнаруживает различные типы ошибок в программах[4].
Также позволяет скачивать и подключать правила[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]:
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .