--- title: "PVS-Studio" category: Программирование tags: программирование, C, C++, отладка summary: toc: yes ... [TOC] ### Информация и лицензия [PVS-Studio](https://www.viva64.com/ru/pvs-studio/) — это инструмент для статического анализа исходного кода программ, написанных на языках С, C++. Для использования в Linux нужно чтобы в каталоге `~/.config/PVS-Studio` находился лицензионный ключ или в начале исходных файлов с расширениями `*.c`, `*.cpp`, `*.cxx` и т.п. [присутствовали строки](https://www.viva64.com/ru/b/0457/) ``` // This is an independent project of an individual developer. Dear PVS-Studio, please check it. // PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com ``` ### Настройка и компиляция проекта Полное руководство для работы в Linux находится [здесь](https://www.viva64.com/ru/m/0036/), а ниже приведён список типовых команд. Настройка проекта для CMake: ```sh cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=On ``` Сборка проекта с помощью `make`: ```sh pvs-studio-analyzer trace -- make -j$(nproc) ``` Настройка и сборка проекта с использованием Ninja: ```sh cmake -GNinja -DCMAKE_EXPORT_COMPILE_COMMANDS=On ninja -t compdb ``` ### Анализ проекта Для анализа проектов используется утилита `pvs-studio-analyzer`. По умолчанию включены только диагностики общего назначения (General Analysis, GA). Включить дополнительные правила можно с помощью опции `-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 ``` Выбор типов предупреждений осуществляется на основе побитовой маски из приведенных выше типов. Чтобы выполнить анализ, исключив проверки MISRA, нужно выполнить ```sh pvs-studio-analyzer analyze -a 29 -j$(nproc) -o pvs.log ``` Составление отчёта для просмотра в Qt Creator: ```sh plog-converter -t tasklist -o pvs.tasks pvs.log ``` При составлении отчёта уровень детализации можно изменять с помощью ключа `-a` (`--analyzer`), который производит фильтрацию предупреждений согласно маске, которая имеет вид `MessageType:MessageLevels`, где `MessageType` может принимать один из следующих типов: `GA`, `OP`, `64`, `CS`, `MISRA`, а `MessageLevels` может принимать значения от `1` до `3`. Возможна комбинация разных масок через `;`. Например, при составлении отчёта для просмотра в формате HTML можно повысить уровень детализации: ```sh plog-converter -t fullhtml -a "GA:1,2,3;64:1;OP:1,2;CS:1,2" -o html pvs.log ``` Составление отчёта для редактора Vim: ```sh plog-converter -a "GA:1,2" -t errorfile -o pvs.err pvs.log ``` Для просмотра отчёта в редакторе Vim нужно открыть файл `pvs.err` и выполнить команды: ```vim :set makeprg=cat\ % " выбор программы для компиляции в текущей сессии :silent make " имитация сборки :cw " открытие результатов в нижнем окне ```