Использование статического анализатора PVS-Studio при разработке для встраиваемых систем на C и C++

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
Из этой статьи вы узнаете, как запустить проверку embedded-проекта и как работать с отчетом анализатора. Анализатор PVS-Studio поддерживает ряд компиляторов для встраиваемых систем. В текущей версии возможна проверка проектов при сборке одним из следующих компиляторов под Window, Linux и macOS:
  • IAR Embedded Workbench
  • Keil Embedded Development Tools for Arm
  • TI ARM Code Generation Tools
  • GNU Embedded Toolchain

Установка


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

Пример для систем на основе Debian:
wget -q -O - https://files.viva64.com/etc/pubkey.txt | sudo apt-key add -

sudo wget -O /etc/apt/sources.list.d/viva64.list \
https://files.viva64.com/etc/viva64.list

sudo apt update
sudo apt install pvs-studio

или
sudo gdebi pvs-studio-VERSION.deb

Под macOS установку и обновление можно произвести из Homebrew:
brew install viva64/pvs-studio/pvs-studio
brew upgrade pvs-studio

Второй вариант – установить из dmg пакета или вручную распаковать из архива.

Под Windows установка производится с помощью инсталлятора:



Скачать установочные пакеты для всех поддерживаемых систем и при необходимости запросить триальный ключ вы можете на странице "Скачать и попробовать PVS-Studio".

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

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


Проверку проектов для embedded систем можно производить теми же способами, что и в случае с разработкой под Windows, Linux и macOS.

Варианты запуска под Linux рассмотрены в статье "Знакомство со статическим анализатором PVS-Studio при разработке C++ программ в среде Linux". Имейте в виду, что так как для сборки под embedded используется кросс-компиляция, и имя компилятора может быть нестандартным, вам может понадобиться указать его при анализе проекта. Для этого используется параметр командной строки –compiler или –c:

pvs-studio-analyzer analyze -c MyCompiler

Применять этот параметр следует в том случае, когда анализатор не может определить тип используемого компилятора, то есть когда выдается ошибка «No compilation units found».

При кросс-компиляции, так как целевая платформа отличается от той, под которой происходит сборка, вместе с компилятором вам может потребоваться указать целевую платформу с помощью параметра --platform, а также тип препроцессора (--preprocessor).

Поддерживаемые платформы: win32, x64, linux32, linux64, macos, arm.

Поддерживаемые препроцессоры: gcc, clang, keil.

По умолчанию под Linux выбирается платформа linux64 и препроцессор gcc.

Если вы используете Windows, проверить проект можно в режиме мониторинга компиляции. Для этого нужно запустить утилиту "C and C++ Compiler Monitoring UI", которая устанавливается вместе с анализатором. Чтобы запустить мониторинг, зайдите в меню Tools и нажмите Analyze Your Files... Откроется диалог:



Нажмите на кнопку "Start Monitoring" и запустите сборку. После ее завершения нажмите на кнопку "Stop Monitoring" в диалоговом окне в правом нижнем углу экрана:



Результат проверки можно посмотреть в основном окне утилиты "C and C++ Compiler Monitoring UI".

Также анализ можно запустить из командной строки. Для этого используется утилита CLMonitor. Запустить мониторинг можно командой:
CLMonitor.exe monitor

После завершения сборки следует запустить утилиту в режиме анализа:
CLMonitor.exe analyze -l "<path>\out.plog"

Анализатор проверит проект и сохранит результаты в файл, указанный в параметре -l.

Смотрите также раздел документации "Система мониторинга компиляции в PVS-Studio".

Работа с отчетами


Чтобы посмотреть отчет под Linux, нужно сконвертировать полученный в результате работы анализатора файл в один из поддерживаемых форматов с помощью утилиты plog-converter. Получить отчет в формате HTML с возможностью просмотра исходного кода можно следующей командой:
plog-converter -a GA:1,2 -t fullhtml /path/project.log -o /path/report_dir

