Вышел новый релиз PVS-Studio — 7.28. Теперь можно запускать анализ на архитектуре ARM, .NET 8 и в Unreal Engine без Unity Build, и это ещё не всё! Больше подробностей в этом пресс-релизе.

Загрузить актуальную версию PVS-Studio можно здесь.
Поддержка архитектуры ARM
В анализатор PVS-Studio добавлена поддержка работы на платформе ARM на операционной системе Windows. Поддержка работает в режиме совместимости с архитектурой x64.
В следующем году планируется реализация нативной ARM версии анализатора для операционных систем семейства macOS.
Поддержка анализа проектов на .NET 8
В PVS-Studio C# поддержали анализ проектов, использующих .NET 8.
Сам C# анализатор под Linux и macOS теперь работает на .NET 8.
Анализ Unreal Engine проектов без Unity Build
При проверке Unreal Engine проектов с помощью PVS-Studio зачастую возникают проблемы с избыточным потреблением памяти и замедлением анализа, вызываемые использованием системы объединения единиц трансляции в один файл (Unity Build).
Несмотря на то что использование такой системы может положительно сказаться на времени компиляции, большой размер файла может привести к повышенному потреблению ресурсов, необходимых для анализа.
Мы дополнили документацию по анализу Unreal Engine проектов пунктом про настройку запуска анализа без использования Unity Build, но с возможностью использования этого режима для сборки проекта.
Поддержка относительных путей в SARIF
Отчеты в формате SARIF получили поддержку относительных путей до анализируемых файлов согласно документации стандарта.
Более подробно про отчеты в формате SARIF можно прочитать в документации.
Использование wildcard-паттернов в CLMonitor
Теперь CLMonitor (утилита мониторинга сборок на Windows) поддерживает wildcard-паттерны в командах компиляции.
Более подробно про использование утилиты CLMonitor можно прочитать в документации.
Доработка .pvsconfig в C# анализаторе
В C# анализаторе доработана и унифицирована с другими анализаторами возможность включения и отключения отдельных диагностик с помощью файлов настройки анализатора .pvsconfig.
Пример:
//-V::3022,5623:1,3
Эта запись позволит исключить срабатывания диагностик V3022 и V5623 уровня ‘High’ и ‘Low’.
Более подробно про использование файлов конфигурации диагностик .pvsconfig можно прочитать в документации.
Улучшение диагностики в C# анализаторе
В C# анализаторе улучшена работа с параметрами, имеющими null в качестве значения по умолчанию.
Это позволяет диагностике V3080 находить больше проблем, связанных с разыменованием нулевых ссылок.
Рассмотрим пример из реального проекта, что теперь может обнаружить анализатор:
public MyEffectInstance CreateEffect( IMySourceVoice input, MyStringHash effect, MySourceVoice[] cues = null, // <= float? duration = null) { if(!m_effects.ContainsKey(effect)) { Debug.Fail(string.Format("Effect not found: {0}", effect.ToString())); return null; } var instance = new MyEffectInstance (m_effects[effect], input, cues, duration, m_engine); // <= m_activeEffects.Add(instance); return instance; } public MyEffectInstance( MyAudioEffect effect, IMySourceVoice input, MySourceVoice[] cues, float? duration, XAudio2 engine) { m_engine = engine; m_effect = effect; var inputSound = input as MySourceVoice; .... foreach(var sound in cues) // <= { .... } }
Подозрительный код на одной из старых версий проекта Space Engineers.
В методе CreateEffect параметр cues имеет значение по умолчанию null, но при создании объекта класса MyEffectInstance производится обход массива cues в цикле foreach(var sound in cues).
Вследствие чего, если параметр cues имеет значение по умолчанию, то во время создания объекта класса при входе в цикл будет обращение по нулевой ссылке с выбросом исключения NullReferenceException.
Исправлена проблема совместной работы PVS-Studio и Visual Assist
При работе одновременно с плагином PVS-Studio и Visual Assist наблюдались проблемы с переключением между файлами в Visual Studio 2019 и 2022.
Больше этих проблем нет, мы всё исправили :).
Новые диагностики
С++
-
V1103. The values of padding bytes are unspecified. Comparing objects with padding using ‘memcmp’ may lead to unexpected result.
-
V2624. MISRA. The initializer for an aggregate or union should be enclosed in braces.
C#
-
V3193. Data processing results are potentially used before asynchronous output reading is complete. Consider calling ‘WaitForExit’ overload with no arguments before using the data.
-
V4005. Unity Engine. The expensive operation is performed inside method or property. Using such member in performance-sensitive context can lead to decreased performance.
Java
-
V6107. The constant NN is being utilized. The resulting value could be inaccurate. Consider using the KK constant.
Конкурс для C++ программистов и их любимых багов

В этом релизе команда PVS-Studio подготовила для вас новый конкурс с призами!
Для участия нужно вспомнить свой самый эпичный, мемный или глупый фейл при написании кода. Отправьте его нам до 30 декабря через специальную форму на этой странице и ждите подведения итогов в январе. Авторы 10 самых прикольных, крутых или глупых фейлов получат уникальную книгу «Вредные советы для C++ программистов» с подписью автора.
BeardyCast
Недавно часть нашей команды приняла участие в подкасте BeardyCast! Тимлид C++ Филипп Хандельянц и C# разработчик Никита Паневин вместе с ведущим обсудили темы статического анализа, качества кода и как в этом помогает статический анализатор PVS-Studio. Отдельное внимание уделено особенностям PVS-Studio, вопросу встраивания и интеграции статического анализа в процесс разработки.
Советуем послушать:
Кошмар на улице багов

Так сложилось, что в даты релиза попал Хэллоуин! Хоть он и прошел, но страшные баги никуда не делись! Сможете их найти?
Мы предлагаем вам попробовать себя в качестве охотников за привидениями! Мы собрали для вас 8 страшных историй — прочитайте их и попробуйте найти затаившиеся там баги.
Статьи
Для тех, кто пишет на C++
Для тех, кто пишет на C#
-
Использование расширения VS Code «PVS-Studio» для эффективной борьбы с ошибками в C# коде
-
Возвращаемся на Гроув-Стрит. Анализ движка Grand Theft Auto: San Andreas на Unity
-
Microsoft PowerToys: Король GitHub среди C# проектов с C++ ошибками
Для тех, кто пишет на Java
Статьи общей тематики
-
Какую статью хочется прочитать в нашем блоге на тему C++, C# или Java?
-
Интервью с разработчиками мультитула для хакеров и пентестеров Flipper Zero
-
День, когда Скайнет обрёл сознание, и ещё 69 поводов собраться с коллегами. Часть 1
-
День, когда Скайнет обрёл сознание, и ещё 69 поводов собраться с коллегами. Часть 2
Доклады
Наша команда активно участвует в конференциях и митапах. В этом релизе C# разработчик Глеб Асламов выступил на конференции SQA Days 33 с докладом «SAST как этап цикла безопасной разработки»!
В докладе поднимаются темы качества и безопасности кода, и как в этом могут помочь инструменты статического анализа.
Советуем посмотреть:
Хотите проверить свой проект с помощью PVS-Studio? Начните с этой страницы.
А ещё у нас появилась рассылка с IT-ивентами для разработчиков! На неё и другие рассылки вы можете подписаться по ссылке.
Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Gleb Aslamov. PVS-Studio 7.28: support for ARM, .NET 8, analysis of Unreal Engine projects without Unity Build, and more.
ссылка на оригинал статьи https://habr.com/ru/articles/780854/
Добавить комментарий