dsp-site/wiki/Prog/Development/PVS-Studio.adoc

117 lines
4.3 KiB
Plaintext
Raw Normal View History

2019-06-01 21:08:41 +00:00
= PVS-Studio
:category: Программирование
:tags: программирование, C, C++, отладка,
2019-04-20 16:11:30 +00:00
2019-06-01 21:08:41 +00:00
:toc:
2019-04-20 16:11:30 +00:00
2019-06-01 21:08:41 +00:00
== Информация и лицензия
2019-04-20 16:11:30 +00:00
2019-06-01 21:08:41 +00:00
https://www.viva64.com/ru/pvs-studio/[PVS-Studio] — это инструмент для
статического анализа исходного кода программ, написанных на языках С,
C++.
2019-04-20 16:11:30 +00:00
Для использования в Linux нужно чтобы в каталоге `~/.config/PVS-Studio`
находился лицензионный ключ или в начале исходных файлов с расширениями
2019-06-01 21:08:41 +00:00
`*.c`, `*.cpp`, `*.cxx` и т.п.
https://www.viva64.com/ru/b/0457/[присутствовали строки]
2019-04-20 16:11:30 +00:00
2019-06-01 21:08:41 +00:00
....
2019-04-20 16:11:30 +00:00
// 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
2019-06-01 21:08:41 +00:00
....
2019-04-20 16:11:30 +00:00
2019-06-01 21:08:41 +00:00
== Настройка и компиляция проекта
2019-04-20 16:11:30 +00:00
Полное руководство для работы в Linux находится
2019-06-01 21:08:41 +00:00
https://www.viva64.com/ru/m/0036/[здесь], а ниже приведён список типовых
команд.
2019-04-20 16:11:30 +00:00
Настройка проекта для CMake:
2019-06-01 21:08:41 +00:00
[source,sh]
----
2019-04-20 16:11:30 +00:00
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=On <src-tree-root>
2019-06-01 21:08:41 +00:00
----
2019-04-20 16:11:30 +00:00
Сборка проекта с помощью `make`:
2019-06-01 21:08:41 +00:00
[source,sh]
----
2019-04-20 16:11:30 +00:00
pvs-studio-analyzer trace -- make -j$(nproc)
2019-06-01 21:08:41 +00:00
----
2019-04-20 16:11:30 +00:00
Настройка и сборка проекта с использованием Ninja:
2019-06-01 21:08:41 +00:00
[source,sh]
----
2019-04-20 16:11:30 +00:00
cmake -GNinja -DCMAKE_EXPORT_COMPILE_COMMANDS=On <src-tree-root>
ninja -t compdb
2019-06-01 21:08:41 +00:00
----
2019-04-20 16:11:30 +00:00
2019-06-01 21:08:41 +00:00
== Анализ проекта
2019-04-20 16:11:30 +00:00
2019-06-01 21:08:41 +00:00
Для анализа проектов используется утилита `pvs-studio-analyzer`. По
умолчанию включены только диагностики общего назначения (General
Analysis, GA). Включить дополнительные правила можно с помощью опции
`-a`:
2019-04-20 16:11:30 +00:00
2019-06-01 21:08:41 +00:00
....
2019-04-20 16:11:30 +00:00
-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
2019-06-01 21:08:41 +00:00
....
2019-04-20 16:11:30 +00:00
Выбор типов предупреждений осуществляется на основе побитовой маски из
2019-06-02 23:26:28 +00:00
приведённых выше типов. Чтобы выполнить анализ, исключив проверки MISRA,
2019-04-20 20:24:14 +00:00
нужно выполнить
2019-04-20 16:11:30 +00:00
2019-06-01 21:08:41 +00:00
[source,sh]
----
2019-04-20 16:11:30 +00:00
pvs-studio-analyzer analyze -a 29 -j$(nproc) -o pvs.log
2019-06-01 21:08:41 +00:00
----
2019-04-20 16:11:30 +00:00
Составление отчёта для просмотра в Qt Creator:
2019-06-01 21:08:41 +00:00
[source,sh]
----
2019-04-20 16:11:30 +00:00
plog-converter -t tasklist -o pvs.tasks pvs.log
2019-06-01 21:08:41 +00:00
----
2019-04-20 16:11:30 +00:00
2019-06-01 21:08:41 +00:00
При составлении отчёта уровень детализации можно изменять с помощью
ключа `-a` (`--analyzer`), который производит фильтрацию предупреждений
согласно маске, которая имеет вид `MessageType:MessageLevels`, где
`MessageType` может принимать один из следующих типов: `GA`, `OP`, `64`,
`CS`, `MISRA`, а `MessageLevels` может принимать значения от `1` до `3`.
2019-04-20 16:11:30 +00:00
Возможна комбинация разных масок через `;`. Например, при составлении
отчёта для просмотра в формате HTML можно повысить уровень детализации:
2019-06-01 21:08:41 +00:00
[source,sh]
----
2019-04-20 16:11:30 +00:00
plog-converter -t fullhtml -a "GA:1,2,3;64:1;OP:1,2;CS:1,2" -o html pvs.log
2019-06-01 21:08:41 +00:00
----
2019-04-20 16:11:30 +00:00
Составление отчёта для редактора Vim:
2019-06-01 21:08:41 +00:00
[source,sh]
----
2019-04-20 16:11:30 +00:00
plog-converter -a "GA:1,2" -t errorfile -o pvs.err pvs.log
2019-06-01 21:08:41 +00:00
----
2019-04-20 16:11:30 +00:00
2019-06-01 21:08:41 +00:00
Для просмотра отчёта в редакторе Vim нужно открыть файл `pvs.err` и
выполнить команды:
2019-04-20 16:11:30 +00:00
2019-06-01 21:08:41 +00:00
[source,vim]
----
2019-04-20 16:11:30 +00:00
:set makeprg=cat\ % " выбор программы для компиляции в текущей сессии
:silent make " имитация сборки
:cw " открытие результатов в нижнем окне
2019-06-01 21:08:41 +00:00
----