Информация и лицензия

PVS-Studio — это инструмент для статического анализа исходного кода программ, написанных на языках С, C++.

Для использования в Linux нужно чтобы в каталоге ~/.config/PVS-Studio находился лицензионный ключ или в начале исходных файлов с расширениями .c, .cpp, *.cxx и т.п. присутствовали строки

// 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 находится здесь, а ниже приведён список типовых команд.

Настройка проекта для CMake:

cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=On <src-tree-root>

Сборка проекта с помощью make:

pvs-studio-analyzer trace -- make -j$(nproc)

Настройка и сборка проекта с использованием Ninja:

cmake -GNinja -DCMAKE_EXPORT_COMPILE_COMMANDS=On <src-tree-root>
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, нужно выполнить

pvs-studio-analyzer analyze -a 29 -j$(nproc) -o pvs.log

Составление отчёта для просмотра в Qt Creator:

plog-converter -t tasklist -o pvs.tasks pvs.log

При составлении отчёта уровень детализации можно изменять с помощью ключа -a (--analyzer), который производит фильтрацию предупреждений согласно маске, которая имеет вид MessageType:MessageLevels, где MessageType может принимать один из следующих типов: GA, OP, 64, CS, MISRA, а MessageLevels может принимать значения от 1 до 3. Возможна комбинация разных масок через ;. Например, при составлении отчёта для просмотра в формате HTML можно повысить уровень детализации:

plog-converter -t fullhtml -a "GA:1,2,3;64:1;OP:1,2;CS:1,2" -o html pvs.log

Составление отчёта для редактора Vim:

plog-converter -a "GA:1,2" -t errorfile -o pvs.err pvs.log

Для просмотра отчёта в редакторе Vim нужно открыть файл pvs.err и выполнить команды:

:set makeprg=cat\ % " выбор программы для компиляции в текущей сессии
:silent make        " имитация сборки
:cw                 " открытие результатов в нижнем окне