Более подробно конвертация отчетов описана в статье "Знакомство со статическим анализатором PVS-Studio при разработке C++ программ в среде Linux".

Под Windows также существует утилита PlogConverter, которая позволяет конвертировать файлы отчетов аналогичным образом:
PlogConverter.exe <path>\out.plog --renderTypes= FullHtml --analyzer=GA:1,2

или
PlogConverter.exe D:\Projct\out.plog -t FullHtml -a GA:1,2

Также отчет в формате plog можно посмотреть с помощью утилиты "C and C++ Compiler Monitoring UI" через меню File->Open PVS-Studio Log...

Пример:



В случае необходимости из этой утилиты можно экспортировать отчет в один из поддерживаемых форматов через меню File.

Стандарт MISRA


PVS-Studio классифицирует предупреждения согласно CWE и SEI CERT, что подходит для статического тестирования защищенности (SAST) обычных приложений. Однако у встраиваемых систем несколько другие требования к безопасности, которые покрывает специально разработанный стандарт MISRA. Текущая версия анализатора поддерживает часть правил из MISRA C и MISRA C++, список диагностик можно посмотреть здесь, и он постоянно расширяется.

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

Чтобы включить анализ MISRA под Linux, нужно запустить анализ с ключом -a и передать числовой параметр, который задаст необходимый режим. Этот параметр представляет собой комбинацию битовых полей:
-a [MODE], --analysis-mode [MODE]
        MODE defines the type of warnings:
        1 - 64-bit errors;
        2 - reserved;
        4 - General Analysis;
        8 - Micro-optimizations;
        16 - Customers Specific Requests;
        32 - MISRA.
        Modes can be combined by adding the values
        Default: 4

Пример запуска (включены диагностики GA и MISRA):
pvs-studio-analyzer analyze -a 36 -o /path/report.log

При использовании plog-converter также нужно указать, что диагностики MISRA должны попасть в отчет:
plog-converter -a MISRA:1,2,3 -m misra ....

Под Windows можно использовать диалог настроек утилиты "C and C++ Compiler Monitoring UI":


Более подробно о поддержке MISRA рассказано в статье "PVS-Studio: поддержка стандартов кодирования MISRA C и MISRA C++".

Заключение


В этой статье мы обзорно рассмотрели возможности анализатора PVS-Studio для проверки проектов, ориентированных на встраиваемые системы. Если вам нужна более подробная информация о том, как использовать анализатор, рекомендую почитать следующие статьи:
  • Знакомство со статическим анализатором кода PVS-Studio;
  • Система мониторинга компиляции в PVS-Studio;
  • Как запустить PVS-Studio в Linux и macOS;
  • PVS-Studio SAST (Static Application Security Testing, SAST);
  • Подавление ложных предупреждений.




Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Yuri Minaev. Using PVS-Studio Static Analyzer in C and C++ Development for Embedded Systems
Источник: https://habr.com/ru/company/pvs-studio/blog/463335/


Интересные статьи

Интересные статьи

Нередко при работе с Bitrix24 REST API возникает необходимость быстро получить содержимое определенных полей всех элементов какого-то списка (например, лидов). Традиционн...
Если каждый член команды будет создавать ветки в Git так, как хочет, это обязательно приведет к хаосу и несогласованности. Чтобы избежать этого, лучше сформулировать и принять соответству...
Привет, меня зовут Игорь, и я разработчик решений на Tarantool в Mail.ru Group. Я работаю над витринами маркетинга в реальном времени для Мегафона. При мониторинге часто требуется испол...
Использование HAProxy в качестве Data Plane Service Mesh в архитектуре микросервисов HAProxy Data Plane API – это программа, которая работает вместе с HAProxy, чтобы вы могли полност...
Продолжаем обзор замечательной тулы для разработки под Windows и не только, Azure DevOps. На этот раз, намучавшись с переменными окружения я решил вынести весь опыт в одну статью. Начиная от того...