Для получения триального ключа
заполните форму ниже
Team license
Enterprise license
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
RUB
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

Бесплатная лицензия PVS-Studio для специалистов Microsoft MVP
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

Для получения лицензии для вашего открытого
проекта заполните, пожалуйста, эту форму
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

Мне интересно попробовать плагин на:
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

Ваше сообщение отправлено.

Мы ответим вам на


Если вы так и не получили ответ, пожалуйста, проверьте папку
Spam/Junk и нажмите на письме кнопку "Не спам".
Так Вы не пропустите ответы от нашей команды.

>
>
>
Знакомство со статическим анализатором …

Знакомство со статическим анализатором PVS-Studio для Visual C++

23 Июл 2019

В этой статье я хочу познакомить вас с анализатором C и C++ кода PVS-Studio и как с ним работать в среде Visual C++. Данная статья будет полезна для начинающих пользователей.

0642_PVS-Studio-for-Visual-Cpp_ru/image1.png

Установка анализатора

PVS-Studio поддерживает среды Microsoft Visual Studio 2019, 2017, 2015, 2013, 2012, 2010. Системные требования можно узнать в документации. На данный момент PVS-Studio анализирует проекты, написанные на языке C, C++, C# и Java. Однако данная заметка посвящена программистам, использующим Visual C++ и желающим впервые познакомиться со статическим анализатором кода PVS-Studio.

Скачать установочный пакет можно по этой ссылке. После запуска пакета будут предложены варианты интеграции (см. рисунок 1). Недоступные варианты будут затемнены.

0642_PVS-Studio-for-Visual-Cpp_ru/image2.png

Рисунок 1. Окно с компонентами интеграции.

После установки стоит открыть окно About в Visual Studio и проверить присутствие PVS-Studio в списке установленных продуктов.

Проверка проекта

По завершении установки вы можете приступить к проверке проекта. Также можно сразу попробовать проверить решение целиком. Для этого выберите пункт меню Extensions > PVS-Studio > Check > Solution (см. рисунок 2).

0642_PVS-Studio-for-Visual-Cpp_ru/image3.png

Рисунок 2. Проверка решения (Solution) с помощью анализатора PVS-Studio.

Если с проверкой возникнут какие-то трудности, мы рекомендуем обратиться к разделу "Не удается проверить?" на нашем сайте. Это не бестолковые рекомендации в духе "проверьте, что вилка вставлена в розетку". В разделе описаны типовые ситуации, с которыми к нам обращались пользователи, и предложены варианты действий.

Работа со списком диагностических сообщений

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

0642_PVS-Studio-for-Visual-Cpp_ru/image4.png

Рисунок 3. Окно с диагностическими сообщениями. Нажмите на рисунок для его увеличения.

Все элементы окна рассмотрены в документации, но сейчас мы остановимся на основных:

  • Уровень достоверности предупреждения. На скриншоте включены средний и высокий уровни. Низкий уровень относится больше к "Code Smells" и предупреждениям, которые, к сожалению, дают большой процент ложных срабатываний. Почему так много срабатываний среднего и низкого уровня, но так мало высокого? Дело в том, что были включены MISRA-диагностики, содержащие правила типа "функция должна иметь одну точку выхода". Да, такие диагностики в обычной ситуации несут мало пользы и по умолчанию находятся в выключенном состоянии. Примечание: "Как быстро посмотреть интересные предупреждения, которые выдает анализатор PVS-Studio для C и C++ кода?".
  • Фильтр. Предупреждения можно отфильтровать по коду, CWE, сообщению, проекту или файлу.
  • Номер строки с ошибкой. Некоторые диагностики могут выдавать предупреждение на несколько строк, поэтому рядом с ними появляется многоточие.

SAST

PVS-Studio является средством статического тестирования защищённости приложений (Static Application Security Testing, SAST) - анализатор может выявлять потенциальные уязвимости в коде проекта и показывать соответствующий идентификатор ошибки в определенной классификации.

PVS-Studio поддерживает следующие классификации ошибок:

  • CWE
  • SEI CERT
  • MISRA

Включить отображение кодов CWE можно по контекстному меню в окне анализатора по пути Show Columns > CWE

0642_PVS-Studio-for-Visual-Cpp_ru/image6.png

Рисунок 4. Контекстное меню и пример вывода CWE-кодов.

Либо в меню сверху (Extensions > PVS-Studio > Display CWE Codes in Output Window)

0642_PVS-Studio-for-Visual-Cpp_ru/image7.png

Рисунок 5. Меню расширения.

Диагностики MISRA включаются отдельно в настройках:

0642_PVS-Studio-for-Visual-Cpp_ru/image8.png

