= PVS-Studio :category: Программирование :tags: программирование, C, C++, отладка, :toc: == Информация и лицензия https://www.viva64.com/ru/pvs-studio/[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: [source,sh] ---- cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=On ---- Сборка проекта с помощью `make`: [source,sh] ---- pvs-studio-analyzer trace -- make -j$(nproc) ---- Настройка и сборка проекта с использованием Ninja: [source,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, нужно выполнить [source,sh] ---- pvs-studio-analyzer analyze -a 29 -j$(nproc) -o pvs.log ---- Составление отчёта для просмотра в Qt Creator: [source,sh] ---- plog-converter -t tasklist -o pvs.tasks pvs.log ---- При составлении отчёта уровень детализации можно изменять с помощью ключа `-a` (`--analyzer`), который производит фильтрацию предупреждений согласно маске, которая имеет вид `MessageType:MessageLevels`, где `MessageType` может принимать один из следующих типов: `GA`, `OP`, `64`, `CS`, `MISRA`, а `MessageLevels` может принимать значения от `1` до `3`. Возможна комбинация разных масок через `;`. Например, при составлении отчёта для просмотра в формате HTML можно повысить уровень детализации: [source,sh] ---- plog-converter -t fullhtml -a "GA:1,2,3;64:1;OP:1,2;CS:1,2" -o html pvs.log ---- Составление отчёта для редактора Vim: [source,sh] ---- plog-converter -a "GA:1,2" -t errorfile -o pvs.err pvs.log ---- Для просмотра отчёта в редакторе Vim нужно открыть файл `pvs.err` и выполнить команды: [source,vim] ---- :set makeprg=cat\ % " выбор программы для компиляции в текущей сессии :silent make " имитация сборки :cw " открытие результатов в нижнем окне ----