﻿# Интеграция результатов анализа PVS\-Studio в CodeChecker

CodeChecker — это интерфейс для работы со статическими анализаторами для Linux и macOS\. С помощью данного инструмента можно удобно просматривать результаты анализа PVS\-Studio и управлять ими\. 

## Установка CodeChecker

Для того, чтобы запустить CodeChecker нужно создать виртуальное окружение Python \(версии \>\= 3\.8\) и установить инструмент с помощью пакетного менеджера _pip_:

```cpp
python3 -m venv .venv
source ./.venv/bin/activate
pip3 install codechecker
```


> \*\*Примечание\\\.\*\* Интеграция результатов анализа PVS\\\-Studio доступна с версии CodeChecker 6\\\.25\\\.0\\\.

Для корректного отображения severity у диагностических правил PVS\-Studio необходимо скачать файл [CodeChecker\.json](https://files.pvs-studio.com/rules/CodeChecker.json) и положить его в этом виртуальном окружении Python, по пути \._venv/share/codechecker/config/labels/analyzers_ с названием _pvs\-studio\.json_\.

Теперь для запуска веб\-сервера CodeChecker потребуется выполнить следующую команду:

```cpp
CodeChecker server
```

По умолчанию веб\-сервер CodeChecker доступен по адресу _http://localhost:8001_\. 

О других способах установки и развёртывания CodeChecker можно прочитать в [специальном разделе документации](https://codechecker.readthedocs.io/en/latest/#install-guide) самого инструмента\.

## Преобразование отчёта в совместимый с CodeChecker формат

Для работы с отчётом PVS\-Studio в CodeChecker его нужно привести в нужный формат\. Помочь нам с этим может встроенный инструмент CodeChecker — _report\-converter_\. 

Важно, что _report\-converter_ может преобразовать только JSON\-отчёт PVS\-Studio\. Для преобразования отчёта PVS\-Studio другого формата в JSON или фильтрации предупреждений необходимо использовать утилиты [_PlogConverter\.exe_](https://pvs-studio.ru/ru/docs/manual/0038/) для Windows и [_plog\-converter_](https://pvs-studio.ru/ru/docs/manual/0036/#ID1A074E2CA9) для Linux/macOS:

Пример команды конвертации отчёта PVS\-Studio при помощи _plog\-converter_ \(Linux/macOS\):

```cpp
plog-converter -t json -a 'GA:1,2;OWASP:1' 
   -o /home/user/Logs/PVS-Studio.json PVS-Studio.log
```

Пример команды конвертации отчёта PVS\-Studio при помощи _PlogConverter\.exe_ \(Windows\):

```cpp
PlogConverter.exe -t Json -a 'GA:1,2;OWASP:1' -o /home/user/Logs 
                  -n PVS-Studio PVS-Studio.plog
```

Для преобразования отчёта PVS\-Studio в формат CodeChecker необходимо выполнить следующую команду:

```cpp
report-converter -t pvs-studio -o ./pvs_studio_reports ./PVS-Studio.json
```

Флаг _\-t_ указывает формат входного отчёта, _\-o_ – директорию, в которую будут сохранены преобразованные предупреждения\. Подробнее об остальных функциях _report\-converter_ можно прочитать в [его документации](https://codechecker.readthedocs.io/en/latest/tools/report-converter/)\.

Чтобы сохранить преобразованный отчёт на веб\-сервере для дальнейшей работы с ним, необходимо выполнить следующую команду:

```cpp
CodeChecker store ./codechecker_pvs_studio_reports -n default
```

После флага _\-n_ необходимо передать название запуска CodeChecker\.

## Просмотр отчёта PVS\-Studio

После выполнения описанных выше действий в списке запусков для проекта появится запуск с указанным названием\. 

![CodeChecker_ru/image1.png](https://import.viva64.com/docx/blog/CodeChecker_ru/image1.png)

Нажав на его название, можно увидеть список предупреждений для этого проекта:

![CodeChecker_ru/image2.png](https://import.viva64.com/docx/blog/CodeChecker_ru/image2.png)

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

Нажав на локацию конкретного срабатывания, можно увидеть место в коде, где это срабатывание произошло:

![CodeChecker_ru/image3.png](https://import.viva64.com/docx/blog/CodeChecker_ru/image3.png)

На этой же странице можно поменять **Review status** открытого срабатывания\. Эта функция может быть полезна при разметке предупреждений анализатора после проведения анализа\. Каждому срабатыванию можно поставить один из следующих статусов:

* **Confirmed bug** – срабатывание истинно и требует исправления
* **False positive** – срабатывание ложно
* **Intentional** – срабатывание истинно, но не требует исправления

При пометке срабатывания как **False Positive** оно будет исключено из отображения отчёта, в том числе при всех следующих запусках\.

Срабатывания, которых не было при предыдущих запусках помечаются в списке специальным значком, а также есть возможность просматривать разницу между конкретными запусками:

![CodeChecker_ru/image4.png](https://import.viva64.com/docx/blog/CodeChecker_ru/image4.png)

После нажатия кнопки **Diff** отобразится список только различающихся срабатываний:

![CodeChecker_ru/image5.png](https://import.viva64.com/docx/blog/CodeChecker_ru/image5.png)