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

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

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

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

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

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

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


Если вы так и не получили ответ, пожалуйста, проверьте папку
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++. Конечно, тут было рассмотрено далеко не всё. Более подробно мы разбираем работу анализатора в нашем блоге, а описание всех сообщений и настроек есть в документации.

Популярные статьи по теме
Под капотом SAST: как инструменты анализа кода ищут дефекты безопасности

Дата: 26 Янв 2023

Автор: Сергей Васильев

Сегодня речь о том, как SAST-решения ищут дефекты безопасности. Расскажу, как разные подходы к поиску потенциальных уязвимостей дополняют друг друга, зачем нужен каждый из них и как теория ложится на…
Ложные представления программистов о неопределённом поведении

Дата: 17 Янв 2023

Автор: Гость

Неопределённое поведение (UB) – непростая концепция в языках программирования и компиляторах. Я слышал много заблуждений в том, что гарантирует компилятор при наличии UB. Это печально, но неудивитель…
Топ-10 ошибок в C++ проектах за 2022 год

Дата: 29 Дек 2022

Автор: Владислав Столяров

Дело идёт к Новому году, а значит, самое время традиционно вспомнить десять самых интересных срабатываний, которые нашёл PVS-Studio в 2022 году.
PVS-Studio и RPCS3: лучшие предупреждения в один клик

Дата: 12 Дек 2022

Автор: Александр Куренев

Best Warnings — режим анализатора, оставляющий в окне вывода 10 лучших предупреждений. Мы предлагаем вам ознакомиться с обновлённым режимом Best Warnings на примере проверки проекта RPCS3.
Holy C++

Дата: 23 Ноя 2022

Автор: Гость

В этой статье постараюсь затронуть все вещи, которые можно без зазрения совести выкинуть из С++, не потеряв ничего (кроме боли), уменьшить стандарт, нагрузку на создателей компиляторов, студентов, из…

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

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