>
>
PVS-Studio 7.28: поддержка ARM, .NET 8,…

Глеб Асламов
Статей: 14

PVS-Studio 7.28: поддержка ARM, .NET 8, анализ Unreal Engine без Unity Build и не только

Вышел новый релиз 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#

Для тех, кто пишет на Java

Статьи общей тематики

Доклады

Наша команда активно участвует в конференциях и митапах. В этом релизе C# разработчик Глеб Асламов выступил на конференции SQA Days 33 с докладом "SAST как этап цикла безопасной разработки"!

В докладе поднимаются темы качества и безопасности кода, и как в этом могут помочь инструменты статического анализа.

Советуем посмотреть:

Хотите проверить свой проект с помощью PVS-Studio? Начните с этой страницы.

А ещё у нас появилась рассылка с IT-ивентами для разработчиков! На неё и другие рассылки вы можете подписаться по ссылке.