﻿# PVS\-Studio 7\.14: межмодульный анализ в С\+\+ и плагин для JetBrains CLion

Помимо увеличения количества диагностик с каждым новым релизом анализатор PVS\-Studio развивается и в инфраструктурном плане\. В данном случае это плагин для среды разработки JetBrains CLion, межмодульный анализ С\+\+ проектов, ускорение работы ядра C\# анализатора\.

![0854_Release_714_ru/image1.png](https://import.viva64.com/docx/blog/0854_Release_714_ru/image1.png)

## Интеграция с JetBrains CLion

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

PVS\-Studio теперь [можно удобно использовать](https://pvs-studio.ru/ru/docs/manual/0052/) в среде разработки JetBrains CLion с помощью плагина для данной IDE\. Подробнее о том, с чем мы столкнулись при разработке CLion плагина, можно [почитать](https://pvs-studio.ru/ru/blog/posts/cpp/0849/) в нашем блоге\. А [здесь можно посмотреть](https://plugins.jetbrains.com/author/4dada187-7d0c-4ab6-8eb1-301a0ab2be3a) на все IDE от JetBrains, работу с которыми уже поддерживает PVS\-Studio\.

Поскольку это первый релиз плагина для CLion, то повышена вероятность, что вы натолкнётесь на какие\-то неудобства в использовании или ошибки\. В этом случае просим не стесняться и сразу [написать нам](https://pvs-studio.ru/ru/about-feedback/)\. Мы постараемся помочь, подсказать или исправить недоработки\. Заранее спасибо\.

## Межмодульный анализ проектов на языке C и C\+\+

В С\+\+ анализатор PVS\-Studio добавлена поддержка межмодульного анализа\. В этом режиме анализатор при разборе кода учитывает результаты вызовов методов, объявленных в других единицах трансляции\. Межмодульный анализ также есть в C\# \(на уровне проектов\) и Java \(на уровне пакетов\) анализаторах PVS\-Studio\. В С\+\+ анализаторе данный режим не активирован по умолчанию, т\.к\. он может замедлять скорость анализа\. В нашем блоге можно [почитать подробнее](https://pvs-studio.ru/ru/blog/posts/cpp/0851/) о его использовании и особенностях его реализации\.

## Увеличение скорости работы

Скорость анализа в C\# анализаторе PVS\-Studio была увеличена до 2 раз при анализе крупных \(более 10 000 исходных файлов\) проектов\. Также C\# анализатор теперь значительно эффективнее использует многоядерные процессоры\. В нашем блоге мы поделились методиками, которые мы использовали для ускорения работы C\# анализатора и которые могут подойти для других классов \.NET приложений:

1. [Оптимизация \.NET приложения: как простые правки позволили ускорить PVS\-Studio и уменьшить потребление памяти на 70%](https://pvs-studio.ru/ru/blog/posts/csharp/0836/)\.
1. [Оптимизация \.NET приложений: большой результат маленьких правок](https://pvs-studio.ru/ru/blog/posts/csharp/0852/)\.

## 29 новых диагностик

Как видно из списка, приведённого ниже, большинство реализуемых сейчас диагностик предназначено для покрытия стандарта MISRA C\. Мы сосредоточились на его поддержке, и сейчас [покрытие стандарта](https://pvs-studio.ru/ru/pvs-studio/sast/misra/) составляет 60%\. В ближайшее время мы планируем увеличить поддержку как минимум до 80%, а также реализовать поддержку стандарта проверки соответствия кода MISRA C Compliance\.

Помимо этого, мы продолжаем развивать возможности анализатора в выявлении [потенциальных уязвимостей](https://pvs-studio.ru/ru/blog/terms/6441/)\. Теперь PVS\-Studio [обеспечивает покрытие](https://pvs-studio.ru/ru/pvs-studio/sast/owasptopten/) 6 из 10 категорий в OWASP Top 10 — списке наиболее распространённых и опасных угроз защищённости Web\-приложений\. В этом релизе мы добавили в анализатор диагностики для категорий A5 Broken Access Control, A7 Cross\-Site Scripting \(XSS\) и A8 Insecure Deserialization\. В будущих релизах в этом году мы планируем увеличить покрытие до 9 категорий\.

* [V2015](https://pvs-studio.ru/ru/docs/warnings/v2015/)\. An identifier declared in an inner scope should not hide an identifier in an outer scope\.
* [V2016](https://pvs-studio.ru/ru/docs/warnings/v2016/)\. Consider inspecting the function call\. The function was annotated as dangerous\.
* [V2584](https://pvs-studio.ru/ru/docs/warnings/v2584/)\. MISRA\. Expression used in condition should have essential Boolean type\.
* [V2585](https://pvs-studio.ru/ru/docs/warnings/v2585/)\. MISRA\. Casts between a void pointer and an arithmetic type should not be performed\.
* [V2586](https://pvs-studio.ru/ru/docs/warnings/v2586/)\. MISRA\. Flexible array members should not be declared\.
* [V2587](https://pvs-studio.ru/ru/docs/warnings/v2587/)\. MISRA\. The '//' and '/\*' character sequences should not appear within comments\.
* [V2588](https://pvs-studio.ru/ru/docs/warnings/v2588/)\. MISRA\. All memory or resources allocated dynamically should be explicitly released\.
* [V2589](https://pvs-studio.ru/ru/docs/warnings/v2589/)\. MISRA\. Casts between a pointer and a non\-integer arithmetic type should not be performed\.
* [V2590](https://pvs-studio.ru/ru/docs/warnings/v2590/)\. MISRA\. Conversions should not be performed between pointer to function and any other type\.
* [V2591](https://pvs-studio.ru/ru/docs/warnings/v2591/)\. MISRA\. Bit fields should only be declared with explicitly signed or unsigned integer type\.
* [V2592](https://pvs-studio.ru/ru/docs/warnings/v2592/)\. MISRA\. An identifier declared in an inner scope should not hide an identifier in an outer scope\.
* [V2593](https://pvs-studio.ru/ru/docs/warnings/v2593/)\. MISRA\. Single\-bit bit fields should not be declared as signed type\.
* [V2594](https://pvs-studio.ru/ru/docs/warnings/v2594/)\. MISRA\. Controlling expressions should not be invariant\.
* [V2595](https://pvs-studio.ru/ru/docs/warnings/v2595/)\. MISRA\. Array size should be specified explicitly when array declaration uses designated initialization\.
* [V2596](https://pvs-studio.ru/ru/docs/warnings/v2596/)\. MISRA\. The value of a composite expression should not be assigned to an object with wider essential type\.
* [V2597](https://pvs-studio.ru/ru/docs/warnings/v2597/)\. MISRA\. Cast should not convert pointer to function to any other pointer type\.
* [V2598](https://pvs-studio.ru/ru/docs/warnings/v2598/)\. MISRA\. Variable length array types are not allowed\.
* [V2599](https://pvs-studio.ru/ru/docs/warnings/v2599/)\. MISRA\. The standard signal handling functions should not be used\.
* [V2600](https://pvs-studio.ru/ru/docs/warnings/v2600/)\. MISRA\. The standard input/output functions should not be used\.
* [V2601](https://pvs-studio.ru/ru/docs/warnings/v2601/)\. MISRA\. Functions should be declared in prototype form with named parameters\.
* [V2602](https://pvs-studio.ru/ru/docs/warnings/v2602/)\. MISRA\. Octal and hexadecimal escape sequences should be terminated\.
* [V2603](https://pvs-studio.ru/ru/docs/warnings/v2603/)\. MISRA\. The 'static' keyword shall not be used between \[\] in the declaration of an array parameter\.
* [V3172](https://pvs-studio.ru/ru/docs/warnings/v3172/)\. The 'if/if\-else/for/while/foreach' statement and code block after it are not related\. Inspect the program's logic\.
* [V3552](https://pvs-studio.ru/ru/docs/warnings/v3552/)\. AUTOSAR\. Cast should not convert a pointer to a function to any other pointer type, including a pointer to function type\.
* [V3553](https://pvs-studio.ru/ru/docs/warnings/v3553/)\. AUTOSAR\. The standard signal handling functions should not be used\.
* [V3554](https://pvs-studio.ru/ru/docs/warnings/v3554/)\. AUTOSAR\. The standard input/output functions should not be used\.
* [V5609](https://pvs-studio.ru/ru/docs/warnings/v5609/)\. OWASP\. Possible path traversal vulnerability\. Potentially tainted data is used as a path\.
* [V5610](https://pvs-studio.ru/ru/docs/warnings/v5610/)\. OWASP\. Possible XSS vulnerability\. Potentially tainted data might be used to execute a malicious script\.
* [V5611](https://pvs-studio.ru/ru/docs/warnings/v5611/)\. OWASP\. Potential insecure deserialization vulnerability\. Potentially tainted data is used to create an object using deserialization\.

## Прочее

В [плагин PVS\-Studio для SonarQube](https://pvs-studio.ru/ru/docs/manual/0037/) добавлена поддержка версии SonarQube 8\.9 LTS\.

В C\+\+ анализаторе PVS\-Studio теперь можно отключать диагностические правила для заданного диапазона строк в исходном файле\. См\. раздел "Включение и выключение определенных диагностик для блока кода" в главе документации, касающейся [подавления ложных срабатываний](https://pvs-studio.ru/ru/docs/manual/0017/)\.

Один из наших пользователей написал заметку об опыте интеграции анализатора PVS\-Studio с uVision Keil\. "Из коробки" такая возможность не предоставляется, но если хочется, то всё можно организовать :\)\. История получилась занятной, и мы рекомендуем познакомиться с ней даже тем, кто не использует uVision Keil: [Интеграция PVS\-Studio в uVision Keil](https://pvs-studio.ru/ru/blog/posts/cpp/0847/)\. Цитата из статьи:

> Так продолжалось до тех пор, пока однажды я не потратил 3 дня на отладку очень неприятного бага, который отличался совершенно дикими проявлениями в случайные моменты времени\. Баг оказался банальным чтением по нулевому указателю \(которое на микроконтроллерах зачастую не приводит ни к каким мгновенным ошибкам типа Access Violation\)\. Быстренько убедившись, что PVS\-Studio находит этот баг, я понял, что хватит это терпеть\! – и решил\-таки заняться интеграцией с Keil'ом\.

## Некоторые статьи, опубликованные с момента предыдущего релиза

1. [Неожиданная статья про нашего единорога: кто такой маскот PVS\-Studio?](https://pvs-studio.ru/ru/blog/posts/0843/)
1. [Красивая ошибка в реализации функции конкатенации строк](https://pvs-studio.ru/ru/blog/posts/cpp/0845/)\.
1. [Подводные камни при работе с enum в C\#](https://pvs-studio.ru/ru/blog/posts/csharp/0844/)\.
1. [OWASP, уязвимости и taint анализ в PVS\-Studio C\#\. Смешать, но не взбалтывать](https://pvs-studio.ru/ru/blog/posts/csharp/0831/)\.
1. [Статический анализ защищает ваш код от бомб замедленного действия](https://pvs-studio.ru/ru/blog/posts/cpp/0848/)\.
1. [Опыт команды PVS\-Studio: повышение производительности C\+\+ анализатора на Windows при переходе на Clang](https://pvs-studio.ru/ru/blog/posts/cpp/0830/)