﻿# Знакомство со статическим анализатором PVS\-Studio при разработке C\+\+ программ в среде Linux

PVS\-Studio поддерживает анализ проектов на языках C, C\+\+, C\# и Java\. Использовать анализатор можно под системами Windows, Linux и macOS\. В этой заметке речь пойдет об анализе кода, написанного на C и C\+\+ в среде Linux\.

![0652_PVS-Studio-for-Linux_ru/image1.png](https://import.viva64.com/docx/blog/0652_PVS-Studio-for-Linux_ru/image1.png)

## Установка

Установить PVS\-Studio под Linux можно разными способами, в зависимости от типа дистрибутива\. Наиболее удобный и предпочтительный способ – использование репозитория: так это позволяет автоматически обновлять анализатор при выходе новых версий\. Второй вариант – использовать установочный пакет, который можно скачать [здесь](https://pvs-studio.ru/ru/pvs-studio/download/)\.

Команды, которые необходимо выполнить для установки, зависят от дистрибутива Linux, который вы используете\. Например, для систем, основанных на Debian, установка из репозитория выглядит так:

```cpp
wget -q -O - https://files.pvs-studio.com/etc/pubkey.txt | sudo apt-key add -

sudo wget -O /etc/apt/sources.list.d/viva64.list \
https://files.pvs-studio.com/etc/viva64.list

sudo apt update
sudo apt install pvs-studio
```



Чтобы установить PVS\-Studio из установочного пакета, можно воспользоваться утилитой gdebi:

```cpp
sudo gdebi pvs-studio-VERSION.deb
```



Более подробно процесс установки описан в разделе "[Установка и обновление PVS\-Studio в Linux](https://pvs-studio.ru/ru/docs/manual/0039/)" документации\. Там же вы можете найти информацию о системах, не основанных на Debian\.

После установки нужно ввести лицензионные данные\. Для этого используется команда

```cpp
pvs-studio-analyzer credentials NAME KEY [-o LIC-FILE]
```



Где _NAME_ и _KEY_ – имя, на которое зарегистрирована лицензия, и лицензионный ключ\. Необязательный параметр _–o_ позволяет задать путь, по которому будет сгенерирован файл лицензии\. По умолчанию он хранится в каталоге _\~/\.config/PVS\-Studio/_\.

Триальный ключ вы можете получить на странице "[Скачать и попробовать PVS\-Studio](https://pvs-studio.ru/ru/pvs-studio/download/)"\.

## Проверка проектов

После установки анализатора можно приступать к проверке проектов\. Для этого существуют два основных способа:

1. Мониторинг компиляции;
1. Запуск в процессе сборки непосредственно из сборочной системы\.

Рассмотрим сначала первый способ\. Чтобы запустить мониторинг под Linux, понадобится утилита [strace](https://man7.org/linux/man-pages/man1/strace.1.html)\. Анализатор использует ее для сбора информации о том, какие процессы запускались во время сборки проекта\.

Запуск производится следующей командой:

```cpp
pvs-studio-analyzer trace -- make
```

В этом примере используется сборка с помощью make, но на месте вызова make может стоять любая другая команда, которую вы используете, чтобы начать сборку\. Параметры командной строки в нее можно передать обычным способом\.

После сборки strace создаст файл, который анализатор будет использовать для проверки исходного кода\. Запустить анализ можно командой

```cpp
pvs-studio-analyzer analyze -o /path/to/project.log
```

На выходе получится закодированный файл с результатами, который вы можете сконвертировать в один из поддерживаемых форматов\. Работу с отчетами мы рассмотрим в следующем разделе\.

Кроме использования strace, анализ также можно запустить на основе файла _compile\_commands\.json_ \(JSON Compilation Database\)\. Многие системы сборки позволяют экспортировать команды вызовов компилятора, или вы можете воспользоваться для этого утилитой [BEAR](https://github.com/rizsotto/Bear)\. Запустить анализ в этом случае можно командой

```cpp
pvs-studio-analyzer analyze –f /path/to/compile_commands.json
```

Следует отметить, что анализатор распознает используемый компилятор по имени его исполняемого файла\. Если при проверке вы получаете ошибку "No compilation units were found", попробуйте указать имя вашего компилятора через параметр _–compiler_ или _–C_:

```cpp
pvs-studio-analyzer analyze -C MyCompiler
```

Это может понадобиться при кросс\-компиляции и использовании компиляторов с нестандартными именами исполняемых файлов\.

Кроме запусков в режиме мониторинга, вы можете интегрировать анализатор в вашу сборочную систему или IDE\. Примеры проектов с уже настроенной интеграцией вы можете найти на [GitHub](https://github.com/viva64) в репозитории PVS\_Studio:

* [pvs\-studio\-cmake\-examples](https://github.com/viva64/pvs-studio-cmake-examples)
* [pvs\-studio\-qmake\-examples](https://github.com/viva64/pvs-studio-qmake-examples)
* [pvs\-studio\-makefile\-examples](https://github.com/viva64/pvs-studio-makefile-examples)
* [pvs\-studio\-waf\-examples](https://github.com/viva64/pvs-studio-waf-examples)
* [pvs\-studio\-eclipse\-examples](https://github.com/viva64/pvs-studio-eclipse-examples)

Более подробную инструкцию по запуску анализа под Linux смотрите в [документации](https://pvs-studio.ru/ru/docs/manual/0036/)\.

## Работа с отчетами

После проверки проекта анализатор создает закодированный отчет\. Для того, чтобы конвертировать его в один из поддерживаемых форматов, следует использовать утилиту _plog\-converter_, которая устанавливается вместе с PVS\-Studio\.

Утилита поддерживает следующие форматы:

* xml – удобный формат для дополнительной обработки результатов анализа, поддерживается плагином для SonarQube;
* csv – текстовый формат, предназначенный для представления табличных данных;
* errorfile – формат вывода gcc и clang;
* tasklist – формат ошибок, который можно открыть в QtCreator;
* html – отчет html с кратким описанием результатов анализа;
* fullhtml – отчет html с сортировкой результатов анализа по разных параметрам и навигацией по исходному коду\.

Для просмотра отчета наиболее удобен формат fullhtml, так как он позволяет перейти на строку исходного кода, в которой возникло предупреждение\. Следующая команда позволяет сконвертировать отчет анализатора в этот формат:

```cpp
plog-converter -a GA:1,2 -t fullhtml /path/project.log -o /path/report_dir
```



После выполнения команды будет создан каталог _/path/report\_dir_, в котором будут лежать файлы отчета\.

Обратите внимание на ключ _\-a_\. Он позволяет указать, какие именно предупреждения должны попасть в отчет\. Это удобно, если есть необходимость отфильтровать вывод анализатора\. Приведенная выше команда создаст отчет, который будет содержать только предупреждения из группы general analysis первого и второго уровней достоверности \(_High_ и _Medium_\)\.

Пример отчета:

![0652_PVS-Studio-for-Linux_ru/image2.png](https://import.viva64.com/docx/blog/0652_PVS-Studio-for-Linux_ru/image2.png)

По клику в ячейке _Location_ сообщения можно перейти к соответствующей строке кода:

![0652_PVS-Studio-for-Linux_ru/image3.png](https://import.viva64.com/docx/blog/0652_PVS-Studio-for-Linux_ru/image3.png)

Клик по номеру диагностики в колонке _Code_ откроет документацию с описанием этой диагностики\.

## Подавление срабатываний анализатора

При проверке кода статическим анализатором возможны ложные срабатывания или просто нежелательные сообщения \(шум\)\. PVS\-Studio предоставляет механизмы подавления таких предупреждений\. Для индивидуального подавления срабатываний, можно применить один из способов, описанных в разделе документации "[Подавление ложных предупреждений](https://pvs-studio.ru/ru/docs/manual/0017/)"\.

Также при анализе старого кода может возникнуть необходимость массово подавить все сообщения\. Как правило, это нужно для того, чтобы проверять только тот код, который добавляется в существующую кодовую базу\. Для этого используется параметр _suppress_ утилиты _pvs\-studio\-analyzer_\.

Массово подавить сообщения в отчете можно следующей командой:

```cpp
pvs-studio-analyzer suppress /path/to/report.log
```



Информация о подавленных сообщениях хранится в файле _suppress\_base\.json_, который лежит рядом с проектом\. Такие сообщения исключаются из отчета при последующих проверках\.

Подробнее этот механизм описан в документации [здесь](https://pvs-studio.ru/ru/docs/manual/0032/)\.

## Заключение

Это было краткое введение в использование анализатора PVS\-Studio под Linux\. Надеюсь, оно было полезным и ответило на наиболее часто возникающие вопросы\. Более подробно о теме статьи вы можете прочитать в документации [здесь](https://pvs-studio.ru/ru/docs/manual/0036/)\.