﻿# Сравнение возможностей статических анализаторов кода PVS\-Studio и CppCat

Наша компания разрабатывает два анализатора кода для проверки проектов на языке Си/Си\+\+: PVS\-Studio и CppCat\. В статье рассказывается, чем отличаются функциональные возможности этих инструментов\.


> К сожалению, мы больше не развиваем и не поддерживаем проект CppCat\\\. Вы можете почитать \[здесь\]\(https://pvs\-studio\.ru/ru/blog/posts/0320/\) о причинах\\\.

![0258_PVS-Studio_and_CppCat_ru/image1.png](https://import.viva64.com/docx/blog/0258_PVS-Studio_and_CppCat_ru/image1.png)

## PVS\-Studio, CppCat

[PVS\-Studio](https://pvs-studio.ru/ru/pvs-studio/) и [CppCat](https://pvs-studio.ru/ru/cppcat/) это инструменты [статического анализа кода](https://pvs-studio.ru/ru/blog/terms/0046/)\. Они сокращают стоимость нахождения многих ошибок и опечаток\.

Первым нашим программным продуктом является анализатор PVS\-Studio\. Мы старались делать его максимально простым для изучения и использования\. Но сохранить простоту нам не удалось, хотя мы приложили к этому много усилий\.

Развиваясь, PVS\-Studio обрастал всё новыми функциональными возможностями\. Это неизбежно привело к осложнению интерфейса и настроек\. Реализация пожеланий заказчиков привела к появлению нескольких сценариев использования, что дополнительно усложняет изучение инструмента\.

Отказаться от функциональности нельзя\. Но хотелось вновь сделать инструмент простым, лёгким и недорогим\. Так появился облегченный анализатор CppCat\.

CppCat предоставляет основной набор функций, позволяющий использовать его в повседневной работе\. Анализатор легко попробовать и освоить\.

Начните своё знакомство именно с анализатора CppCat\. Если какой\-то функциональности не будет хватать, то тогда посмотрите в сторону PVS\-Studio\. Эта статья поможет понять, какие функции есть в CppCat и PVS\-Studio\.

## Краткое сравнение функциональности

![0258_PVS-Studio_and_CppCat_ru/image2.png](https://import.viva64.com/docx/blog/0258_PVS-Studio_and_CppCat_ru/image2.png)

Таблица 1\. Функциональные возможности анализаторов CppCat и PVS\-Studio\.

## Подробное сравнение функциональности

### CppCat, PVS\-Studio\. Проверка решения или отдельных файлов

PVS\-Studio и CppCat интегрируются в среду разработки Visual Studio и позволяют проверять исходный код приложений, написанный на языках: C, C\+\+, C\+\+/CLI, C\+\+/CX\.

Можно проверить как решение \(solution\) целиком, так и отдельные файлы\.

PVS\-Studio дополнительно позволяет проверить один проект или набор файлов, выбранных в дереве проекта\.

### CppCat, PVS\-Studio\. Диагностики общего назначения

Оба анализатора реализуют набор диагностических правил общего назначения\. Эти диагностики позволяют выявлять следующие классы ошибок:

* адрес локальной переменной возвращается из функции;
* арифметические переполнения, потеря значимости;
* выход за границы массива;
* двойное освобождение ресурсов;
* мёртвый код;
* нарушение "Закона Большой Двойки"\.
* недостижимый код;
* неинициализированные переменные;
* неиспользуемые переменные;
* некорректные операции сдвига;
* неопределённо/неуточнённое поведение;
* неправильная работа с типом HRESULT;
* неправильное представление о работе функции/класса;
* опечатки \(этот вид анализа проработан особенно хорошо\);
* отсутствие виртуального деструктора;
* оформление кода не совпадает с логикой его работы;
* ошибки из\-за Copy\-Paste;
* ошибки при работе с исключениями;
* переполнение буфера;
* проблемы безопасности;
* путаница с приоритетом операций;
* разыменование нулевого указателя;
* целочисленное деление на 0;
* циклы, выполняющие больше или меньше итераций, чем задумывалось;
* и многое другое\.

### CppCat, PVS\-Studio\. Автоматический анализ файлов после компиляции \(инкрементальный анализ\)

Запуск анализаторов PVS\-Studio и CppCat может осуществляться автоматически\. Этот режим включён по умолчанию\. При обнаружении потенциально опасного кода, анализаторы уведомляют об этом всплывающим сообщением\.

### CppCat, PVS\-Studio\. Интеграция с Visual Studio 2010, 2012, 2013

PVS\-Studio и CppCat интегрируются в среду разработки Visual Studio 2010, 2012, 2013\.

PVS\-Studio умеет интегрироваться и в другие среды, про что будет рассказано ниже\.

В CppCat мы решили не поддерживать Visual Studio 2005, 2008\. Собранная с помощью PVS\-Studio статистика показывает, что достаточно мало разработчиков продолжают использовать эти среды\. Среды VS2005, VS2008 используется как правило в больших, сложных проектах, где переход на новые версии средств разработки сложен и дорогостоящ\. Для интеграции в процесс разработки, функциональности CppCat скорее всего окажется недостаточно и потребуется использовать PVS\-Studio\.

При этом вы можете в одной из поддерживаемых версий Visual Studio указать использовать toolset от Visual Studio 2008\. Тогда CppCat будет проверять проекты от Visual Studio 2008, работая, например, в среде Visual Studio 2013\.

### PVS\-Studio\. Специализированные диагностики: 64\-bit, OpenMP, микрооптимизации

PVS\-Studio предлагает несколько дополнительных наборов правил:

1. [Диагностика 64\-битных ошибок](https://pvs-studio.ru/ru/pvs-studio/)\. Этот набор правил будет полезен при разработке 64\-битных проектов, работающих с большими объемами памяти\. Статический анализ является эффективным инструментом поиска многих [64\-битных ошибок](https://pvs-studio.ru/ru/blog/terms/0002/)\. Да, анализатор выдаёт много ложных срабатываний при поиске 64\-битных проблем\. Однако, потраченное время с лихвой компенсируется отсутствием трудноуловимых багов, охотиться за которыми можно неделями\.
1. [Микрооптимизации](https://pvs-studio.ru/ru/pvs-studio/)\. Статический анализ кода дает возможность обнаружить фрагменты, к которым можно применить микро\-оптимизации\. Это не замена инструментам профилирования, таким как Parallel Amplifier, CodeTune\. Это небольшое дополнение к ним\.

### PVS\-Studio\. Командная работа

PVS\-Studio предоставляет ряд функций, полезных при командной работе над большим проектом\.

1. Сохранение отчёта в различных форматах\.
1. Возможность задать в настройках путь до папки с проектом, в результате чего в сохранённом отчёте будут [относительные пути](https://pvs-studio.ru/ru/docs/manual/0027/)\. Это позволит открыт сохранённый отчет на другом компьютере с другим расположением проекта на диске\.
1. Возможность [интеграции с системой отслеживания ошибок](https://pvs-studio.ru/ru/docs/manual/0026/)\.

### PVS\-Studio\. Интеграция в системы автоматизации сборки, интеграция с MSBuild, command\-line версия

PVS\-Studio поддерживает различные сценарии использования\. Выбор конкретного сценария зависит от типа проекта и желаемых результатов\. Поскольку все варианты предусмотреть невозможно, мы помогаем наших клиентам интегрировать PVS\-Studio в их процесс разработки, настроить ночные запуски на сервере и так далее\. При необходимости мы адаптируем PVS\-Studio под задачи клиентов или разрабатываем дополнительные утилиты\. Все эти вопросы решаются в индивидуальном порядке\.

Основные режимы:

* [Проверка кода с помощью PVS\-Studio из командной строки](https://pvs-studio.ru/ru/docs/manual/0001/) используя Microsoft Visual Studio или Embarcadero RAD Studio \(при наличии проектных файлов vcproj/vcxproj для devenv\.exe или cbproj для bds\.exe\);
* [Прямая интеграция анализатора](https://pvs-studio.ru/ru/docs/manual/0006/) в системы автоматизации сборки \(при отсутствии проектных файлов \.vcproj/\.vcxproj/\.cbproj\);
* [Прямая интеграция в сборочный процесс MSBuild](https://pvs-studio.ru/ru/docs/manual/0028/) и режим интеграции MSBuild в Visual Studio IDE\.
* [Использование PVS\-Studio вместе с системами continuous integration](https://pvs-studio.ru/ru/docs/manual/0005/)\.

### PVS\-Studio\. Интеграция с Visual Studio 2005, 2008

PVS\-Studio поддерживает интеграцию в Visual Studio 2005, 2008\.

### PVS\-Studio\. Слабые диагностики общего назначения

Диагностики PVS\-Studio разделены на 3 группы приоритетов\. Третий уровень \- это диагностики, которые дают очень много ложных срабатываний или выявляют несущественные недочёты в коде\. Эти диагностики отключены в PVS\-Studio по умолчанию, но при желании их можно посмотреть\. Анализатор CppCat эти сообщения не показывает совсем\. 

### PVS\-Studio\. Standalone версия

PVS\-Studio Standalone сочетает в себе 3 основные функции:

1. Просматривать без запуска Visual Studio IDE результаты анализа \(\.plog\-файл\), сохраненные на другой машине\.
1. [Система мониторинга компиляции](https://pvs-studio.ru/ru/docs/manual/0031/)\. Анализатор отслеживает запуск компилятора и собирает всю необходимую для последующего анализа информацию\. Это позволяет проверить проект, компилируемый с помощью любой системы сборки\. Запуск процесса отслеживания может осуществляться как вручную, так и из командного файла\.

### PVS\-Studio\. Диагностики по заказу пользователей

В PVS\-Studio мы реализуем диагностики, которые не представляют интереса для большинства разработчиков, но нужны некоторым из наших пользователей\. Новые диагностики обсуждаются и реализуются в частном порядке\.

### PVS\-Studio\. Специфический функционал, расширенные настройки

PVS\-Studio предоставляет более детальные настройки, чем CppCat\. Вот некоторые из них:

* Управление запуском препроцессора\. По умолчанию CppCat и PVS\-Studio в начале запускают для препроцессирования файлов Clang\. Если произошла ошибка, то для препроцессирования запускается CL\.exe \(Visual C\+\+\)\. В PVS\-Studio можно указать, чтобы использовался только Clang или CL\.
* Можно проверять только те файлы, которые изменялись за указанный период времени\.
* Количество потоков для параллельного анализа\.
* Можно отключить отдельные диагностики\.
* Открывать документацию на русском или английском языке\.
* И так далее\.

## Подавление ложных срабатываний

В таблице не показана функциональность: подавление ложных срабатываний\. Механизмы для работы с ложными срабатываниями есть и в PVS\-Studio и в CppCat, но подходы разные\. Поэтому этот пункт мы решили рассмотреть отдельно\.

В CppCat и в PVS\-Studio применяются разные подходы\. В CppCat пользователь увидит предопределённый список диагностических сообщений\. Отсутствие выбора не является недостатком, как может показаться\. Выбраны диагностики с хорошим соотношением полезных сообщений к ложным сообщениям\. Почему это так важно, даётся ответ [здесь](https://pvs-studio.ru/ru/blog/posts/0132/) \(см\. ответ на вопрос "Почему я проверяю свой код и ничего не нахожу?"\)\.

PVS\-Studio генерирует очень много сообщений\. В нём есть диагностики, сделанные по заказу, есть 64\-битные диагностики, которые генерируют много ложных срабатываний и так далее\. Поэтому, в PVS\-Studio имеется механизм включения/выключения отдельных диагностик или групп диагностик\. При этом, мы не считаем наличие таких механизмов преимуществом\. Их наличие является вынужденным\.

PVS\-Studio позволяет:

* включать/выключать отдельные диагностики;
* включать/выключать предупреждения, относящиеся к различным уровням;
* включать/выключать показ предупреждений, размеченных как ложные\.

Теперь по поводу подавления отдельных ложных срабатываний\.

Оба анализатора предоставляют следующие механизмы борьбы с ложными срабатываниями:

* подавление ложного срабатывания в конкретной строке с помощью комментария вида "//\-Vxxx";
* подавление ложных предупреждений, встречающихся в определённых макросах;
* подавление ложных предупреждений в тех строках кода, где встречается заданный паттерн;
* подавление предупреждений в определённых папках или файлах\.

PVS\-Studio дополнительно позволяет:

* исключать файлы по маске;
* исключать диагностические сообщения, в которых встречается определённый текст\.

Более подробно все эти механизмы рассмотрены в документации\.

## Дополнительные ссылки

1. [PVS\-Studio для Visual C\+\+](https://pvs-studio.ru/ru/blog/posts/0222/)\.
1. [Альтернатива PVS\-Studio за $250](https://pvs-studio.ru/ru/blog/posts/0228/)\.
1. [Сравнение анализаторов кода: CppCat, Cppcheck, PVS\-Studio, Visual Studio](https://pvs-studio.ru/ru/blog/posts/0241/)\.