Статический анализатор PVS-Studio постоянно развивается: совершенствуются различные механизмы, происходит интеграция с игровыми движками, IDE, CI/CD и другими системами и сервисами.
Благодаря этому несколько лет назад появилась возможность использовать PVS-Studio для анализа проектов Unreal Engine. Однако один из важных механизмов PVS-Studio — подавление сообщений анализатора (baselining, отключение предупреждений для существующего кода) — не работал с проектами UE. Почему это не было реализовано сразу, и как в итоге была решена эта задача – читайте далее.
Базовый уровень
Baselining в PVS-Studio — это механизм, позволяющий провести «условную линию» для предупреждений анализатора, выданных в ходе анализа проекта.Анализатор использует эту «полоску» и показывает пользователю только те предупреждения, которые не отсекаются этой «полоской».
Механизм подавления оповещений реализовано с помощью специальных файлов подавления, в которых хранится информация о каждом подавленном сообщении анализатора.
Эти файлы учитываются при последующих запусках анализатора, и подавленные предупреждения не появляются в итоговом отчете.
На практике это позволяет получать в результате анализа только актуальные предупреждения, выданные для нового или измененного кода.
Этот механизм особенно полезен при внедрении PVS-Studio в существующий проект. В этом случае первый анализ может выдать огромное количество предупреждений (обычно количество ошибок зависит от размера кодовой базы).
Вместо того, чтобы пытаться обработать их все сразу, вы можете просто подавить их.
В результате при следующем анализе будут выдаваться только «свежие» предупреждения анализатора.
Вы всегда можете вернуться к скрытым сообщениям.
Плагины PVS-Studio для IDE также имеют возможность массового подавления и переотображения выбранных пользователем триггеров анализатора.
Также рекомендую прочитать статью, посвященную описанным выше вопросам» Как внедрить статический анализатор кода в устаревший проект, не демотивируя команду ".
PVS-Studio и Unreal Engine
На данный момент есть несколько вариантов проверка проектов Unreal Engine с помощью PVS-Studio .Одним из наиболее удобных для регулярного использования является плагин для Visual Studio .
Это позволяет вам прямо в IDE:
- провести анализ проекта У?;
- перемещаться по сообщениям анализатора;
- обрабатывать сообщения анализатора, не отрываясь от написания кода.
- В свойствах проекта UE на вкладке NMake вам необходимо добавить флаг «-StaticAnalyzer=PVSStudio» к команде сборки и перестройки проекта.
Важный: при добавлении этого флага проект не будет собираться/пересобираться, но будет запущен анализ;
- включите автоматическую загрузку отчета анализатора для проектов UE в плагине: PVS-Studio > Параметры > Специальные настройки анализатора > Сохранить/Загрузить (отчет анализатора) > AutoloadUnrealEngineLog.
- Чтобы проанализировать весь проект, вам необходимо перестроить проект. Результаты анализа будут сохранены в отчете, путь к которому будет отображаться в окне вывода.
Полученный отчет будет автоматически загружен плагином PVS-Studio в таблицу сообщений анализатора;
- Для анализа файлов, изменившихся с момента последнего запуска анализатора, необходимо запустить сборку проекта (Build Solution).
Однако стоит учитывать, что файл не будет проанализирован, если изменился только включенный файл .
h.
Так почему же при всех имеющихся возможностях PVS-Studio сообщения базового анализатора для проектов UE не поддерживались до релиза 7.16? Причем в версии 7.16 улучшения этого механизма были внесены только в утилиту командной строки PVS-Studio_Cmd.exe. И только в версии анализатора 7.17 базовое определение было реализовано в плагинах для Visual Studio и JetBrains Rider. Чтобы ответить на этот вопрос, необходимо поговорить об особенностях проектов У?.
Особенности проектов Unreal Engine
На первый взгляд может показаться, что для поддержки базовой линии в проектах UE достаточно повторно использовать существующий механизм.Увы, это не так просто.
Давайте рассмотрим механизмы, которые используются при анализе в PVS-Studio (не только для проектов UE):
- Прежде чем анализировать обычные C++ (non-UE) проекты, анализатор собирает информацию о проекте для наиболее полного и качественного анализа.
Эту информацию предоставляет система сборки.
Например, MSBuild.
- Для сборки проектов UE используется специализированная система сборки Unreal Build Tool (UBT), которая интегрируется поверх системы сборки MSBuild, используемой в Visual Studio и JetBrains Rider.
- Проекты-оболочки, созданные MSBuild для Unreal Engine, не содержат всей необходимой информации для полноценного анализа.
- Из-за предыдущего пункта мне пришлось интегрировать ядро C++-анализатора (PVS-Studio.exe) непосредственно в UBT, чтобы получить от него всю необходимую информацию для анализа проекта.
- Механизм базовой линии привязан к проектам MSBuild и утилите PVS-Studio_Cmd.exe, а не к PVS-Studio.exe.
- Плагины для IDE также привязаны к механизму базовой линии в PVS-Studio_Cmd.exe.
Также интеграция ядра C++ (PVS-Studio.exe) в UBT наложила дополнительные ограничения на анализ проектов УП из PVS-Studio_Cmd.exe. Эти ограничения коснулись и плагинов для IDE, поскольку они взаимодействуют с этой консольной утилитой.
Однако некоторых ограничений для IDE удалось избежать, а именно:
- флаг -StaticAnalyzer=PVSStudio позволял запускать анализ через PVS-Studio.exe из IDE-плагинов при сборке/пересборке проекта;
- Подписка на событие сборки позволила автоматически загружать результаты анализа в плагины IDE.
Давайте посмотрим, какие изменения необходимо внести в утилиту PVS-Studio_Cmd.exe, а также в код плагинов для Visual Studio и JetBrains Rider, чтобы обеспечить работу механизма baselining с проектами UE.
Улучшения в механизме базовой линии в PVS-Studio_Cmd.exe для проектов Unreal Engine.
В версии 7.16 механизм базовой линии в PVS-Studio_Cmd.exe был расширен.Во-первых, добавлена возможность фильтровать сообщения анализатора из отчета (файла plog) с помощью файла супрессии.
Во-вторых, расширен режим подавления сообщений, который теперь можно использовать с отчетами по проектам UE. Данная модификация позволила использовать базовую настройку в тех случаях, когда нет необходимости (или возможности) использовать UI. Например, при интеграции PVS-Studio в различные CI/CD ( Трэвис Си , Круг CI , Гитлаб , Лазурный ).
Режим подавления сообщений непосредственно из отчетов PVS-Studio (файлов plog) уже существовал до описанных улучшений.
Его суть заключается в добавлении сообщений из отчетов анализатора в файлы подавления проекта/решения без запуска анализа.
Пример команды для подавления всех сообщений из отчета:
Этот режим активируется с помощью флага «-a SuppressOnly».PVS-Studio_Cmd.exe -t path/to/solution/file -a SuppressOnly -o path/to/report -u path/to/suppress/file
Также можно указать в необязательном аргументе «-u» путь к файлу подавления, не связанному с проектом.
В результате файл подавления будет (пере)записан по этому пути, и все сообщения из отчета, переданные в аргументе '-o', будут добавлены в него, как и в файлах подавления проекта/решения.
Кроме того, добавлен режим фильтрации сообщений из отчета анализатора.
Он отличается от режима SuppressOnly тем, что он создает отфильтрованный отчет на основе '-o', переданного в аргументе.
Отфильтрованный отчет содержит только те предупреждения, которые не были найдены в файлах подавления решения, проектов и файле подавления из аргумента «-u».
Этот отчет сохраняется в формате .
plog с постфиксом «_filtered» рядом с отчетом из аргумента «-o».
Пример команды для фильтрации отчета: PVS-Studio_Cmd.exe -t path/to/solution/file -a FilterFromSuppress ^
-o path/to/report -u path/to/suppress/file
Аргументы, используемые для этого режима работы, аналогичны режиму SuppressOnly .
Чтобы активировать его, необходимо указать флаг «-a FilterFromSuppress».
Оба описанных выше режима добавляют дополнительные возможности по работе с отчетами анализатора, причем не только для проектов УП.
Однако здесь все оказалось не так просто, потому что механизм baselining не может создавать и использовать супрессивные файлы на уровне проектов UE. Учитывая эту функцию, чтобы базовый план работал, вам нужно либо добавить файл подавления на уровне решения, либо передать его в аргументе «-u» при использовании режимов.
SuppressOnly или ФильтрИзПодавить .
Более подробную информацию об этих и других особенностях механизма определения базовой линии для проектов ЕС можно найти в документация (раздел «Подавление предупреждений анализатора в проектах Unreal Engine»).
Данные улучшения позволяют использовать механизм подавления проектов У? на постоянной основе.
Алгоритм использования механизма подавления проектов УП теперь выглядит так:
- получить отчет по проекту УП одним из способов, описанных в разделе документация (раздел «Проверка проектов»);
- используя PVS-Studio_Cmd.exe в режиме SuppressOnly , подавить все сообщения из полученного отчета;
- при следующем анализе фильтровать сообщения из нового отчета, используя ранее полученный файл подавления и режим ФильтрИзПодавить в PVS-Studio_Cmd.exe.
Использование механизма подавления сообщений анализатора для проектов Unreal Engine в плагинах Visual Studio и JetBrains Rider.
Возможность подавления сообщений PVS-Studio для проектов UE была добавлена в плагины для Visual Studio и JetBrains Rider начиная с версии 7.17. Первое, что вам нужно сделать, это добавить файл подавления уровня решения.
Майкрософт Визуал Студия В Visual Studio для этого нужно щелкнуть правой кнопкой мыши по решению в контекстном меню Solution Explorer и создать новый файл подавления, выбрав Добавить > Новый элемент. > PVS-Studio Suppression File:
Далее, чтобы подавить все сообщения, необходимо в окне с результатами анализа нажать кнопку «Подавить все сообщения» (это будет работать, если для сборки проектов UE включена автозагрузка логов):
С помощью контекстного меню можно подавить только выбранные сообщения:
Список всех подавленных файлов, которые используются для открытого в Visual Studio проекта/решения, можно просмотреть в специальном окне Расширения > PVS-Studio > Подавить сообщения:
В этом окне есть несколько кнопок:
- Подавить все – подавляет все сообщения в окне результатов анализа;
- Подавить фильтруемые – подавляет только отфильтрованные сообщения;
- Отменить подавление из выбранных – позволяет удалить подавленные файлы, выбранные в окне.
В этом случае все сообщения из удаленных файлов подавления появятся в таблице с результатами анализа.
Для этого в окне с результатами анализа, аналогично Visual Studio, есть кнопка «Подавить все сообщения»:
Совместное использование новых базовых возможностей для проектов UE в CI и Visual Studio.
Учитывая все описанные выше улучшения в механизме baselining для проектов UE, теперь вы можете быстро интегрировать PVS-Studio в новый проект, настроить его автоматическую ежедневную проверку в CI и одновременно постепенно разобраться с подавленными предупреждениями в Visual Studio. Это будет выглядеть примерно так:- Интегрировав анализатор PVS-Studio в новый проект УП, вы получите первый отчет анализатора.
- Далее вы подавите все обнаруженные предупреждения через PVS-Studio_Cmd.exe в SuppressOnly или через интерфейс плагина PVS-Studio для IDE. При подавлении всех предупреждений в IDE необходимо добавить файл подавления решения, в который будут записаны все подавленные предупреждения.
В результате у вас получится файл подавления, который в дальнейшем будет использоваться для фильтрации предупреждений из отчетов анализатора.
- Вы передаете этот файл подавления в систему контроля версий или сохраняете его любым удобным для вас способом.
- Следующий шаг — настройка задачи в CI, которая запускает анализ проекта с помощью PVS-Studio и фильтрует предупреждения из полученного отчета.
При фильтрации используется ранее полученный файл подавления.
Фильтрация происходит с помощью PVS-Studio_Cmd.exe в режиме ФильтрИзПодавить .
В результате выполнения задачи вы получаете отчет с предупреждениями только для нового или измененного кода.
- После этого отчет отправляется членам команды с помощью утилиты BlameNotifier.exe .
- Каждый участник команды корректирует код на основании полученного отчета.
- Ваша команда также может постепенно разобраться с подавленными сообщениями.
Для этого необходимо включить подавление предупреждений в Visual Studio. После обработки подавленного предупреждения вы удаляете его из файла подавления и фиксируете изменение, чтобы это сообщение не мешало в будущем фильтрованию последующих отчетов анализатора с использованием файла подавления.
- Помимо удаления, в файл подавления также можно добавлять новые предупреждения с помощью интерфейса плагина PVS-Studio для Visual Studio или через PVS-Studio_Cmd.exe в файле SuppressOnly с аргументом «-u», указывающим путь к ранее созданному файлу подавления.
Таким образом можно отложить обработку предупреждений (чем не советую злоупотреблять), и при этом они не будут мешать отчету анализатора.
Заключение
Описанные улучшения в механизме базовой линии предупреждений повысили удобство использования статического анализатора PVS-Studio при работе с проектами Unreal Engine. Теперь будет гораздо проще внедрить анализатор в существующие проекты и использовать PVS-Studio на на регулярной основе при работе с проектами UE как в IDE, так и в CI/CD. Вы можете убедиться в этом сами, запросив пробную версию лицензия .Если вы хотите поделиться этой статьей с англоязычной аудиторией, воспользуйтесь ссылкой для перевода: Валерий Комаров.
Базовый анализ Unreal: улучшения PVS-Studio для проектов Unreal Engine .
Теги: #Разработка игр #gamedev #статический анализ кода #pvs-studio #unreal engine #статический анализ #pvs #статический анализ кода #статический анализ #unrealengine
-
Импорт 3D-Моделей В Unity И Подводные Камни
19 Oct, 24 -
Что Означает Dipm Для Ssd-Накопителей?
19 Oct, 24 -
Фото-Медитация
19 Oct, 24 -
Дум 2014
19 Oct, 24 -
Очередной Стартап С Нуля?
19 Oct, 24