Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
>
>
>
Использование расширения VS Code "…

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

09 Ноя 2023

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

1079_NetAnalysisInVSCode_ru/image1.png

Введение

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

Обзор расширения PVS-Studio для Visual Studio Code я уже делал ранее. С тех пор в него было добавлено несколько новых возможностей:

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

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

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

Перед анализом стоит проверить, установлены ли анализатор PVS-Studio для вашего языка программирования и расширение PVS-Studio для VS Code. Если это не так, можно воспользоваться инструкциями по установке из предыдущей статьи, посвященной этому расширению.

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

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

1079_NetAnalysisInVSCode_ru/image2.png

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

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

1079_NetAnalysisInVSCode_ru/image3.png

С остальными способами вы можете ознакомиться в документации.

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

1079_NetAnalysisInVSCode_ru/image4.png

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

1079_NetAnalysisInVSCode_ru/image5.png

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

1079_NetAnalysisInVSCode_ru/image6.png

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

1079_NetAnalysisInVSCode_ru/image7.png

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

Для удобной обработки результатов анализа в плагине есть несколько фильтров и функций, ознакомиться с которыми вы можете в документации.

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

1079_NetAnalysisInVSCode_ru/image8.png

Предупреждение: V3142. Unreachable code detected. It is possible that an error is present. SharedDoAfterSystem.cs: 52.

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

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

Предупреждение: 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

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

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

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

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

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

Подробнее эта тема рассматривается в статье "Как внедрить статический анализатор кода в legacy проект и не демотивировать команду".

Заключение

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

Напомню, что вы можете установить расширение вместе с анализатором кода PVS-Studio c официального сайта.

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

Популярные статьи по теме


Комментарии (0)

Следующие комментарии next comments
close comment form
close form

Заполните форму в два простых шага ниже:

Ваши контактные данные:

Шаг 1
Поздравляем! У вас есть промокод!

Тип желаемой лицензии:

Шаг 2
Team license
Enterprise license
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности
close form
Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
RUB
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Бесплатная лицензия PVS‑Studio для специалистов Microsoft MVP
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Для получения лицензии для вашего открытого
проекта заполните, пожалуйста, эту форму
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Мне интересно попробовать плагин на:
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
check circle
Ваше сообщение отправлено.

Мы ответим вам на


Если вы так и не получили ответ, пожалуйста, проверьте, отфильтровано ли письмо в одну из следующих стандартных папок:

  • Промоакции
  • Оповещения
  • Спам