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

    Из этой статьи вы узнаете, как запустить проверку embedded-проекта и как работать с отчетом анализатора. Анализатор PVS-Studio поддерживает ряд компиляторов для встраиваемых систем. В текущей версии возможна проверка проектов при сборке одним из следующих компиляторов под Window, Linux и macOS:


    Установка


    Процедура установки зависит от операционной системы, под которой вы ведете разработку. Под 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 для проверки проектов, ориентированных на встраиваемые системы. Если вам нужна более подробная информация о том, как использовать анализатор, рекомендую почитать следующие статьи:




    Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Yuri Minaev. Using PVS-Studio Static Analyzer in C and C++ Development for Embedded Systems
    PVS-Studio
    Static Code Analysis for C, C++, C# and Java

    Комментарии 3

      +3
      а AVR8/AVR32/MSP430/8051 и другие подобные платформы не планируются?
        +3
        Мы пока поддерживаем платформы не списком (их очень много), а по запросу. Имеющие распространённость, конечно. Если компиляторы построены на базе GCC и Clang, то добававление их в поддержку PVS-Studio не занимает много времени. Среди упомянутых IDE тоже есть некоторые типы железок, где компилятор не совместим с анализатором. В этом случае можно просто проверять проект под другую платформу.
        +1

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

        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

        Самое читаемое