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

Поиск ошибок в проектах на основе Unreal Engine

06 Окт 2023

В статическом анализаторе PVS-Studio начали появляться диагностические правила для выявления багов, специфичных для Unreal Engine проектов. Однако без сообщества разработчиков игр здесь не обойтись. Напишите нам про типовые паттерны ошибок, поиск которых хотелось бы автоматизировать.

1069_Unreal_Engine_rules_ru/image1.png

Анализатор PVS-Studio хорошо выявляет распространённые паттерны опечаток, логические ошибки, потенциальные уязвимости и многое другое. Теперь взор команд, разрабатывающих PVS-Studio, обратился в сторону Unreal Engine.

Мы начали реализовывать диагностики для поиска ошибок, специфичных для проектов, построенных на этом игровом движке.

Первый пример. Появилось диагностическое правило, анализирующее классы, не унаследованные от типа UObject. Если в таком классе есть нестатическое поле в виде указателя на тип, унаследованный от UObject, то это неправильно.

class SomeClass
{
  ....
  UObject *m_ptr;
  ....
};

Сборщик мусора Unreal Engine может уничтожить объект, адресуемый указателем m_ptr. Подробнее про это диагностическое правило: V1100.

Второй пример. Выявляются сущности, несоответствующие соглашениям о наименованиях для проектов, основанных на Unreal Engine. Соответствие соглашениям требуется для корректной работы Unreal Header Tool:

  • Имена классов, наследуемых от UObject, следует начинать с префикса 'U';
  • Имена классов, наследуемых от AActor, следует начинать с префикса 'A';
  • Имена классов, наследуемых от SWidget, следует начинать с префикса 'S';
  • И так далее. Подробности см. в описании диагностического правила V1102 (войдёт в октябрьский релиз PVS-Studio 7.27).

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

Мы легко черпаем вдохновение для диагностик общего типа. В чём сложность с Unreal Engine?

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

Так же может сложиться и с UE-ориентированными диагностическими правилами. Пользователи будут находить ошибки и присылать идеи, что ещё можно искать. Нужно только подтолкнуть, запустить этот процесс. Поэтому и появилась эта заметка.

Пишите в комментариях идеи по поиску багов!

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

Мы ждём ваших интересных идей. Спасибо!

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


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

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


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

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