Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
>
>
PVS-Studio 7.25: поддержка новых версий…

PVS-Studio 7.25: поддержка новых версий Qt Creator, Rider и многое другое

15 Июн 2023

Вышел новый релиз PVS-Studio — 7.25. В нём мы поддержали Qt Creator 10 и Rider 2022.2.3 (и выше), обновили используемые анализатором библиотеки, улучшили документацию — и это далеко не всё! Подробности в заметке.

1055_PressRelease_7_25_ru/image1.png

Поддержка Qt Creator 10 и Rider 2022.2.3+

Практически одновременно с прошлым релизом PVS-Studio вышла новая версия Qt Creator — Qt Creator 10. Сразу после этого мы получили ряд вопросов о том, сделаем ли мы плагин для новой версии этой IDE. Рад сообщить, что плагин PVS-Studio для Qt Creator 10 теперь официально доступен :). Подробнее о нём можно прочитать здесь.

Также обновление получил и плагин PVS-Studio для Rider: теперь анализатором можно пользоваться и в Rider версий 2022.2.3 и выше.

Бета-тест плагинов для Qt Creator и Visual Studio Code с возможностью запуска анализа

В середине июня мы также планируем провести бета-тестирование новых плагинов для Qt Creator и Visual Studio Code. В них улучшен UI/UX и самое главное — реализована возможность проверки проектов. Кроме того, в будущем мы планируем добавить в них функцию подавления предупреждений с помощью suppress файлов.

Подать заявку на участие в бета-тестировании можно здесь. Когда оно начнётся, мы вышлем вам ссылки на плагины, инструкции по установке и, конечно же, временную лицензию.

Обновление зависимостей: MSBuild и Roslyn

Традиционно мы обновляем зависимости анализатора с выходом новой версии .NET. В первую очередь это позволяет анализировать C# проекты, ориентированные на новый SDK и использующие новый синтаксис языка. Другим положительным аспектом является общее улучшение работы библиотек Roslyn и MSBuild, используемых анализатором.

В этот раз мы решили изменить данной традиции и обновили зависимости заранее. Это позволило избавиться от ошибки, возникавшей на проектах с генерацией кода посредством специальных атрибутов. При её возникновении анализатор выдавал сообщение следующего вида:

Can't get compilation for project: NameOfProject. You may have experienced an error due to the use of attributes for automatic code generation. Please contact our support team (https://pvs-studio.com/en/about-feedback).

Если вы встречали такую ошибку, то настоятельно рекомендую скачать новую версию анализатора.

Ускорение анализа на современных процессорах 12 поколения от Intel

При проверке C++ проектов, использующих MSBuild, PVS-Studio не использовал всю мощь процессоров 12 поколения от компании Intel (например, i7-12700, i9-12900). Судя по всему, процессы анализа запускались только на энергосберегающих ядрах, в то время как остальные простаивали.

В новой версии PVS-Studio причины такого поведения были устранены. Теперь анализатор полноценно нагружает указанные процессоры и работает значительно быстрее.

Переработка документации

В этом релизе мы полностью переписали документацию по анализу в режиме коммитов и слияния веток (pull/merge request). Также мы добавили отдельные страницы документации, посвящённые интеграции анализатора в CI системы AppVeyor (здесь) и Buddy (здесь).

Мы также улучшили документацию по интеграции результатов анализа в SonarQube. Теперь там есть информация о том, как "подружить" C# анализатор PVS-Studio и SonarQube под Linux и macOS. Страница доступна здесь.

Включение отдельных диагностик через pvsconfig

Бывает, что из какой-то группы диагностик нужно включить только одно или несколько правил. Теперь такое можно делать через файлы pvsconfig. Достаточно выключить группу, а ниже добавить включение конкретной диагностики:

//-V::MISRA
//+V::2511,2578

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

Явное задание приоритетов файлов pvsconfig

Другим нововведением является возможность явного задания приоритетов файлов pvsconfig. Это актуально, когда настройки разных файлов конфигурации конфликтуют друг с другом. Например, один из файлов может выключать какую-то диагностику, а другой — включать.

Если pvsconfig-файлы находятся на разных уровнях, то при обнаружении конфликта предпочтение отдаётся настройкам из файла, который находится на более низком уровне. Так, настройки из pvsconfig уровня решения (solution) могут перезаписывать настройки из глобального pvsconfig, а настройки уровня проекта перезаписывают настройки уровня решения.

