2019-04-20 16:11:30 +00:00
|
|
|
|
---
|
2019-04-23 16:40:55 +00:00
|
|
|
|
title: "PVS-Studio"
|
2019-04-20 16:11:30 +00:00
|
|
|
|
category: Программирование
|
2019-04-23 17:40:06 +00:00
|
|
|
|
tags: программирование, C, C++, отладка,
|
2019-04-20 16:11:30 +00:00
|
|
|
|
summary:
|
|
|
|
|
toc: yes
|
|
|
|
|
...
|
|
|
|
|
|
|
|
|
|
[TOC]
|
|
|
|
|
|
|
|
|
|
### Информация и лицензия
|
|
|
|
|
|
2019-04-20 20:24:14 +00:00
|
|
|
|
[PVS-Studio](https://www.viva64.com/ru/pvs-studio/) — это инструмент для
|
2019-04-20 16:11:30 +00:00
|
|
|
|
статического анализа исходного кода программ, написанных на языках С, 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
|
|
|
|
|
```
|
|
|
|
|
|
2019-04-20 20:24:14 +00:00
|
|
|
|
### Настройка и компиляция проекта
|
2019-04-20 16:11:30 +00:00
|
|
|
|
|
|
|
|
|
Полное руководство для работы в Linux находится
|
|
|
|
|
[здесь](https://www.viva64.com/ru/m/0036/), а ниже приведён список типовых команд.
|
|
|
|
|
|
|
|
|
|
Настройка проекта для CMake:
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=On <src-tree-root>
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Сборка проекта с помощью `make`:
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
pvs-studio-analyzer trace -- make -j$(nproc)
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Настройка и сборка проекта с использованием Ninja:
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
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,
|
2019-04-20 20:24:14 +00:00
|
|
|
|
нужно выполнить
|
2019-04-20 16:11:30 +00:00
|
|
|
|
|
|
|
|
|
```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 " открытие результатов в нижнем окне
|
|
|
|
|
```
|
|
|
|
|
|