Рисунок 6. Список определяемых ошибок.

Подробнее про эти классификации можно прочитать здесь.

Проверка проектов из командной строки

PVS-Studio_Cmd.exe - утилита для проверки C++ проектов .vcxproj и решений из командной строки. Она может быть полезна для автоматизации анализа. Программа находится в директории, куда была произведена установка - по умолчанию это 'C:\Program Files (x86)\PVS-Studio'.

Программа имеет множество параметров, но для начала нам понадобится только три из них:

  • --target: файл проекта или решения, который требуется проверить.
  • --output: plog-файл, куда требуется записать отчет.
  • --progress: показывать прогресс проверки.

Вот так будет выглядеть запуск:

0642_PVS-Studio-for-Visual-Cpp_ru/image9.png

Рисунок 7. Вывод программы PVS-Studio_Cmd.exe

После выполнения мы получим plog-файл с отчетом, путь до которого мы указали в параметрах запуска. Этот отчет можно преобразовать в другие форматы с помощью утилиты PlogConverter.exe, а для просмотра отчета в IDE достаточно двойного клика по plog-файлу в проводнике.

Также файл отчета можно открыть в меню расширения по пути Extensions > PVS-Studio > Open/Save > Open Analysis Report...

0642_PVS-Studio-for-Visual-Cpp_ru/image10.png

Рисунок 8. Открытие отчета из меню плагина.

Подробную информацию по утилите и ее параметрам можно найти в документации.

Подавление ложных предупреждений

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

Пример предупреждения

Рассмотрим пример ошибки, выявленной анализатором. Следующий код был взят из проекта ReactOS:

VOID NTAPI
AtapiDmaInit(....)
{
  ....
  ULONG treg = 0x54 + (dev < 3) ? (dev << 1) : 7;
  ....
}

Предупреждение PVS-Studio: V502 Perhaps the '?:' operator works in a different way than it was expected. The '?:' operator has a lower priority than the '+' operator. uniata id_dma.cpp 1610

Выражение 0x54 + (dev < 3) будет всегда true - в первую очередь ненулевая константа 0x54 суммируется с результатом выражения (dev < 3), которое может иметь значение 0 или 1, и уже затем результат сравнивается с нулем.

Правильный код должен иметь вид:

VOID NTAPI
AtapiDmaInit(....)
{
  ....
  ULONG treg = 0x54 + ((dev < 3) ? (dev << 1) : 7);
  ....
}

В этом случае мы обернули оператор '?:' в скобки, теперь он будет принимать значение в зависимости от выражения (dev < 3).

Заключение

Это было краткое введение в то, как работать с PVS-Studio для Visual C++. Конечно, тут было рассмотрено далеко не всё. Более подробно мы разбираем работу анализатора в нашем блоге, а описание всех сообщений и настроек есть в документации.

Популярные статьи по теме
Интервью с Джейсоном Тернером, одним из ведущих подкаста "CppCast": история и причины закрытия проекта

Дата: 27 Сен 2022

Автор: Ульяна Гришина

В этой статье мы поговорим с Джейсоном Тернером, одним из основателей CppCast. CppCast – это первый С++ подкаст, основанный С++ разработчиками. Начиная с 2015 года каждую неделю на CppCast выходили п…
Боремся с 16-летним легаси-кодом, или исправляем C и C++ front-end в PVS-Studio

Дата: 22 Сен 2022

Автор: Сергей Ларин

В 2022 году статическому анализатору PVS-Studio для языков C и C++ исполняется 16 лет. Если бы анализатор был человеком, то он бы уже заканчивал школу. Это очень старый проект, и система типов в нем …
Как фидбек помог улучшить наш C++ квиз

Дата: 31 Авг 2022

Автор: Алексей Саркисов

Ранее в нашем блоге мы рассказывали о квизе для C++ разработчиков. С момента запуска мы тщательно собирали обратную связь. Часть из неё касалась ошибок в работе квиза, которые мы естественно решили и…
Концепция умного указателя static_ptr<T> в C++

Дата: 30 Авг 2022

Автор: Гость

В C++ есть несколько "умных указателей" – 'std::unique_ptr', 'std::shared_ptr', 'std::weak_ptr'.
"Так исторически сложилось", или за что разделили V512

Дата: 12 Авг 2022

Автор: Михаил Гельвих

Как говорится, в любом деле самое сложное — это начать. Так и мы, очень долго откладывали разделение диагностики V512, но время пришло. Ну а о причинах и последствиях этого решения можно прочитать в …

Комментарии (0)

Следующие комментарии
Unicorn with delicious cookie
Мы используем куки, чтобы пользоваться сайтом было удобно. Хотите узнать подробнее?
Принять