Поиск ошибок в проектах на основе Unreal Engine
В статическом анализаторе PVS-Studio начали появляться диагностические правила для выявления багов, специфичных для Unreal Engine проектов.
Однако без сообщества разработчиков игр здесь не обойтись.
Первый пример.
Появилось диагностическое правило, анализирующее классы, не унаследованные от типа UObject. Если в таком классе есть нестатическое поле в виде указателя на тип, унаследованный от UObject, то это неправильно.
Сборщик мусора Unreal Engine может уничтожить объект, адресуемый указателем m_ptr. Подробнее про это диагностическое правило: V1100.
Второй пример.
Выявляются сущности, несоответствующие соглашениям о наименованиях для проектов, основанных на Unreal Engine. Соответствие соглашениям требуется для корректной работы Unreal Header Tool:
- Имена классов, наследуемых от UObject, следует начинать с префикса 'U';
- Имена классов, наследуемых от AActor, следует начинать с префикса 'A';
- Имена классов, наследуемых от SWidget, следует начинать с префикса 'S';
- И так далее. Подробности см. в описании диагностического правила V1102 (войдёт в октябрьский релиз PVS-Studio 7.27).
Это только начало. Мы будем собирать паттерны подобных ошибок и реализовывать их выявление в анализаторе. Нюанс в том, что без помощи GameDev сообщества мы будем делать это очень медленно. Поскольку мы сами не разрабатываем игры, коллекционирование паттернов поначалу будет носить случайный характер.
Пишите в комментариях идеи по поиску багов!