﻿# Использование расширения VS Code "PVS\-Studio" для эффективной борьбы с ошибками в C\# коде

VS Code — это знакомый многим редактор кода, главная особенность которого — возможность дополнить свой функционал с помощью множества полезных расширений\. Одно из них теперь помогает эффективнее находить ошибки не только в C, С\+\+, но и в C\# коде\.

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

## Введение

На сегодняшний день существует множество общепринятых способов, которые используются разработчиками для обеспечения качества кода\. Это и руководство принципами проектирования, и внедрение различных процессов, таких как code review и unit\-тестирование, в процесс разработки\. Кроме того, быстро набирают популярность программные инструменты для выявления ошибок и уязвимостей в коде\. Примером такого инструмента может служить статический анализатор С, C\+\+, C\# и Java кода — PVS\-Studio\. Этот анализатор прост в использовании и интегрируется с самыми разными IDE \(а также с VS Code\) через соответствующие расширения, позволяющие удобно запускать анализ и эффективно работать с его результатами\.

Обзор расширения PVS\-Studio для Visual Studio Code я уже делал [ранее](https://pvs-studio.ru/ru/blog/posts/1030/)\. С тех пор в него было добавлено несколько новых возможностей:

* Запуск анализа C, С\+\+ \(CMake\) и C\# \(MSBuild\) решений из интерфейса VS Code;
* Подавление предупреждений c помощью suppress\-файлов;
* Запуск анализа отдельных файлов с кодом или \.NET проектов \(\.csproj\)\.

В этой же статье на примере анализа \.NET проекта я продемонстрирую, что выявлять ошибки с помощью расширения PVS\-Studio для VS Code – это просто\!

## Подготовка к анализу

Перед анализом стоит проверить, установлены ли анализатор PVS\-Studio для вашего языка программирования и расширение PVS\-Studio для VS Code\. Если это не так, можно воспользоваться [инструкциями по установке](https://pvs-studio.ru/ru/blog/posts/1030/) из предыдущей статьи, посвященной этому расширению\.

## Запуск анализа

Открываем папку с решением\. Запустить анализ всего решения можно, кликнув по кнопке _Analyze project_ в окне PVS\-Studio\. Обычно это окно находится в одной из вкладок нижней панели VS Code\.

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

Если окно PVS\-Studio скрыто, вы можете отобразить его с помощью команды _Show window_ в палитре команд \(Ctrl \+ Alt \+ P\)\.

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

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

С остальными способами вы можете ознакомиться в [документации](https://pvs-studio.ru/ru/docs/manual/6646/)\.

При первом анализе \.NET решения вы увидите следующее сообщение:

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

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

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

Ознакомившись с этим файлом, следует запустить анализ еще раз\. Теперь вам может быть предложено выбрать в палитре команд решение \(\.sln\), которое включает анализируемые файлы или проекты \(в случае, если в открытой директории более одного решения\)\. После этого анализ будет запущен, а окно PVS\-Studio примет следующий вид:

![1079_NetAnalysisInVSCode_ru/image6.png](https://import.viva64.com/docx/blog/1079_NetAnalysisInVSCode_ru/image6.png)

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

![1079_NetAnalysisInVSCode_ru/image7.png](https://import.viva64.com/docx/blog/1079_NetAnalysisInVSCode_ru/image7.png)

## Проверка предупреждений и исправление ошибок

Для удобной обработки результатов анализа в плагине есть несколько фильтров и функций, ознакомиться с которыми вы можете в [документации](https://pvs-studio.ru/ru/docs/manual/6646/)\.

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

![1079_NetAnalysisInVSCode_ru/image8.png](https://import.viva64.com/docx/blog/1079_NetAnalysisInVSCode_ru/image8.png)

Предупреждение: [V3142](https://pvs-studio.ru/ru/docs/warnings/v3142/)\. _Unreachable code detected\. It is possible that an error is present\. SharedDoAfterSystem\.cs: 52_\.

Данное предупреждение указывает на 52 строку и говорит о недостижимости последующего кода\.

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

Предупреждение: [V3022](https://pvs-studio.ru/ru/docs/warnings/v3022/)\. _Expression is always true\. Probably the '&&' operator should be used here\. SharedDoAfterSystem\.cs: 49_\.

Обратите внимание на условное выражение на строке 49\. Согласно предупреждению, данное выражение всегда истинно\. В этом нетрудно убедиться, ведь здесь одно и то же поле _args\.NewMobState_ проверяется на неравенство с двумя значениями _MobState\.Dead_ и _MobState\.Critical_ через оператор _ИЛИ_\. В результате вторая проверка всегда истинна, если первая ложна и наоборот\.

Эта ошибка приводит к тому, что метод _OnStateChanged_ всегда завершается возвратом на строке 50, а весь последующий код никогда не выполняется\.

## Подавление проверенных предупреждений

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

Для этого нужно выделить их в таблице \(с помощью комбинации клавиш Ctrl \+ A можно выделить сразу все\), открыть контекстное меню и выбрать опцию _Mark as a False Alarm_ или _Add selected messages to suppression file_ \(данную функцию также представляет кнопка в виде молнии в верхнем правом углу окна PVS\-Studio\)\.

![1079_NetAnalysisInVSCode_ru/image9.png](https://import.viva64.com/docx/blog/1079_NetAnalysisInVSCode_ru/image9.png)

Первая функция отличается от второй тем, что она подавляет предупреждение путем добавления комментария вида _//\-V\[Код предупреждения\]_ в первую строку кода, на которую указывает предупреждение\. Вторая функция, в свою очередь, сохраняет информацию о подавленных предупреждениях в специальном файле\.

Стоит отметить, что для подавления ненужных предупреждений предпочтительно использовать функцию _Mark as a False Alarm_\. 

Функция добавления предупреждений в suppression\-файл, в свою очередь, является удобным способом отложить технический долг на потом и сосредоточиться на качестве нового кода\.

В этом случае стандартный сценарий использования функции, следующий:

1. Выполняется общий анализ решения;
1. Полученные предупреждения подавляются;
1. Подавленные предупреждения периодически просматриваются разработчиком небольшими порциями\. Чтобы вернуть подавленные предупреждения, нужно отредактировать или удалить файл с расширением _\.suppress\.json_, который можно найти в папке _\.PVS\-Studio_ в директории решения\.

Подробнее эта тема рассматривается в статье "[Как внедрить статический анализатор кода в legacy проект и не демотивировать команду](https://pvs-studio.ru/ru/blog/posts/0743/)"\.

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

Надеюсь, мне удалось продемонстрировать вам, уважаемые читатели, что расширение PVS\-Studio – это удобный и полезный в разработке инструмент\. В заключении хочу отметить, что оно активно развивается, и уже в ближайших релизах у Java\-разработчиков тоже появится возможность использовать его для проверки своих проектов, но об этом будет уже другая статья\.

Напомню, что вы можете установить расширение вместе с анализатором кода PVS\-Studio c [официального сайта](https://pvs-studio.ru/ru/pvs-studio/try-free/)\.

Чистого кода и успешных проектов\! До встречи в следующих статьях\!