Всё не так очевидно, если конфликт обнаруживается между pvsconfig-файлами одного уровня (например, конфликтуют настройки из двух pvsconfig уровня проекта). В новом релизе появилась возможность указания в pvsconfig приоритетов — как раз для таких случаев. Для этого в файл конфигурации надо добавить строку следующего вида:

//CONFIG_PRIORITY::1

Чем меньше число, тем выше приоритет файла. Так, в случае конфликта настройки из файла с приоритетом 1 будут перезаписывать настройки из файла с приоритетом 2.

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

Игнорирование глобальных настроек анализа и отображения результатов (Settings.xml)

Порой наши клиенты сталкиваются с конфликтами между настройками из файлов конфигурации двух типов — Settings.xml и *.pvsconfig.

Settings.xml хранит разные глобальные настройки, параметры отображения в плагинах, позволяет отключать группы диагностик и т. п. Настройки, которые пользователь видит и меняет в плагине для Visual Studio, хранятся именно там. Подробнее о Settings.xml написано здесь.

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

Проблема возникает в следующем случае. Если в pvsconfig какая-то диагностика включена, а в настройках плагина (Settings.xml) её сообщения скрыты, то пользователь не увидит предупреждения (независимо от того, выдаст ли их анализатор). Из-за этого программист может не заметить каких-то актуальных для проекта предупреждений.

В PVS-Studio 7.25 появилась возможность указывать в pvsconfig уровня решения (solution) специальную директиву:

//V_IGNORE_GLOBAL_SETTINGS ON

С ней плагин для Visual Studio и PVS-Studio_Cmd.exe будут полностью игнорировать настройки из Settings.xml, связанные с анализом и выбором отображаемых предупреждений. Таким образом, анализ и отображение предупреждений будет настраиваться исключительно с помощью файлов pvsconfig.

Замечание. На данный момент директива 'V_IGNORE_GLOBAL_SETTINGS' поддерживается только плагином для Visual Studio. Плагины PVS-Studio для других IDE (к примеру, Rider или CLion) пока не реализуют описанное поведение. Напишите нам, если хотите иметь подобный функционал в плагине для используемой вами IDE.

Группа оптимизаций в C# анализаторе

В этом релизе мы добавили новую группу диагностик для C# и первое правило для неё — V4001. Группа в целом посвящена оптимизации исходного кода, а V4001 ориентирована на проекты, использующие игровой движок Unity. Данная диагностика ищет часто выполняемый код, в котором производится упаковка. Подробнее о правиле V4001 можно прочесть в документации.

В будущем мы планируем добавить ещё больше диагностик, посвящённых оптимизации и ориентированных на Unity. Если у вас есть мысли по поводу того, какие правила были бы полезны при разработке под этот игровой движок, пишите нам.

Новые диагностики

C, C++

  • V837. The 'emplace' / 'insert' function does not guarantee that arguments will not be copied or moved if there is no insertion. Consider using the 'try_emplace' function.
  • V1098. The 'emplace' / 'insert' function call contains potentially dangerous move operation. Moved object can be destroyed even if there is no insertion.
  • V1099. Using the function of uninitialized derived class while initializing the base class will lead to undefined behavior.
  • V2020. The loop body contains the 'break;' / 'continue;' statement. This may complicate the control flow.

C#

  • V3190. Concurrent modification of a variable may lead to errors.
  • V4001. Unity Engine. Boxing inside a frequently called method may decrease performance.

Найди ошибку в коде на Java

1055_PressRelease_7_25_ru/image2.png

В этом релизе команда PVS-Studio подготовила для вас новый квиз по поиску ошибок в коде. В этот раз он посвящён Java. Квиз доступен по ссылке. Верю, что у вас получится пройти его на 10 из 10 :).

Кстати, здесь доступен подобный квиз по C++, а здесь — по C#. Налетайте!

DotNet&More

Недавно наш DevRel, Сергей Васильев, поучаствовал в подкасте DotNet&More, обсудив с другими участниками темы статического анализа, безопасности и качества кода. Отдельное внимание уделено вопросу встраивания статического анализа в процесс разработки.

В общем, советую глянуть:

Статьи

Для тех, кто пишет на C++:

Для тех, кто пишет на C#:

Разное:

**

Загрузить актуальную версию PVS‑Studio можно здесь.

Если хотите получать пресс‑релизы по почте, подписывайтесь на рассылку.

Последние статьи:

Опрос:

Попробуйте PVS-Studio бесплатно

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


Комментарии (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
Ваше сообщение отправлено.

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


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

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