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

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

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

1090_PressRelease_7_28_ru/image1.png

Загрузить актуальную версию 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.

Конкурс для C++ программистов и их любимых багов

1090_PressRelease_7_28_ru/image2.png

В этом релизе команда PVS-Studio подготовила для вас новый конкурс с призами!

Для участия нужно вспомнить свой самый эпичный, мемный или глупый фейл при написании кода. Отправьте его нам до 30 декабря через специальную форму на этой странице и ждите подведения итогов в январе. Авторы 10 самых прикольных, крутых или глупых фейлов получат уникальную книгу "Вредные советы для C++ программистов" с подписью автора.

BeardyCast

Недавно часть нашей команды приняла участие в подкасте BeardyCast! Тимлид C++ Филипп Хандельянц и C# разработчик Никита Паневин вместе с ведущим обсудили темы статического анализа, качества кода и как в этом помогает статический анализатор PVS-Studio. Отдельное внимание уделено особенностям PVS-Studio, вопросу встраивания и интеграции статического анализа в процесс разработки.

Советуем послушать:

Кошмар на улице багов

1090_PressRelease_7_28_ru/image3.png

Так сложилось, что в даты релиза попал Хэллоуин! Хоть он и прошел, но страшные баги никуда не делись! Сможете их найти?

Мы предлагаем вам попробовать себя в качестве охотников за привидениями! Мы собрали для вас 8 страшных историй — прочитайте их и попробуйте найти затаившиеся там баги.

Статьи

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

  • 30 лет DOOM: новый код — новые баги

  • Игоры! Как пишут код для SDL (+ интервью с создателем)

  • Проверяем YTsaurus. Доступность, надёжность, open source

  • Опечатки, нулевые указатели и коварный таб: 33 фрагмента в библиотеке GTK

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

  • Использование расширения VS Code "PVS-Studio" для эффективной борьбы с ошибками в C# коде

  • Возвращаемся на Гроув-Стрит. Анализ движка Grand Theft Auto: San Andreas на Unity

  • Microsoft PowerToys: Король GitHub среди C# проектов с C++ ошибками

  • Что нового в .NET 8?

  • Обзор нововведений в C# 12

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

  • Операция "K". Ищем баги в коде IntelliJ IDEA

  • Немного о гигиене 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/companies/pvs-studio/news/780854/


Интересные статьи

Интересные статьи

Все поверили в теорию управления. Мы не задумываясь задаем вопросы в научно-образовательной среде друг-другу с точки зрения ее положений. Судим о научных работах. Но почему же Теория не спешит дружить...
В соответствии с новыми требованиями (проект постановления Правительства, вносящего изменения в постановление от 17 июля 2015 г. № 719, опубликован 22.10.2021, публичное обсуждение до 15.11.2021, ...
Статья посвящена принципиальной структуре аналитической метамодели и метамодели верхнего уровня абстракций (с элементами такими как цель, ценность, принцип, стратегия, та...
В тестовом билде Firefox Nightly реализован интересный режим. Возможно, когда-нибудь его включат по умолчанию, но сейчас он выглядит слегка необычно и его нужно вручную активировать из настро...
Для Java программистов существуют полезные инструменты, помогающие писать качественный код, например, мощная среда разработки IntelliJ IDEA, бесплатные анализаторы SpotBugs, PMD и другие. Всё э...