﻿# 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](https://import.viva64.com/docx/blog/1090_PressRelease_7_28_ru/image1.png)




> Загрузить актуальную версию PVS\\\-Studio можно \[здесь\]\(https://pvs\-studio\.ru/ru/pvs\-studio/try\-free/\)\\\.



**Поддержка архитектуры 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\)\. 

Несмотря на то что использование такой системы может положительно сказаться на времени компиляции, большой размер файла может привести к повышенному потреблению ресурсов, необходимых для анализа\.

Мы дополнили [документацию](https://pvs-studio.ru/ru/docs/manual/0043/) по анализу Unreal Engine проектов [пунктом](https://pvs-studio.ru/ru/docs/manual/0043/#unitybuild) про настройку запуска анализа без использования Unity Build, но с возможностью использования этого режима для сборки проекта\.

**Поддержка относительных путей в SARIF**

Отчеты в формате SARIF получили поддержку относительных путей до анализируемых файлов согласно документации стандарта\.

Более подробно про отчеты в формате SARIF можно прочитать в [документации](https://pvs-studio.ru/ru/docs/manual/6590/)\.

**Использование wildcard\-паттернов в CLMonitor**

Теперь CLMonitor \(утилита мониторинга сборок на Windows\) поддерживает wildcard\-паттерны в командах компиляции\.

Более подробно про использование утилиты CLMonitor можно прочитать в [документации](https://pvs-studio.ru/ru/docs/manual/0031/#start)\.

**Доработка \.pvsconfig в C\# анализаторе**

В C\# анализаторе доработана и унифицирована с другими анализаторами возможность включения и отключения отдельных диагностик с помощью файлов настройки анализатора \.pvsconfig\. 

Пример:

```cpp
//-V::3022,5623:1,3
```

Эта запись позволит исключить срабатывания диагностик [V3022](https://pvs-studio.ru/ru/docs/warnings/v3022/) и [V5623](https://pvs-studio.ru/ru/docs/warnings/v5623/) уровня 'High' и 'Low'\.

Более подробно про использование файлов конфигурации диагностик \.pvsconfig можно прочитать [в документации](https://pvs-studio.ru/ru/docs/manual/6630/)\.

**Улучшение диагностики в C\# анализаторе**

В C\# анализаторе улучшена работа с параметрами, имеющими null в качестве значения по умолчанию\.

Это позволяет диагностике [V3080](https://pvs-studio.ru/ru/docs/warnings/v3080/) находить больше проблем, связанных с разыменованием нулевых ссылок\.

Рассмотрим пример из реального проекта, что теперь может обнаружить анализатор:

```cpp
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](https://github.com/KeenSoftwareHouse/SpaceEngineers)\.

В методе _CreateEffect_ параметр _cues_ имеет значение по умолчанию _null_, но при создании объекта класса _MyEffectInstance_ производится обход массива _cues_ в цикле _foreach\(var sound in cues\)_\.

Вследствие чего, если параметр _cues_ имеет значение по умолчанию, то во время создания объекта класса при входе в цикл будет обращение по нулевой ссылке с выбросом исключения [_NullReferenceException_](https://pvs-studio.ru/ru/blog/posts/csharp/1049/)\.

**Исправлена проблема совместной работы PVS\-Studio и Visual Assist**

При работе одновременно с плагином PVS\-Studio и Visual Assist наблюдались проблемы с переключением между файлами в Visual Studio 2019 и 2022\.

Больше этих проблем нет, мы всё исправили :\)\.

**Новые диагностики**

С\+\+

* [V1103](https://pvs-studio.ru/ru/docs/warnings/v1103/)\. The values of padding bytes are unspecified\. Comparing objects with padding using 'memcmp' may lead to unexpected result\.
* [V2624](https://pvs-studio.ru/ru/docs/warnings/v2624/)\. MISRA\. The initializer for an aggregate or union should be enclosed in braces\.

C\#

* [V3193](https://pvs-studio.ru/ru/docs/warnings/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](https://pvs-studio.ru/ru/docs/warnings/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](https://pvs-studio.ru/ru/docs/warnings/v6107/)\. The constant NN is being utilized\. The resulting value could be inaccurate\. Consider using the KK constant\.

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

![1090_PressRelease_7_28_ru/image2.png](https://import.viva64.com/docx/blog/1090_PressRelease_7_28_ru/image2.png)

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

Для участия нужно вспомнить свой самый эпичный, мемный или глупый фейл при написании кода\. Отправьте его нам до 30 декабря через специальную форму [на этой странице](https://pvs-studio.ru/ru/blog/contest/) и ждите подведения итогов в январе\. Авторы 10 самых прикольных, крутых или глупых фейлов получат уникальную книгу "Вредные советы для C\+\+ программистов" с подписью автора\.

**BeardyCast**

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

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

<https://www.youtube.com/watch?v=nj3T1P_Hmp4>

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

![1090_PressRelease_7_28_ru/image3.png](https://import.viva64.com/docx/blog/1090_PressRelease_7_28_ru/image3.png)

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

Мы предлагаем вам попробовать себя в качестве охотников за привидениями\! Мы собрали для вас [8 страшных историй](https://pvs-studio.ru/ru/blog/quest/halloween_quiz/) — прочитайте их и попробуйте найти затаившиеся там баги\.

**Статьи**

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

* [30 лет DOOM: новый код — новые баги](https://pvs-studio.ru/ru/blog/posts/cpp/1087/)
* [Игоры\! Как пишут код для SDL \(\+ интервью с создателем\)](https://pvs-studio.ru/ru/blog/posts/cpp/1081/)
* [Проверяем YTsaurus\. Доступность, надёжность, open source](https://pvs-studio.ru/ru/blog/posts/cpp/1077/)
* [Опечатки, нулевые указатели и коварный таб: 33 фрагмента в библиотеке GTK](https://pvs-studio.ru/ru/blog/posts/cpp/1076/)

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

* [Использование расширения VS Code "PVS\-Studio" для эффективной борьбы с ошибками в C\# коде](https://pvs-studio.ru/ru/blog/posts/csharp/1079/)
* [Возвращаемся на Гроув\-Стрит\. Анализ движка Grand Theft Auto: San Andreas на Unity](https://pvs-studio.ru/ru/blog/posts/csharp/1083/)
* [Microsoft PowerToys: Король GitHub среди C\# проектов с C\+\+ ошибками](https://pvs-studio.ru/ru/blog/posts/cpp/1078/)
* [Что нового в \.NET 8?](https://pvs-studio.ru/ru/blog/posts/csharp/1080/)
* [Обзор нововведений в C\# 12](https://pvs-studio.ru/ru/blog/posts/csharp/1074/)

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

* [Операция "K"\. Ищем баги в коде IntelliJ IDEA](https://pvs-studio.ru/ru/blog/posts/java/1089/)
* [Немного о гигиене Java кода](https://pvs-studio.ru/ru/blog/posts/java/1086/)

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

* [Как заманить программиста на стенд?](https://pvs-studio.ru/ru/blog/posts/1088/)
* [Какую статью хочется прочитать в нашем блоге на тему C\+\+, C\# или Java?](https://pvs-studio.ru/ru/blog/posts/1082/)
* [Интервью с разработчиками мультитула для хакеров и пентестеров Flipper Zero](https://pvs-studio.ru/ru/blog/posts/1075/)
* [День, когда Скайнет обрёл сознание, и ещё 69 поводов собраться с коллегами\. Часть 1](https://pvs-studio.ru/ru/blog/posts/1084/)
* [День, когда Скайнет обрёл сознание, и ещё 69 поводов собраться с коллегами\. Часть 2](https://pvs-studio.ru/ru/blog/posts/1085/)

**Доклады**

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

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

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

<https://www.youtube.com/watch?v=dNTbIc6UdLw>




> Хотите проверить свой проект с помощью PVS\\\-Studio? Начните с \[этой страницы\]\(https://pvs\-studio\.ru/ru/pvs\-studio/try\-free/\)\\\.



А ещё у нас появилась рассылка с IT\-ивентами для разработчиков\! На неё и другие рассылки вы можете подписаться по [ссылке](https://pvs-studio.ru/ru/subscribe/)\.