Pvs studio: Download and evaluate PVS-Studio 7.09
Как использовать PVS-Studio бесплатно
Мы хотим помочь миру программного обеспечения лучше познакомиться с инструментами статического анализа кода и повысить качество программного обеспечения. Мы предоставляем возможность бесплатного использования анализатора PVS-Studio студентам в учебных целях, индивидуальным разработчикам и коллективам энтузиастов.
Данная статья является устаревшей, так как в ней описан только один из способов бесплатного использования PVS-Studio. Со временем мы предоставили и другие варианты бесплатного лицензирования, например, для открытых проектов. Предлагаем познакомиться с более новой версией статьи: «Бесплатные варианты лицензирования PVS-Studio».
Введение
Клиентами анализатора PVS-Studio являются отделы разработчиков различных компаний. Мы бы хотели, чтобы нашими клиентами были и индивидуальные разработчики. К сожалению, у нас ничего не получилось с экспериментальным продуктом CppCat. Мы не знаем, как построить успешный бизнес в сфере статического анализа кода, продавая персональные лицензии. Поэтому сейчас продукт PVS-Studio позиционируется исключительно как B2B решение.
Думаю, что наш провал с CppCat был предопределён. Мир диктует свои законы и, например, тот же Coverity ориентирован на корпоративные лицензии. Однако это не значит, что нужно исключать другие варианты взаимодействия с миром.
Мы долго думали, как помочь маленьким командам разработчиков или как распространять академические лицензии. На первый взгляд кажется, что самый простой путь — дарить лицензии тем, кто развивает бесплатное программное обеспечение. К сожалению, это решение не кажется нам правильным.
Стоит пояснить нашу позицию. Впрочем, если вам не терпится, вы можете сразу перейти к разделу «Бесплатная лицензия PVS-Studio». Если же читателю интересно узнать подробности, то предлагаю продолжить чтение.
Размышления
Представим индивидуального разработчика, разрабатывающего и продающего, например, какую-то игру. Его код закрыт и используется в коммерческих целях. Тем не менее, мы рады помочь ему познакомиться с методологией статического анализа кода и готовы подарить ему лицензию. Это рекламный шаг, который со временем может окупиться. Сейчас он один, но кто знает, что произойдёт через 5 лет.
С другой стороны, возьмем команду из 50 человек, работающих в крупной компании и занимающихся созданием открытого бесплатного проекта. Сидят 50 человек в офисе, едят печенье, получают зарплату и при этом позиционируют себя как идеалисты в плане развития свободного программного обеспечения. Да, продукт бесплатен, но компания извлекает из его существования значительную прибыль косвенными методами. Просто по ряду причин компании удобно, чтобы проект был открытым и бесплатным. Нам кажется вполне честным, что такая организация должна приобрести платную лицензию для использования анализатора.
Как видите, критерий бесплатности программы или открытости кода нам не подходит для принятия решения. Хочется разделить проекты, разрабатываемые в компании, и проекты маленьких коллективов энтузиастов. Можно сделать это исключительно лицензионным соглашением, но в таком случае сложно провести границу между разными типами проектов. Вдобавок, это мало поможет нам с точки зрения рекламы. Давайте будем честны: компании предоставляют бесплатные лицензии ради рекламы. В этом мы не хуже и не лучше других.
Решение было найдено интуитивно. Что отличает корпоративные проекты от проектов энтузиастов? В корпоративных проектах меньше свободы и больше бюрократии. Вряд ли руководство компании Microsoft будет радо, если разработчик в коде Microsoft Office напишет, что это его персональный проект. Этим надо воспользоваться и предлагать вносить в код правки, в которых упоминается PVS-Studio. Заодно код открытых проектов будет рекламировать PVS-Studio.
Бесплатная лицензия PVS-Studio
Вам нужно выполнить два шага, чтобы начать бесплатно использовать статический анализатор PVS-Studio.
Шаг 1
Если вы используете PVS-Studio как плагин к Visual Studio или используете утилиту Standalone, то введите следующий лицензионный ключ:
Name: PVS-Studio Free
Key: FREE-FREE-FREE-FREE
Если Вы используете PVS-Studio for Linux, то сразу переходите ко второму шагу, файл с лицензией вам не понадобится.
Шаг 2
Внесите правки во все компилируемые файлы вашего проекта. Имеются в виду файлы с расширениями c, cc, cpp, cs и так далее. Заголовочные h-файлы менять не требуется.
Вы должны вписать в начало каждого файла две строки с комментарием. Мы предоставляем на выбор несколько вариантов. Это своего рода плата за возможность бесплатного использования анализатора PVS-Studio.
Комментарии для студентов (академическая лицензия):
// This is a personal academic project. Dear PVS-Studio, please check it.
// PVS-Studio Static Code Analyzer for C, C++, C#, and Java: http://www.viva64.com
Комментарии для открытых бесплатных проектов:
// This is an open source non-commercial project. Dear PVS-Studio, please check it.
// PVS-Studio Static Code Analyzer for C, C++, C#, and Java: http://www.viva64.com
Комментарии для индивидуальных разработчиков:
// This is an independent project of an individual developer. Dear PVS-Studio, please check it.
// PVS-Studio Static Code Analyzer for C, C++, C#, and Java: http://www.viva64.com
Конечно, предложенные варианты подходят далеко не всем. В этом и состоит их смысл. Если ни один из предложенных вариантов вам не подходит, то предлагаем обсудить с нами вопрос покупки лицензии.
Примечание. Помимо описанного здесь способа бесплатного использования анализатора, вы можете по-прежнему скачивать с сайта демонстрационную версию анализатора для ознакомления. Если вы хотите на время снять ограничения демонстрационной версии, то просим написать нам.
Примечание 2. Существуют и другие варианты бесплатного лицензирования. Например, существует возможность бесплатного использования PVS-Studio для тех, кто участвует в развитии открытых проектов.
Автоматизация
Если в вашем проекте много файлов, то вы можете воспользоваться вспомогательной утилитой. Вы должны будете указать ей какой комментарий вставлять и каталог с кодом. Затем утилита рекурсивно обойдет все файлы в папке и вложенных папках, добавляя в файлы с исходным кодом соответствующие комментарии. Скачать утилиту (вместе с исходным кодом) можно здесь: how-to-use-pvs-studio-free.
Заключение
Некоторые разработчики могут сказать, что не хотят видеть в начале файла две строчки с комментарием, не относящимся к сути проекта. Это их право, и они могут просто не использовать анализатор. Или они могут приобрести коммерческую лицензию и использовать её без ограничений. Мы рассматриваем наличие этих комментариев, как благодарность за предоставленную лицензию и, заодно, как дополнительную рекламу нашего продукта. Я думаю, это хороший, честный обмен.
Заодно решается вопрос отделения корпоративных проектов от частных инициатив. Если проект делают энтузиасты, они в праве делать с кодом всё, что им хочется, в том числе и добавлять такие комментарии. Если нет, значит за проектом стоит некая организация, от которой мы хотим получить вознаграждение в виде приобретения лицензии.
Надеемся наше предложение и позиция понятны. Если у вас остаются вопросы, то просим написать нам.
Чтобы убедить ваших коллег начать использовать анализатор кода PVS-Studio, предлагаем познакомить их со следующими разделами нашего сайта:
Спасибо за внимание. Давайте вместе сделаем программы надежнее и безопаснее.
Дополнение
Возникло очень много рассуждений на тему того, допустимо ли добавлять и удалять комментарии в исходный код, чтобы бесплатно использовать анализатор. Мы считаем такой приём неприемлемым, так как он по факту является способом обхода ограничения, наложенного нами на бесплатную лицензию. Поэтому мы решили добавить следующий раздел в лицензионное соглашение:
Вы имеете право использовать PVS-Studio бесплатно, добавив в исходный код своего проекта комментарии специального вида. Какие именно комментарии следует добавлять и как автоматизировать этот процесс описано в статье «Как использовать PVS-Studio бесплатно».
Отметим, что данный режим не предназначен для оценки возможностей анализатора. Чтобы познакомиться с анализатором, вы должны использовать демонстрационную версию или запросить у нас временный лицензионный ключ.
Вам следует вставлять комментарии, когда вы уже решили, что будете использовать анализатор на регулярной основе. Вы можете удалить впоследствии эти комментарии, но можете сделать это только один раз.
Не допускается многократное добавление комментариев в исходный код с последующим их удалением. Также не допускается многократное добавление комментариев с последующим откатом содержимого исходных файлов с помощью системы контроля версий. Такие действия направлены на обход условия, что исходный код должен содержать комментарии, и являются нарушением данного соглашения об использовании анализатора.
Дополнение: Поддержка
Постепенно бесплатный вариант лицензирования набирает популярность, и наша команда всё больше времени тратит, оказывая поддержку бесплатным пользователем. При этом многие вопросы повторяются, поэтому мы считаем целесообразным оказывать в дальнейшем поддержку, отвечая на вопросы на сайте StackOverflow.
Общение через сайт StackOverflow сократит объем переписки и позволит нам часто отвечать на вопросы, просто давая ссылку на уже обсужденный вопрос по данной теме. Более того, многие вопросы просто не будут заданы, так как пользователи смогут найти готовые ответы на StackOverflow самостоятельно, и им не потребуется ожидать нашего ответа в почте.
Итак, всех кто использует бесплатную версию PVS-Studio просим задавать нам вопросы на сайте StackOverflow. Чтобы ваш вопрос не остался незамеченным, используйте тег «pvs-studio».
Наши платные клиенты по-прежнему будут получать поддержку приватно через почту. Впрочем, если кто-то из клиентов будет задавать вопросы через StackOverflow, мы не возражаем.
См. также статью «Поддержка пользователей, использующих бесплатную лицензию PVS-Studio, теперь осуществляется на сайте StackOverflow».
Хотим обратить внимание, что StackOverflow не является багтрекером. Поэтому просим не создавать там топики с такими темами, как «У меня упал плагин PVS-Studio, вот stack-dump» или «Вот это явное ложное срабатывание». Подобные посты противоречат духу сайта StackOverflow и крайне негативно воспринимаются сообществом. Поэтому просим писать туда именно вопросы, связанные с работой анализатора. Чтобы проинформировать нас о явной ошибке, просим по-прежнему писать нам в поддержку.
Использование статического анализатора PVS-Studio при разработке для встраиваемых систем на C и C++
Из этой статьи вы узнаете, как запустить проверку embedded-проекта и как работать с отчетом анализатора. Анализатор PVS-Studio поддерживает ряд компиляторов для встраиваемых систем. В текущей версии возможна проверка проектов при сборке одним из следующих компиляторов под Window, Linux и macOS:
- IAR Embedded Workbench
- Keil Embedded Development Tools for Arm
- TI ARM Code Generation Tools
- GNU Embedded Toolchain
Установка
Процедура установки зависит от операционной системы, под которой вы ведете разработку. Под Linux вы можете установить анализатор из репозитория или из установочного пакета.
Пример для систем на основе Debian:
wget -q -O - https://files.viva64.com/etc/pubkey.txt | sudo apt-key add - sudo wget -O /etc/apt/sources.list.d/viva64.list \ https://files.viva64.com/etc/viva64.list sudo apt update sudo apt install pvs-studio
или
sudo gdebi pvs-studio-VERSION.deb
Под macOS установку и обновление можно произвести из Homebrew:
brew install viva64/pvs-studio/pvs-studio brew upgrade pvs-studio
Второй вариант – установить из dmg пакета или вручную распаковать из архива.
Под Windows установка производится с помощью инсталлятора:
Проверка проектов
Проверку проектов для embedded систем можно производить теми же способами, что и в случае с разработкой под Windows, Linux и macOS.
Имейте в виду, что так как для сборки под embedded используется кросс-компиляция, и имя компилятора может быть нестандартным, вам может понадобиться указать его при анализе проекта. Для этого используется параметр командной строки –compiler или –c:
pvs-studio-analyzer analyze -c MyCompiler
Применять этот параметр следует в том случае, когда анализатор не может определить тип используемого компилятора, то есть когда выдается ошибка «No compilation units found».
При кросс-компиляции, так как целевая платформа отличается от той, под которой происходит сборка, вместе с компилятором вам может потребоваться указать целевую платформу с помощью параметра —platform, а также тип препроцессора (—preprocessor).
Поддерживаемые платформы: win32, x64, linux32, linux64, macos, arm.
Поддерживаемые препроцессоры: gcc, clang, keil.
По умолчанию под Linux выбирается платформа linux64 и препроцессор gcc.
Если вы используете Windows, проверить проект можно в режиме мониторинга компиляции. Для этого нужно запустить утилиту «C and C++ Compiler Monitoring UI«, которая устанавливается вместе с анализатором. Чтобы запустить мониторинг, зайдите в меню Tools и нажмите Analyze Your Files…Откроется диалог:
Нажмите на кнопку «Start Monitoring» и запустите сборку. После ее завершения нажмите на кнопку «Stop Monitoring» в диалоговом окне в правом нижнем углу экрана:
Результат проверки можно посмотреть в основном окне утилиты «C and C++ Compiler Monitoring UI«.
Также анализ можно запустить из командной строки. Для этого используется утилита CLMonitor. Запустить мониторинг можно командой:
CLMonitor.exe monitor
После завершения сборки следует запустить утилиту в режиме анализа:
CLMonitor.exe analyze -l "<path>\out.plog"
Анализатор проверит проект и сохранит результаты в файл, указанный в параметре -l.
Работа с отчетами
Чтобы посмотреть отчет под Linux, нужно сконвертировать полученный в результате работы анализатора файл в один из поддерживаемых форматов с помощью утилиты plog-converter. Получить отчет в формате HTML с возможностью просмотра исходного кода можно следующей командой:
plog-converter -a GA:1,2 -t fullhtml /path/project.log -o /path/report_dir
Под Windows также существует утилита PlogConverter, которая позволяет конвертировать файлы отчетов аналогичным образом:
PlogConverter.exe <path>\out.plog --renderTypes= FullHtml --analyzer=GA:1,2
или
PlogConverter.exe D:\Projct\out.plog -t FullHtml -a GA:1,2
Также отчет в формате plog можно посмотреть с помощью утилиты «C and C++ Compiler Monitoring UI» через меню File->Open PVS-Studio Log…
Пример:
В случае необходимости из этой утилиты можно экспортировать отчет в один из поддерживаемых форматов через меню File.
Стандарт MISRA
Использования правил MISRA при проверке проектов, не предназначенных для embedded, чаще всего неоправданно. Это связано со спецификой стандарта. В большинстве случаев, если код изначально не писался с расчетом на соответствие MISRA, при проверке будет много ложных и бесполезных предупреждений. Поэтому правила MISRA по умолчанию отключены.
Чтобы включить анализ MISRA под Linux, нужно запустить анализ с ключом -a и передать числовой параметр, который задаст необходимый режим. Этот параметр представляет собой комбинацию битовых полей:
-a [MODE], --analysis-mode [MODE] MODE defines the type of warnings: 1 - 64-bit errors; 2 - reserved; 4 - General Analysis; 8 - Micro-optimizations; 16 - Customers Specific Requests; 32 - MISRA. Modes can be combined by adding the values Default: 4
Пример запуска (включены диагностики GA и MISRA):
pvs-studio-analyzer analyze -a 36 -o /path/report.log
При использовании plog-converter также нужно указать, что диагностики MISRA должны попасть в отчет:
plog-converter -a MISRA:1,2,3 -m misra ....
Под Windows можно использовать диалог настроек утилиты «C and C++ Compiler Monitoring UI«:
Бесплатные варианты лицензирования PVS-Studio / Блог компании PVS-Studio / Хабр
Существует несколько вариантов бесплатного лицензирования статического анализатора кода PVS-Studio, предназначенного для поиска ошибок и потенциальных уязвимостей. Бесплатной лицензией могут воспользоваться открытые проекты, маленькие закрытые проекты, публичные специалисты по безопасности и обладатели статуса Microsoft MVP. В статье кратко рассматривается каждый из этих вариантов.
PVS-Studio — это инструмент для выявления ошибок и потенциальных уязвимостей в исходном коде программ, написанных на языках С, C++, C# и Java. Работает в среде Windows, Linux и macOS.
PVS-Studio является платным B2B решением и используется большим количеством команд в различных компаниях. Список клиентов.
Рассмотрим варианты, когда анализатор PVS-Studio может использоваться бесплатно.
Открытые проекты
PVS-Studio может бесплатно использоваться разработчиками, участвующими в развитии открытых проектов, размещённых на GitHub, GitLab или Bitbucket. Всем желающим мы выдаём бесплатную лицензию сроком на 1 год. Чтобы получить лицензию, необходимо:
- Перейти на страницу: Бесплатная лицензия на PVS-Studio для Open Source
- Ввести имя и e-mail, на который будет прислан лицензионный ключ;
- Ввести ссылку на свой GitHub/GitLab/Bitbucket профайл;
- Отправить запрос на бесплатную лицензию.
По истечении срока действия лицензии, вы сможете тем же самым способом получить новый лицензионный ключ.
Ключ является индивидуальным и может быть использован только для проверки открытых проектов, опубликованных на GitHub/GitLab/Bitbucket. Бесплатная лицензия не распространяется на зеркала проектов.
Дополнительные детали этого типа бесплатного лицензирования описаны в статье «Бесплатный PVS-Studio для тех, кто развивает открытые проекты».
Закрытые проекты
Существует много небольших закрытых проектов, развиваемых энтузиастами. Например, это игры, создаваемые инди-разработчииками, или проекты академической направленности.
Для этих проектов может подойти вариант бесплатного лицензирования, основанный на добавлении в код комментариев специального вида. Идея в том, что такие комментарии неприемлемы в больших корпоративных проектах, но программисты вполне могут добавлять их в свои индивидуальные проекты.
Вот эти комментарии:
Комментарии для студентов (академическая лицензия):
// This is a personal academic project. Dear PVS-Studio, please check it.
// PVS-Studio Static Code Analyzer for C, C++, C#, and Java: http://www.viva64.com
Комментарии для индивидуальных разработчиков:
// This is an independent project of an individual developer. Dear PVS-Studio, please check it.
// PVS-Studio Static Code Analyzer for C, C++, C#, and Java: http://www.viva64.com
Кстати, на самом деле данный вид бесплатной лицензии можно использовать не только в закрытых, но и в открытых проектах.
Комментарии для открытых бесплатных проектов:
// This is an open source non-commercial project. Dear PVS-Studio, please check it.
// PVS-Studio Static Code Analyzer for C, C++, C#, and Java: http://www.viva64.com
Чтобы начать бесплатно использовать статический анализатор PVS-Studio, вы должны выполнить два следующих шага:
Шаг 1. Если вы используете PVS-Studio как плагин к Visual Studio или используете утилиту Standalone, то введите следующий лицензионный ключ:
Name: PVS-Studio Free
Key: FREE-FREE-FREE-FREE
Если Вы используете PVS-Studio for Linux, то сразу переходите ко второму шагу, файл с лицензией вам не понадобится.
Шаг 2. Внесите правки во все компилируемые файлы вашего проекта. Имеются в виду файлы с расширениями c, cc, cpp, cs, java и так далее. Заголовочные h-файлы менять не требуется.
Вы должны вписать в начало каждого файла две строки с комментарием. Если в вашем проекте много файлов, то вы можете воспользоваться вспомогательной утилитой. Вы должны будете указать ей, какой комментарий вставлять, и каталог с кодом. Затем утилита рекурсивно обойдет все файлы в папке и вложенных папках, добавляя в файлы с исходным кодом соответствующие комментарии. Скачать утилиту (вместе с исходным кодом) можно здесь: how-to-use-pvs-studio-free.
Дополнительные детали этого типа бесплатного лицензирования описаны в статье «Как использовать PVS-Studio бесплатно». Просим обязательно ознакомиться с этой статьёй, если вы решили выбрать рассмотренный вариант бесплатного использования.
Эксперты безопасности
Публичные эксперты в области безопасности, занимающиеся поиском уязвимостей, могут написать нам и получить бесплатную лицензию для анализатора PVS-Studio.
Желающие получить лицензию и поддержку, должны будут подтвердить, что они занимаются вопросами безопасности и ведут публичную деятельность, например, пишут статьи. Эти моменты будут уточнены в ходе переписки.
Подробнее: «Предоставляем анализатор PVS-Studio экспертам безопасности».
Microsoft MVP
Первыми, кому мы предложили бесплатные лицензии, стали Microsoft MVP. Ещё в 2011 году появилась публикация «Бесплатные лицензии на PVS-Studio для MVP». Мало кто уже помнит про это, но эта акция продолжает действовать.
Если вы являетесь Microsoft MVP, то напишите нам и укажите свой MVP-профиль на сайте Microsoft. Мы вышлем вам лицензию, которая позволяет использовать PVS-Studio в течение 12 месяцев без каких-либо ограничений, в том числе и для коммерческих целей. Затем лицензию можно будет продлить.
Заключение
Следует напомнить и про основной сценарий.
- На сайте доступна пробная версия анализатора. Страница, где можно скачать PVS-Studio и получить триальный ключ.
- Компания может приобрести лицензию и получать быструю качественную поддержку. Ваши программисты будут напрямую общаться с программистами команды PVS-Studio. Никаких посредников, сотрудников отдела поддержки и так далее. Только прямое общение с программистами и мной (техническим директором). Пример.
Спасибо за внимание и желаем предотвратить с помощью PVS-Studio как можно больше ошибок в коде. Только не забывайте, что суть методологии статического анализа кода в регулярном использовании, а не в разовых проверках. Удачи!
Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Andrey Karpov. Ways to Get a Free PVS-Studio License.
Бесплатный PVS-Studio для тех, кто развивает открытые проекты
В канун празднования нового 2019 года команда PVS-Studio решила сделать приятный подарок всем контрибьюторам open-source проектов, хостящихся на GitHub, GitLab или Bitbucket. Им предоставляется возможность бесплатного использования статического анализатора PVS-Studio для развития открытых проектов.
Мы помогаем делать код открытого программного обеспечения более качественным и надёжным. Хотя, благодаря нашим публикациям, в открытых проектах было исправлено более 10000 ошибок, этого явно недостаточно. Наша команда физически не способна регулярно проверять тысячи открытых проектов. Поэтому в 2016 году мы предложили бесплатный вариант лицензирования PVS-Studio. Единственное условие — наличие в коде комментариев специального вида. Подробнее про этот вид лицензирования рассказано в статье «Как использовать PVS-Studio бесплатно».
Идя навстречу пожеланиям, мы решили предоставить возможность бесплатного использования PVS-Studio всем, кто участвует в развитии открытых проектов, размещённых на GitHub, GitLab или Bitbucket. Авторам этих проектов никаких комментариев добавлять не потребуется.
Всем желающим мы выдаём бесплатную лицензию сроком на 1 год. Чтобы получить лицензию, необходимо:
- Перейти на страницу: https://www.viva64.com/ru/open-source-license/
- Ввести имя и e-mail, на который будет прислан лицензионный ключ;
- Ввести ссылку на свой GitHub/GitLab/Bitbucket профайл;
- Отправить запрос на бесплатную лицензию.
По истечении срока действия лицензии, вы сможете тем же самым способом получить новый лицензионный ключ.
Ключ является индивидуальным и может быть использован только для проверки открытых проектов, опубликованных на GitHub/GitLab/Bitbucket. Бесплатная лицензия не распространяется на зеркала проектов.
Старый вариант бесплатного использования анализатора при добавлении в код комментариев остаётся в силе. У этого режима есть свои преимущества. Например, он может использоваться студентами для проверки своих проектов без необходимости выкладывать их на GitHub/GitLab/Bitbucket. Более того, предыдущий вариант позволяет использовать анализатор вообще в закрытых проектах.
Условия
Поддержка бесплатных пользователей осуществляется посредством ответов на сайте StackOverflow. Более подробно это условие описано в статье «Как использовать PVS-Studio бесплатно» (см. главу «Дополнение: Поддержка»). Хотим обратить внимание, что StackOverflow не является багтрекером. Давайте обсуждать там вопросы, связанные именно с работой анализатора, режимами его работы и так далее. Чтобы проинформировать нас о явном баге, просим по-прежнему писать нам в поддержку.
Акция предоставления бесплатных лицензий является бессрочной. Однако если мы почувствуем, что что-то пошло не так, мы оставляем за собой право изменить её условия или прекратить её. Также мы оставляем за собой право отозвать конкретный ключ без объяснения причины.
Как уже было сказано ранее, возможность использования бесплатной лицензии не распространяется на зеркала проектов, например, на Clang, Chromium, KDE и так далее. Поддержка разработчиков подобных проектов потребует от нашей команды значительной работы и будет справедливо, если компании, где трудоустроены эти разработчики, приобретут платную лицензию :).
Дополнительные ссылки:
начало дружбы / Блог компании PVS-Studio / Хабр
Некоторое время назад было принято решение сделать статический анализатор кода PVS-Studio бесплатным для отдельных категорий разработчиков: студентов в учебных целях, индивидуальных разработчиков и коллективов энтузиастов. Постепенно количество бесплатных пользователей увеличивается, но мы решили напомнить о такой возможности, так как многие разработчики могли пропустить соответствующую новость.
Итак, всё началось со статьи: Как использовать PVS-Studio бесплатно.
Первая реакции пользователей была противоречива. С одной стороны, индивидуальные разработчики были рады использовать анализатор бесплатно, но с другой стороны мы столкнулись с недовольством по поводу требуемых комментариев в коде. Изначально не было тайной, что предложенные комментарии подходят далеко не всем, собственно, в этом и есть их смысл. Как говорилось ранее в новостных заметках, если ни один из предложенных вариантов бесплатного использования вам не подходит, то предлагаем обсудить с нами вопрос покупки лицензии.
Теперь мы решили понаблюдать, как будет распространяться бесплатная версия PVS-Studio среди GitHub-сообщества. Для этого мы обратились к разработчикам с GitHub, которые уже используют бесплатную версию нашего анализатора. Возможно, почитав несколько отзывов, некоторые разработчики также захотят начать использовать анализатор при разработке своих проектов.
Как видно на картинке, пока на GitHub не так много людей, использующих PVS-Studio. Но постепенно их количество растёт. Давайте послушаем мнения некоторых из этих пользователей.
Что про нас говорят
Ниже будут приведены некоторые отзывы разработчиков с GitHub, которые используют бесплатную версию PVS-Studio.
Evgenii Lepikhin (проект TrafficProcessor):
Я на c++ пишу достаточно мало и ещё меньше использую анализаторы кода (под Linux с ними вообще тяжело). Ваш по сравнению с lint легко взлетел, без особых проблем был прикручен к IDE. По качеству работы самого анализатора мало что могу сказать, опыта мало. Но он работает, не глючит, а больше вроде бы ничего и не надо.
Alexey Schadin (проект NppKate):
В целом я доволен от работы статического анализатора, большое спасибо команде PVS-Studio за их работу. Но к сожалению мой проект очень маленький, да и до этого я использовал анализ, который делает MS Visual Stiduo 2015 CE, поэтому список потенциально проблематичных мест был очень короткий (менее 10 позиций). Интерфейс мне понравился, по описанию предупреждения сразу понятно, как исправить проблему. Спасибо, что позволяете сделать OpenSource продукты лучше! В других OpenSource проектах я тоже буду использовать ваш анализатор, если политика компании не изменится.
Здесь мы можем уверить Алексея и остальных разработчиков, что политика компании в ближайшее время не изменится. Бесплатная версия PVS-Studio — это долгосрочный проект.
Сергей Жейгуров (проект ToolsGenGkode):
Я очень доволен вашей программой, особенно возможностью пользоваться без необходимости покупки, т.к. программирование на C# это лишь хобби, то и покупка вашей программы не целесообразна, но возможность найти ошибки при моей недостаточной опытности в C#, мне очень полезна. Мне очень приятно, что ваша компания смогла предоставить возможность пользоваться вашим программным продуктом! 🙂
Alibek Omarov (проект cs16-client):
Давно слежу за PVS-Studio, участвовал в вашем бета-тесте анализатора под Linux. «Доволен, как слон». Инструмент свою работу в виде поиска каких-то контекстных ошибок и опечаток выполняет на отлично. Бесплатная лицензия очень спасла меня, поскольку я индивидуальный разработчик и более того, пока что любитель.
Алексей Лесовский (проект pgcenter):
Да, я использую PVS-Studio у себя в проекте, поскольку я не профессиональный разработчик, а больше системный администратор, поэтому в программировании я склонен допускать очень много неявных ошибок. PVS-Studio в этом плане указывает мне на них, и я стараюсь их исправлять, опять же с помощью рекомендаций, которые размещены на вашем сайте. Мое мнение, что PVS-Studio очень полезный продукт, который позволяет устранять ошибки в коде и способствует развитию самого разработчика. Пользоваться PVS-Studio просто, настройка, анализ и «расшифровка» сообщений об ошибках не составляет сложности.
Но с нашей стороны было бы нечестно рассказывать только про положительные отзывы. Мы спокойно воспринимаем конструктивную критику, поэтому хотелось бы поделиться с читателями еще одним отзывом.
Григорьев Виталий — Специалист по безопасности сетевых приложений пишет:
Я уже несколько лет пользуюсь Вашим статическим анализатором, и очень часто писал Вам относительно найденным мною багах и неточностях.
Мне кажется, что Вы выбрали заведомо неправильный путь относительно того, как Вы предоставляете бесплатное пользование Вашим анализатором.
У Вашего подхода есть множество недостатков, например, то, что все это держится на честном слове и на лицензионном соглашении. В Российских условиях — это бесполезно.
Еще из минусов — это то, что с Вашей стороны вы никак не сможете проверить, что проект является open-source и т.д.
А также, раз Вы хотите популяризировать Ваш анализатор среди программистов, то как Вы будете привлекать иностранных программистов, если для них вся «реклама» скрыта внутри кода? Вам необходимо продвигать Ваш анализатор среди крупных проектов на Git и т.д., но крупные проекты, даже если они абсолютно свободные — они не будут вставлять что-то лишнее в свои файлы…
Советую Вам обратить внимание на то, как это делает Coverity Scan, где у них есть свой сайт для бесплатного пользования и полная интеграция с различными репозиториями… Интеграция с Travis-CI и т.д. А вдобавок к этому еще и «реклама» в виде тега в README, который видят все. Такой подход исключен всех выше перечисленных недостатков. Поэтому Covery используется почти в каждом втором проекте на Git. Хотя, я думаю, Вы уже рассматривали такой вариант, то из каких-то соображений не стали его делать. Наверно, либо из-за того, что Ваша акция — временная, либо из-за издержек на разработку нового сайта…
Еще из минусов, хочу отметить то, что Вы пишете слишком длинные и не полные мануалы по какой-либо настройке (например, интеграция в сборочную систему Cmake в Linux и т.д.). В них очень мало use-кейсов и практической составляющей. Количество различных проектов велико и все они собираются по-разному, а примеры даны буквально на 1-2 самых легких case’ов…
Если бы Вы сделали свое расширение для CLion, а не через иные подходы, это было бы очень полезно. Почти все компании, которые разрабатывают под Linux — перешли на CLion, а количество людей, которые используют «Vim и аналоги», сейчас резко сокращается… Вообще рекомендую присмотреться к продуктам JetBrains, а точнее к TeamCity и YouTrack. Эти продукты используют почти ВСЕ крупные и средние компании, и интеграция туда PVS-Studio — это очень правильная Business-модель.
Спасибо большое Виталию за такой развернутый отзыв, но все-таки некоторые моменты здесь стоит прокомментировать:
- Бесплатная версия PVS-Studio — это не временная акция, а вполне себе постоянная. Мы рады, что можем помочь разработчикам-энтузиастам использовать коммерческий продукт бесплатно.
- С Coverity мы стараемся брать пример во многом. Эта компания является для нас авторитетом. Однако, в вопросе бесплатной лицензии мы пошли несколько иным путем: дело в том, что мы хотим сделать лицензию бесплатной не только для Open-Source проектов, и в этом есть некоторое преимущество для разработчиков. Да, мы не сможем проверить разработчика на честность, но уважающие себя компании вряд ли будут использовать обманные методы, а те, кто будет — точно не наши клиенты.
- Что касается CLion. PVS-Studio для Linux появился совсем недавно, и мы сделали интеграцию анализатора через проектный файл CMake (вот как это выглядит и настраивается http://www.viva64.com/ru/m/0036/). Возможность выпуска расширения для IDE сейчас изучается.
Заключение
Хотелось бы сказать спасибо всем разработчикам, которые откликнулись и оставили нам свои отзывы. Было приятно пообщаться и получить заряд позитива от них.
В целом, мы остались довольны полученными отзывами. Несмотря на немного отрицательную реакцию в начале, разработчики прониклись идеей использования бесплатной версии PVS-Studio. Мы считаем, что это и есть начало нашей дружбы с GitHub-сообществом. Присоединяйтесь к нам. Приглашаем всех скачать и попробовать PVS-Studio на своем проекте бесплатно. Давайте дружить!
Если у Вас возникнут вопросы по установке, интеграции и использованию PVS-Studio, Вы можете связаться с нами. Мы всегда стараемся помочь разработчикам в борьбе с багами!
Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Sofya Fateeva. PVS-Studio and GitHub community: let the friendship begin
PVS-Studio — статический анализатор кода
PVS-Studio — это плагин для Microsoft Visual Studio, обеспечивающий выявления ошибок в исходном коде программ, написанных на языках С, C++ и C#.
В некотором смысле часть функционала присутствует также во всем известно плагине ReSharper (R#) — дополнение (плагин), разработанное компанией JetBrains для повышения продуктивности работы в Microsoft Visual Studio.
При всем это сравнить продукты не следует. PVS-Studio – является оптимизированным и строго заточенным для выявление ошибок в коде продуктом.
PVS-Studio выполняет статический анализ кода и генерирует отчёт, помогающий программисту находить и устранять ошибки. PVS-Studio выполняет широкий спектр проверок кода, но наиболее силён в поисках опечаток и последствий неудачного Copy-Paste и т.д.
Основная ценность статического анализа заключается в его регулярном использовании, благодаря чему многие ошибки могут быть выявлены и устранены на самых ранних этапах. Нет смысла тратить долгие часы на поиск ошибки, которую можно найти благодаря анализу кода.
Основная же ценность PVS-Studio, на мой взгляд, в том, что он не только показывает наличие ошибок, но и поясняет их причины, а также показывает возможные варианты исправления этих ошибок. Для программистов плагин PVS-Studio может рассматриваться как дополнительная база знаний.
После установки PVS-Studio он встраивается в установленные версии Microsoft Visual Studio и доступен через главное меню. Работа плагина представлена на скриншоте ниже.
Сканирование может запускаться как в ручном, так и автоматическом режиме.
Для перехода строке кода, в торой находиться ошибка достаточно кликнуть по самой ошибке, при клике по коду ошибки, будет выведена дополнительная информация об этой ошибке и варианты ее устранения..
Анализатор PVS-Studio может запускаться ночью на сервере и сообщать о подозрительных местах в новом коде. В идеале ошибки вообще могут быть обнаружены и исправлены ещё до попадания в репозиторий. PVS-Studio может автоматически запускаться сразу после компилятора на только что модифицированных файлах. Это работает и в Windows, и в Linux.
Некоторые интересные особенности PVS-Studio приведены ниже.
Особенности PVS-Studio
- Автоматический анализ отдельных файлов после их перекомпиляции.
- Удобная и простая интеграция с Visual Studio 2010-2017.
- Удобная online-справка по всем диагностикам, которая доступна и из программы, и на сайте, а также документация в .pdf одним файлом.
- Запуск из командной строки для проверки всего решения: позволяет интегрировать PVS-Studio в ночные сборки.
- Интерактивная фильтрация результатов анализа (лога) в окне PVS-Studio: по коду диагностики, по имени файла, по включению слова в текст диагностики.
- Mass Suppression – позволяет подавить все старые сообщения, чтобы анализатор выдавал 0 срабатываний. К подавленным сообщениям всегда можно вернуться позже. Возможность безболезненно внедрить PVS-Studio в существующий процесс разработки и сфокусироваться на ошибках только в новом коде.
- Статистика ошибок в Excel – можно посмотреть темпы правки ошибок, количество ошибок во времени и т.п.
- Использование относительных путей в файлах отчета для возможности переноса отчета на другую машину.
- Возможность исключить из анализа файлы по имени, папке или маске; возможность проверять файлы, модифицированные за последние N дней.
Поддерживаемые языки и компиляторы
- Windows. Visual Studio 2017 C, C++, C++/CLI, C++/CX (WinRT), C#
- Windows. Visual Studio 2015 C, C++, C++/CLI, C++/CX (WinRT), C#
- Windows. Visual Studio 2013 C, C++, C++/CLI, C++/CX (WinRT), C#
- Windows. Visual Studio 2012 C, C++, C++/CLI, C++/CX (WinRT), C#
- Windows. Visual Studio 2010 C, C++, C++/CLI, C#
- Windows. MinGW C, C++
- Windows/Linux. Clang C, C++
- Linux. GCC C, C++
Бесплатная лицензия PVS-Studio
Продукт PVS-Studio разработан фирмой ООО «СиПроВер» – это наши соотечественники из города Тулы.
Данный продукт изначально был только платным и достаточно дорогим, но в настоящее время он доступен бесплатно для академических и Open source-проектов. Для использования бесплатной версии PVS-Studio в качестве плагина к Visual Studio необходимо во первых активировать сам плагин, используя следующий лицензионный ключ:
Name: PVS-Studio Free
Key: FREE-FREE-FREE-FREE
Во вторых необходимо внести правки во все компилируемые файлы вашего проекта. Имеются в виду файлы с расширениями c, cc, cpp, cs и так далее. Заголовочные h-файлы менять не требуется.
Вы должны вписать в начало каждого файла две строки с комментарием.
Это своего рода плата за возможность бесплатного использования анализатора PVS-Studio.
Комментарии для открытых бесплатных проектов:
1 2 | // This is an open source non-commercial project. Dear PVS-Studio, please check it. // PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com |
Чтобы не делать это руками, тем более если в вашем проекте много файлов, то вы можете воспользоваться вспомогательной утилитой. Вы должны будете указать ей какой комментарий вставлять и каталог с кодом. Затем утилита рекурсивно обойдет все файлы в папке и вложенных папках, добавляя в файлы с исходным кодом соответствующие комментарии.
Скачать утилиту (вместе с исходным кодом) можно здесь.
Проект утилиты открывается в Microsoft Visual Studio, компилируется и используется для вашего проекта.
Пример использования утилиты приведен на скриншоте ниже.
После того как комментарии добавлены к исполняемым файла, плагин PVS-Studio может использоваться для статического анализа кода неограниченное число раз.
Вы также можете ознакомиться с другими статьями:
PVS-Studio, Тула — Статический анализ кода для C, C++, C# и Java / Статьи / Хабр
В наборе команд AVX-512 были представлены восемь так называемых масочных регистров [1] – с k0 [2] по k7. Они пригодны для использования с большинством операций АЛУ и позволяют выполнять операции по маске над элементами векторов с обнулением или слиянием данных в регистре-приёмнике [3], тем самым ускоряя работу кода, что в наборе команд AVX2 и более ранних версиях потребовало бы дополнительных операций слияния.
Если написанного выше недостаточно, чтобы сделать из вас последователя культа масочных регистров, процитирую отрывок из статьи на Википедии, который, я надеюсь, поможет вам окончательно во всём разобраться:
Большинство команд AVX-512 могут использовать операнд-маску, соответствующий одному из 8 масочных регистров (k0–k7). Если масочный регистр используется в качестве маски операции, регистр k0 ведёт себя иначе, чем остальные масочные регистры: в этом случае он выполняет роль жёстко закодированной константы, указывающей, что с данной операцией маска не применяется. Однако в арифметических и логических операциях и при записи значения в масочные регистры k0 ведёт себя как обычный рабочий регистр. В большинстве команд масочные регистры используются в качестве маски, определяющей, какие элементы должны записываться в выходной регистр. Поведение операнда-маски зависит от флага: если он выставлен, все невыбранные элементы будут обнулены (режим «обнуления», zero), если нет – все невыбранные элементы сохраняют прежнее состояние (режим «слияния», merge). Режим слияния даёт тот же эффект, что команды слияния (blend instructions).
В общем масочные регистры [4] – важное нововведение, но о них редко вспоминают в отличие, скажем, от регистров общего назначения (eax, rsi и прочих) или SIMD-регистров (xmm0, ymm5 и т.д.). В презентациях Intel, где приводятся размеры ресурсов микроархитектуры, масочные регистры не упоминаются:
Основные диагностические возможности PVS-Studio | Диагностика |
64-битных проблем | C, C ++: V101-V128, V201-V207, V220, V221, V301-V303 |
Проверить, что адреса в стековой памяти не покидают функцию | C, C ++: V506, V507, V558, V758 |
Арифметическое переполнение / потеря значимости | C, C ++: V636, V658, V784, V786, V1012, V1028, V1029, V1033 C #: V3040, V3041 Java: V6011, V6088 |
Индекс массива выходит за границы | C, C ++: V557, V582, V643, V781, V1038 C #: V3106 Java: V6025, V6079 |
Двойной бесплатный | C, C ++: V586, V749, V1002, V1006 |
Мертвый код | C, C ++: V606, V607 |
Микрооптимизация | C, C ++: V801-V829 |
Недоступный код | C, C ++: V551, V695, V734, V776, V779, V785 C #: V3136, V3142 Java: V6018, V6019 |
Неинициализированные переменные | C, C ++: V573, V614, V679, V730, V737, V788, V1007, V1050 C #: V3070, V3128 Java: V6036, V6050, V6052, V6090 |
Неиспользуемые переменные | C, C ++: V603, V751, V763, V1001 C #: V3061, V3065, V3077, V3117, V3137, V3143 Java: V6021, V6022, V6023 |
Незаконные побитовые операции / операции сдвига | C, C ++: V610, V629, V673, V684, V770 C #: V3134 Java: V6034, V6069 |
Неопределенное / неопределенное поведение | C, C ++: V567, V610, V611, V681, V704, V708, V726, V736, V1016, V1026, V1032, V1061 |
Некорректная обработка типов (HRESULT, BSTR, BOOL, VARIANT_BOOL, float, double) | C, C ++: V543, V544, V545, V716, V721, V724, V745, V750, V676, V767, V768, V772, V775, V1027, V1034, V1046, V1060 C #: V3111, V3121, V3148 |
Неправильное понимание логики работы функции / класса | C, C ++: V518, V530, V540, V541, V554, V575, V597, V598, V618, V630, V632, V663, V668, V698, V701, V702, V717, V718, V720, V723727, V725, , V738, V742, V743, V748, V762, V764, V780, V789, V797, V1014, V1024, V1031, V1035, V1045, V1052, V1053, V1054, V1057 C #: V3010, V3057, V3068, V3072, V3073, V3074, V3082, V3084, V3094, V3096, V3097, V3102, V3103, V3104, V3108, V3114, V3115, V3118, V3124, V3124, V3145 Java: V6009, V6010, V6016, V6026, V6029, V6049, V6055, V6058, V6064, V6068, V6081 |
Опечатки | C, C ++: V501, V503, V504, V508, V511, V516, V519, V520, V521, V525, V527, V528, V529, V532, V533, V534, V535, V536, V537, V539549, V546, , V552, V556, V559, V560, V561, V564, V568, V570, V571, V575, V577, V578, V584, V587, V588, V589, V590, V592, V600, V602, V604, V606, V607, V616, , V620, V621, V622, V625, V626, V627, V633, V637, V638, V639, V644, V646, V650, V651, V653, V654, V655, V660, V661, V662, V666, V669, V671, V672 , V682, V683, V693, V715, V722, V735, V747, V754, V756, V765, V767, V787, V791, V792, V796, V1013, V1015, V1021, V1040, V1051 C #: V3001, V3003, V3005, V3007, V3008, V3009, V3011, V3012, V3014, V3015, V3016, V3020, V3028, V3029, V3034, V3035, V3036, V3037, V3038, V3050, V3055, V3056 , V3062, V3063, V3066, V3081, V3086, V3091, V3092, V3107, V3109, V3110, V3112, V3113, V3116, V3122, V3124, V3132, V3140 Java: V6001, V6005, V6009, V6012, V6014, V6015, V6017, V6021, V6026, V6028, V6029, V6030, V6031, V6037, V6041, V6042, V6043, V6045, V6057, V6059, V6061, V6062 , V6077, V6080, V6085, V6091 |
Отсутствует виртуальный деструктор | C, C ++: V599, V689 |
Стиль кодирования не соответствует логике работы исходного кода | C, C ++: V563, V612, V628, V640, V646, V705, V1044 C #: V3018, V3033, V3043, V3067, V3069, V3138, V3150 Java: V6040, V6047, V6086, V6089 |
Копировать-вставить | C, C ++: V501, V517, V519, V523, V524, V571, V581, V649, V656, V691, V760, V766, V778, V1037 C #: V3001, V3003, V3004, V3008, V3012, V3013, V3021, V3030, V3058, V3127, V3139, V3140 Java: V6003, V6004, V6012, V6021, V6027, V6032, V6033, V6039, V6067, V6072 |
Неправильное использование исключений | C, C ++: V509, V565, V596, V667, V740, V741, V746, V759, V1022 C #: V3006, V3052, V3100, V3141 Java: V6006, V6051 |
Переполнение буфера | C, C ++: V512, V514, V594, V635, V641, V645, V752, V755 |
Проблемы безопасности | C, C ++: V505, V510, V511, V512, V518, V531, V541, V547, V559, V560, V569, V570, V575, V576, V579, V583, V597, V598, V618, V6236, V45642, , V675, V676, V724, V727, V729, V733, V743, V745, V750, V771, V774, V782, V1003, V1005, V1010, V1017 C #: V3022, V3023, V3025, V3027, V3053, V3063 Java: V6007, V6046, V6054 |
Приоритет операции | C, C ++: V502, V562, V593, V634, V648 C #: V3130, V3133 Java: V6044 |
Разыменование нулевого указателя / нулевой ссылки | C, C ++: V522, V595, V664, V757, V769 C #: V3019, V3042, V3080, V3095, V3105, V3125, V3141, V3145, V3146, V3148, V3149, V3153 Java: V6008, V6060 |
Разыменование непроверенного параметра | C, C ++: V595, V664, V783, V1004 C #: V3095 Java: V6060 |
Ошибки синхронизации | C, C ++: V712, V1011, V1018, V1025, V1036 C #: V3032, V3054, V3079, V3083, V3089, V3090, V3147 Java: V6070, V6074, V6082 |
Ошибки использования WPF | C #: V3044-V3049 |
Утечка ресурсов | C, C ++: V701, V773, V1020, V1023 |
Проверить целочисленное деление на ноль | C, C ++: V609 C #: V3064, V3151, V3152 Java: V6020 |
Проблемы сериализации / десериализации | C, C ++: V739, V1024 C #: V3094, V3096, V3097, V3099, V3103, V3104 Java: V6065, V6075, V6076, V6083, V6087 |
Индивидуальные правила пользователя | C, C ++: V2001-V2014 |
.
Как запустить PVS-Studio на Linux и macOS
Введение
Статический анализатор
PVS-Studio для кода C / C ++ представляет собой консольное приложение с именем pvs-studio и несколько вспомогательных утилит. Для работы программы необходимо иметь настроенное окружение для сборки вашего проекта.
Для каждого файла кода выполняется новый запуск анализатора. Результаты анализа нескольких файлов исходного кода можно добавить в один отчет анализатора или отобразить в stdout .
Существует три основных режима работы анализатора:
- Интеграция pvs-studio call в систему сборки;
- с использованием модулей для CMake / QMake;
- Анализ проекта без интеграции с помощью утилиты pvs-studio-analyzer .
Интеграция анализатора
Установка и обновление PVS-Studio
Примеры команд для установки анализатора из пакетов и репозиториев приведены на этих страницах:
Информация о лицензионном файле
Вы можете запросить лицензию на знакомство с PVS-Studio через форму обратной связи.
Для сохранения информации о лицензии в файл необходимо использовать следующую команду:
учетные данные pvs-studio-analyzer КЛЮЧ ИМЕНИ [-o LIC-FILE]
Файл PVS-Studio.lic по умолчанию будет создан в каталоге ~ / .config / PVS-Studio / . В этом случае указывать его в параметрах запуска анализатора не нужно, он будет отловлен автоматически.
Лицензионный ключ для анализатора представляет собой текстовый файл в кодировке UTF8.
Вы можете проверить крайний срок лицензии с помощью этой команды:
pvs-studio --license-info /path/to/PVS-Studio.lic
Быстрый бег
Лучший способ использовать анализатор — это интегрировать его в вашу систему сборки, а именно рядом с вызовом компилятора. Однако, если вы хотите запустить анализатор для быстрого тестирования небольшого проекта, используйте утилиту pvs-studio-analyzer .
Важно. Перед анализом проект должен быть успешно скомпилирован и построен.
CMake-проект
Для проверки CMake-проекта мы используем формат JSON Compilation Database. Чтобы получить необходимый для анализатора файл compile_commands.json , необходимо добавить в вызов CMake один флаг:
$ cmake -DCMAKE_EXPORT_COMPILE_COMMANDS = На
CMake поддерживает создание базы данных компиляции JSON для файлов Makefile Unix.
Анализ начинается со следующих команд:
pvs-studio-analyzer анализировать -l / путь / к / PVS-Studio.lic
-o /path/to/project.log -e / path / to / exclude-path -j
plog-converter -a GA: 1,2 -t список задач
-o /path/to/project.tasks /path/to/project.log
Важно понимать, что все файлы для анализа должны быть скомпилированы. Если в вашем проекте активно используется генерация кода, то этот проект нужно построить до анализа, иначе при препроцессинге могут возникнуть ошибки.
CMake / Ниндзя-проект
Для проверки Ninja-проекта мы используем формат JSON Compilation Database.Чтобы получить необходимый для анализатора файл compile_commands.json , необходимо выполнить следующие команды:
cmake -GNinja
ниндзя -t compdb
Анализ запускается с помощью следующих команд:
pvs-studio-analyzer анализировать -l /path/to/PVS-Studio.lic
-o /path/to/project.log -e / path / to / exclude-path -j
plog-converter -a GA: 1,2 -t список задач
-o /path/to/project.tasks / путь / к / проекту.журнал
QBS-проект
Чтобы проверить проект с помощью Qt Build System, вы должны выполнить следующие команды:
qbs генерировать - генератор clangdb
Анализ запускается с помощью следующих команд:
pvs-studio-analyzer анализировать -l /path/to/PVS-Studio.lic
-o /path/to/project.log -e / path / to / exclude-path -j
plog-converter -a GA: 1,2 -t список задач
-o /path/to/project.tasks / путь / к / проекту.журнал
Xcode-проект (только для macOS)
База данных компиляции JSON должна быть создана с помощью утилиты xcpretty:
xcodebuild [флаги] | xcpretty -r база данных компиляции json
Анализ запускается с помощью следующих команд:
pvs-studio-analyzer анализировать -l /path/to/PVS-Studio.lic
-f сборка / отчеты / compilation_db.json
-o /path/to/project.log -e / path / to / exclude-path -j
plog-converter -a GA: 1,2 -t список задач
-o / путь / к / проекту.задачи /path/to/project.log
Любой проект (только Linux)
Для этой утилиты требуется утилита strace.
Его можно построить с помощью команды:
pvs-studio-analyzer trace - марка
Вы можете использовать любую другую команду сборки со всеми необходимыми параметрами вместо make , например:
pvs-studio-analyzer trace - сделать отладку
После сборки проекта следует выполнить команды:
pvs-studio-analyzer анализировать -l / путь / к / PVS-Studio.lic
-o /path/to/project.log -e / path / to / exclude-path -j
plog-converter -a GA: 1,2 -t список задач
-o /path/to/project.tasks /path/to/project.log
Предупреждения анализатора
будут сохранены в указанный файл project.tasks . Вы можете увидеть различные способы просмотра и фильтрации файла отчета в разделе «Фильтрация и просмотр отчета анализатора» в этом документе.
Если ваш проект не CMake или у вас проблемы с утилитой strace , вы можете попробовать сгенерировать файл compile_commands.json с помощью утилиты Bear. Этот файл поможет анализатору успешно проверить проект только в тех случаях, когда переменные среды не влияют на компиляцию файла.
Если вы используете кросс-компиляторы
В этом случае у компиляторов могут быть специальные имена, и анализатор не сможет их найти. Для анализа такого проекта необходимо явно указать имена компиляторов без путей:
pvs-studio-analyzer Analyzer... --compiler COMPILER_NAME
--compiler gcc --compiler g ++ --compiler имя_компилятора
plog-конвертер ...
Также, когда вы используете кросс-компиляторы, каталог с заголовочными файлами компилятора будет изменен. Такие каталоги необходимо исключить из анализа с помощью флага -e , чтобы анализатор не выдавал предупреждения для этих файлов.
pvs-studio-analyzer ... -e / путь / к / исключить-путь ...
Проблем с кросс-компиляторами при интеграции анализатора в систему сборки быть не должно.
Режим инкрементального анализа
Для утилиты pvs-studio-analyzer доступен режим инкрементального анализа (анализ только измененных файлов), для этого нужно запустить утилиту с параметром —incremental :
pvs-studio-analyzer analyzer ... --incremental ...
Этот режим работает независимо от инкрементальной сборки проекта. I.g. если ваш проект полностью скомпилирован, при первом запуске инкрементального анализа все файлы будут проанализированы.При следующем запуске будут проанализированы только измененные файлы.
Для отслеживания измененных файлов анализатор сохраняет служебную информацию в каталоге с именем .PVS-Studio в каталоге запуска. Поэтому для использования этого режима всегда необходимо запускать анализатор в одном каталоге.
Интеграция PVS-Studio в системы сборки и IDE
Примеры интеграции в CMake, QMake, Makefile и WAF
тестовых проекта доступны в официальном репозитории PVS-Studio на GitHub:
Вот так выглядит интеграция с CLion, QtCreator и Eclipse CDT
На рисунке 1 показан пример предупреждений анализатора, отображаемых в CLion:
.
Рисунок 1 — Предупреждения PVS-Studio в CLion
На рисунке 2 показан пример предупреждений анализатора, просматриваемых в QtCreator:
Рисунок 2 — Предупреждения PVS-Studio, просматриваемые в QtCreator
На рисунке 3 показан пример предупреждений анализатора, просматриваемых в Eclipse CDT:
.
Рисунок 3 — Предупреждения PVS-Studio, просматриваемые в Eclipse CDT
Параметры препроцессора
Анализатор проверяет не исходные файлы, а предварительно обработанные файлы.Этот метод позволяет анализатору выполнить более глубокий и качественный анализ исходного кода.
В связи с этим у нас есть несколько ограничений на передаваемые параметры компиляции. Это параметры, которые мешают компилятору работать в режиме препроцессора или повреждают вывод препроцессора. Ряд флагов отладки и оптимизации, например -O2 , -O3 , -g3 , -ggdb3 и другие, создают изменения, которые влияют на вывод препроцессора.Информация о неверных параметрах будет отображена анализатором при их обнаружении.
Данный факт не предполагает каких-либо изменений в настройках проверяемого проекта, но часть параметров должна быть исключена для правильной работы анализатора.
Файл конфигурации * .cfg
При интеграции анализатора в систему сборки необходимо передать ему файл настроек (* .cfg). Вы можете выбрать любое имя для файла конфигурации, но оно должно быть записано с флагом «—cfg».
Файл настроек с именем PVS-Studio.cfg, , который находится в том же каталоге, что и исполняемый файл анализатора, может быть загружен автоматически, без использования параметров командной строки.
Возможные значения настроек в файле конфигурации:
- exclude-path (необязательно) указывает каталог, файлы которого проверять не нужно. Обычно это каталоги системных файлов или библиотек ссылок.Параметров exclude-path может быть несколько.
- платформа (обязательно) указывает платформу. Возможные варианты: linux32 или linux64.
- препроцессор (обязательно) указывает препроцессор. Возможные варианты: gcc , clang , keil .
- язык (обязательный) Параметр указывает версию языков C / C ++, которую анализатор ожидает увидеть в коде анализируемого файла (—source-file).Возможные варианты: C, C ++ . Неправильная установка этого параметра может привести к ошибкам V001, потому что каждый поддерживаемый языковой вариант имеет определенные ключевые слова.
- lic-file (необязательно) содержит абсолютный путь к файлу лицензии.
- analysis-mode (необязательно) определяет тип предупреждений. Рекомендуется использовать значение «4» (Общий анализ, подходит для большинства пользователей).
- output-file (необязательно) Параметр указывает полный путь к файлу, в котором будет храниться отчет о работе анализатора.Если этот параметр отсутствует в конфигурационном файле, все сообщения об обнаруженных ошибках будут отображаться в консоли.
- sourcetree-root (необязательно) по умолчанию, при генерации диагностических сообщений PVS-Studio выдает абсолютные, полные пути к файлам, в которых PVS-Studio обнаружил ошибки. С помощью этой настройки вы можете указать корневую часть пути, которую анализатор автоматически заменит специальным маркером. Например, абсолютный путь к файлу / home / project / main.cpp будет заменен относительным путем |? | /main.cpp, , если / home / project был указан как корень.
- исходный файл (обязательный) содержит абсолютный путь к исходному файлу для анализа.
- i-файл (обязательно) содержит абсолютный путь к предварительно обработанному файлу.
- no-noise (необязательно) отключит создание сообщений с низким уровнем достоверности (уровень 3). При работе с крупномасштабными проектами анализатор может выдавать огромное количество предупреждений.Используйте этот параметр, если невозможно исправить все предупреждения сразу, поэтому вы можете сосредоточиться на исправлении в первую очередь наиболее важных предупреждений.
Важное примечание:
Вам не нужно создавать новый файл конфигурации для проверки каждого файла. Просто сохраните существующие настройки, например, lic-file и т. Д.
Интеграция PVS-Studio с системами непрерывной интеграции
Любой из следующих методов интеграции анализа в систему сборки может быть автоматизирован в системе Continuous Integration.Это можно сделать в Jenkins, TeamCity и других, настроив автоматический запуск анализа и уведомление о найденных ошибках.
Также возможна интеграция с платформой непрерывного анализа SonarQube с помощью плагина PVS-Studio. Плагин доступен с анализатором в архиве .tgz , доступном для скачивания. Инструкции по настройке доступны на этой странице: «Интеграция результатов анализа PVS-Studio в SonarQube».
Фильтрация и просмотр отчета анализатора
Утилита Plog Converter
Для преобразования отчета об ошибке анализатора в различные форматы (*.xml, * .tasks и т. д.) вы можете использовать конвертер Plog Converter, , который можно найти с открытым исходным кодом.
Введите в командной строке терминала следующее:
plog-converter [options] <путь к файлу с логом PVS-Studio>
Все параметры можно указывать в произвольном порядке.
Доступные опции:
- -t — формат вывода утилиты.
- -o — путь к файлу, который будет использоваться для вывода. Если он отсутствует, вывод будет перенаправлен на стандартное устройство вывода.
- -s — путь к файлу конфигурации. Файл аналогичен конфигурационному файлу анализатора PVS-Studio.cfg. Информация о корне проекта и исключенных каталогах (exclude-path) берется из этого файла.
- -r — путь к каталогу проекта.
- -a — набор отфильтрованных диагностических правил. Полный список: GA, 64, OP, CS, MISRA. Можно использовать вместе с указанными уровнями, например: «-a GA: 1,2; 64: 1; CS».
- -d — список исключенных диагностик, разделенных запятой: «-d V595, V730».
- -m — включить отображение CWE ID и MISRA ID для найденных предупреждений: «-m cwe -m misra».
- -e — использовать stderr вместо stdout .
Подробное описание уровней достоверности и наборов диагностических правил приведено в разделе документации «Знакомство с анализатором статического кода PVS-Studio».
На данный момент доступны следующие форматы:
- xml — удобный формат для дальнейшей обработки результатов анализа, который поддерживается поддерживаемым плагином для SonarQube;
- csv — файл хранит табличные данные (числа и текст) в виде обычного текста;
- errorfile — это формат вывода gcc и clang;
- tasklist — формат ошибок, который можно открыть в QtCreator ;
- html — отчет в формате html с кратким описанием результатов анализа.Лучше всего подходит для отправки уведомлений по электронной почте;
- fullhtml — отчет с сортировкой результатов анализа по различным параметрам и навигацией по исходному коду.
Результатом выполнения утилиты является файл, содержащий сообщения заданного формата, отфильтрованные по правилам, установленным в файле конфигурации.
Просмотр отчета анализатора в QtCreator
Ниже приведен пример команды, которая подходит для большинства пользователей для открытия отчета в QtCreator:
plog-converter -a GA: 1,2 -t список задач
-o / путь / к / проекту.задачи /path/to/project.log
На рисунке 3 показан пример файла .tasks, просматриваемого в QtCreator:
Рисунок 4 — Файл .tasks, просматриваемый в QtCreator
Просмотр отчета Html в веб-браузере или почтовом клиенте
Конвертер отчетов анализатора позволяет формировать отчеты в формате Html двух типов:
1. FullHtml — полный отчет для просмотра результатов анализа. Вы можете искать и сортировать сообщения по типу, файлу, уровню, коду и тексту предупреждения.Особенностью этого отчета является возможность перейти к месту ошибки, к файлу исходного кода. Сами файлы исходного кода, вызвавшие срабатывание предупреждений анализатора, копируются в html и становятся частью отчета. Примеры отчета показаны на рисунках 4-5.
Рисунок 4 — Пример отчета на главной странице Html
Рисунок 5 — Вид предупреждения в коде
Пример команды для получения такого отчета:
plog-converter -a GA: 1,2 -t fullhtml
/ путь / к / проекту.log -o / путь / к / каталог_отчета
Этот отчет удобно отправлять в архиве или предоставлять доступ по локальной сети с любого веб-сервера, например Lighttpd и т. Д.
2. Html — это легкий отчет, состоящий из одного файла .html. Он содержит краткую информацию об обнаруженных предупреждениях и подходит для уведомления по электронной почте. Пример отчета показан на рисунке 6.
Рисунок 6 — Пример простой HTML-страницы
Пример команды для получения такого отчета:
plog-converter -a GA: 1,2 -t html
/ путь / к / проекту.log -o /path/to/project.html
Просмотр отчета анализатора в Vim / gVim
Пример команд для открытия отчета в редакторе gVim:
$ plog-converter -a GA: 1,2 -t файл ошибок
-o /path/to/project.err /path/to/project.log
$ gvim /path/to/project.err
: установить makeprg = cat \%
: silent make
: cw
На рисунке 7 показан пример просмотра файла .err в gVim:
.
Рисунок 7 — просмотр файла .err в gVim
Просмотр отчета анализатора в GNU Emacs
Пример команд для открытия отчета в редакторе Emacs:
plog-converter -a GA: 1,2 -t файл ошибок
-o / путь / к / проекту.ошибка /path/to/project.log
emacs
M-x компиляция
cat /path/to/project.err 2> & 1
На рисунке 8 показан пример просмотра файла .err в Emacs:
Рисунок 8 — просмотр файла .err в Emacs
Просмотр отчета анализатора в LibreOffice Calc
Пример команд для преобразования отчета в формат CSV:
plog-converter -a GA: 1,2 -t csv
-o /path/to/project.csv /path/to/project.log
После открытия файла project.csv в LibreOffice Calc необходимо добавить автофильтр: Строка меню -> Данные -> Автофильтр . На рисунке 9 показан пример просмотра файла .csv в LibreOffice Calc:
.
Рисунок 9 — просмотр файла .csv в LibreOffice Calc
Файл конфигурации
Дополнительные настройки можно сохранить в файле конфигурации со следующими параметрами:
- enabled-analyters — опция, аналогичная опции -a в параметрах строки консоли.
- sourcetree-root — строка, указывающая путь к корню исходного кода анализируемого файла. При неправильной настройке с результатом работы утилиты будет сложно справиться.
- errors-off — глобально отключенные номера предупреждений, пронумерованные пробелами.
- exclude-path — файл, путь к которому содержит значение из этой опции, не будет инициализирован.
- отключенных ключевых слов. Сообщения, указывающие на строки, содержащие эти ключевые слова, будут исключены из обработки.
Имя опции отделяется от значений символом ‘=’. Каждая опция указывается в отдельной строке. Комментарии пишутся отдельными строками; вставьте # перед комментарием.
Добавление пользовательских форматов вывода
Чтобы добавить собственный выходной формат, выполните следующие действия:
Создайте собственный выходной класс, сделав его наследником класса IOutput , и переопределите виртуальный метод void write (const AnalyzerMessage & msg) .Опишите вывод сообщения в правильном формате для этого метода. Поля структуры AnalyzerMessage определены в файле analyzermessage.h . Следующие действия такие же, как и для существующих классов вывода (например, XMLOutput ).
В OutputFactory :: OutputFactory в m_outputs добавьте свой формат по аналогии с тем, который там уже указан. Как вариант — добавить через метод OutputFactory :: registerOutput .
После этих действий формат будет доступен как опция утилиты -t.
Уведомление групп разработчиков (служебная программа-уведомитель)
Утилита blame-notifier предназначена для автоматизации процесса уведомления разработчиков, зафиксировавших код в репозитории, для которого анализатор PVS-Studio выдал предупреждения. Отчет анализатора передается уведомителю с указанием дополнительных параметров; Утилита находит файлы, вызывающие предупреждения, и формирует HTML-отчет для каждого «виноватого» разработчика.Также есть возможность отправить полный отчет: он будет содержать все предупреждения по каждому «виноватому» разработчику.
В следующем разделе документации описываются способы установки и использования утилиты: «Уведомление групп разработчиков (утилита уведомления виновных)».
Массовое подавление сообщений анализатора
Массовое подавление предупреждений позволяет легко встраивать анализатор в любой проект и сразу же начать извлекать из этого выгоду, т.е. находить новые ошибки. Этот механизм позволяет планировать исправление пропущенных предупреждений в будущем, не отвлекая разработчиков от выполнения текущих задач.
Есть несколько способов использования этого механизма, в зависимости от интеграции анализатора.
Анализ с помощью утилиты pvs-studio-analyzer
Для подавления всех предупреждений анализатора (в первый раз и в последующих) необходимо выполнить команду:
pvs-studio-analyzer подавить /path/to/report.log
Если вы хотите подавить предупреждение для определенного файла, используйте флаг —file ( -f ):
pvs-studio-analyzer подавить -f тест.c /path/to/report.log
В дополнение к самому файлу вы можете явно указать номер строки для подавления:
pvs-studio-analyzer подавить -f test.c: 22 /path/to/report.log
Эта запись подавляет все предупреждения, которые находятся в строке 22 файла test.c.
Этот флаг можно указывать многократно, таким образом подавляя предупреждения сразу в нескольких файлах.
Помимо явной спецификации файла, есть механизм подавления специфической диагностики:
pvs-studio-analyzer подавить -v512 / путь / к / отчет.журнал
Флаг —warning ( -v ) также можно указывать повторно:
pvs-studio-analyzer подавить -v1040 -v512 /path/to/report.log
Вышеупомянутые флаги —file и —warning могут быть объединены для более точного подавления предупреждений:
pvs-studio-analyzer подавить -f test.c: 22 -v512 /path/to/report.log
Таким образом, приведенная выше команда подавит все диагностические предупреждения v512 в строке 22 файла test.c ‘файл.
Анализ проекта можно запустить, как и раньше. При этом будут отфильтрованы подавленные предупреждения:
pvs-studio-analyzer анализировать ... -s /path/to/suppress.json \
-o /path/to/report.log
plog-конвертер ...
Прямая интеграция анализатора в систему сборки
Прямая интеграция может выглядеть следующим образом:
.cpp.o:
$ (CXX) $ (CFLAGS) $ (DFLAGS) $ (ВКЛЮЧАЕТ) $ <-o $ @
$ (CXX) $ (CFLAGS) $ <$ (DFLAGS) $ (ВКЛЮЧАЕТ) -E -o $ @.PVS-Studio.i
pvs-studio --cfg $ (PVS_CFG) --source-file $ <--i-file $ @. PVS-Studio.i
--output-file $ @. PVS-Studio.log
В этом режиме анализатор не может проверять исходные файлы и одновременно фильтровать их. Значит, для фильтрации и подавления предупреждений потребуются дополнительные команды.
Для подавления всех предупреждений необходимо также выполнить команду:
pvs-studio-analyzer подавить /path/to/report.log
Для фильтрации нового журнала необходимо использовать следующие команды:
pvs-studio-analyzer фильтр-подавлен / путь / к / отчет.журнал
plog-конвертер ...
Файл с подавленными предупреждениями также имеет имя по умолчанию suppress_base.json , для которого вы можете указать произвольное имя.
Общие проблемы и их решения
1. Утилита strace выдает следующее сообщение:
strace: недопустимая опция - 'y'
Необходимо обновить версию программы strace . Анализ проекта без интеграции в систему сборки - сложная задача, эта опция позволяет анализатору получить важную информацию о компиляции проекта.
2. Утилита strace выдает следующее сообщение:
strace: umovestr: короткое чтение (512 <2049) @ 0x7ffe ...: неверный адрес
Такие ошибки возникают в системных процессах и не влияют на анализ проекта.
3. Утилита strace выдает следующее сообщение:
Единицы компиляции не найдены
Анализатор не может найти файлы для анализа. Возможно, вы используете кросс-компиляторы для сборки проекта.См. Раздел «Если вы используете кросс-компиляторы» в этой документации.
4. Отчет анализатора имеет такие строки:
r-vUVbw <6y | D3 h32y | D3xJGy | D3pzp (= a '(ah9f (ah9fJ} * wJ} *} x (->' 2h_u (ah
Анализатор сохраняет отчет в промежуточном формате. Для просмотра этого отчета необходимо преобразовать его в читаемый формат с помощью утилиты plog-converter , которая устанавливается вместе с анализатором.
5.Анализатор выдает следующую ошибку:
Неправильный синтаксис параметра:
Параметр ... не поддерживает несколько экземпляров.
Один из параметров анализатора несколько раз выставляется неверно.
Это может произойти, если часть параметров анализатора указана в файле конфигурации, а часть передана через параметры командной строки. При этом какой-то параметр был случайно указан несколько раз.
Если вы используете pvs-studio-analyzer, , то почти все параметры определяются автоматически, поэтому он может работать без файла конфигурации. Дублирование таких параметров также может вызвать эту ошибку.
6. Анализатор выдает предупреждение:
V001 Невозможно проанализировать фрагмент кода из пути / в / файл.
Если анализатор не может разобрать какой-то фрагмент кода, он пропускает его и выдает предупреждение V001.Такая ситуация не влияет на анализ других файлов, но если этот код находится в заголовочном файле, то количество таких предупреждений может быть очень большим. Отправьте нам предварительно обработанный файл (.i) для фрагмента кода, вызывающего эту проблему, чтобы мы могли добавить для него поддержку.
Заключение
Если у вас возникли вопросы или проблемы с запуском анализатора, свяжитесь с нами.
.
Основные диагностические возможности PVS-Studio | Диагностика |
64-битных проблем | C, C ++: V101-V128, V201-V207, V220, V221, V301-V303 |
Проверить, что адреса в стековой памяти не выходят из функции | C, C ++: V506, V507, V558, V758 |
Арифметическое переполнение / потеря значимости | C, C ++: V636, V658, V784, V786, V1012, V1028, V1029, V1033 C #: V3040, V3041 Java: V6011, V6088 |
Индекс массива выходит за границы | C, C ++: V557, V582, V643, V781, V1038 C #: V3106 Java: V6025, V6079 |
Двойной бесплатно | C, C ++: V586, V749, V1002, V1006 |
Мертвый код | C, C ++: V606, V607 |
Микрооптимизация | C, C ++: V801-V829 |
Недоступный код | C, C ++: V551, V695, V734, V776, V779, V785 C #: V3136, V3142 Java: V6018, V6019 |
Неинициализированные переменные | C, C ++: V573, V614, V679, V730, V737, V788, V1007, V1050 C #: V3070, V3128 Java: V6036, V6050, V6052, V6090 |
Неиспользуемые переменные | C, C ++: V603, V751, V763, V1001 C #: V3061, V3065, V3077, V3117, V3137, V3143 Java: V6021, V6022, V6023 |
Незаконные побитовые операции / операции сдвига | C, C ++: V610, V629, V673, V684, V770 C #: V3134 Java: V6034, V6069 |
Неопределенное / неопределенное поведение | C, C ++: V567, V610, V611, V681, V704, V708, V726, V736, V1016, V1026, V1032, V1061 |
Некорректная обработка типов (HRESULT, BSTR, BOOL, VARIANT_BOOL, float, double) | C, C ++: V543, V544, V545, V716, V721, V724, V745, V750, V676, V767, V768, V772, V775, V1027, V1034, V1046, V1060 C #: V3111, V3121, V3148 |
Неправильное понимание логики работы функции / класса | C, C ++: V518, V530, V540, V541, V554, V575, V597, V598, V618, V630, V632, V663, V668, V698, V701, V702, V717, V718, V720, V723727, V725, , V738, V742, V743, V748, V762, V764, V780, V789, V797, V1014, V1024, V1031, V1035, V1045, V1052, V1053, V1054, V1057 C #: V3010, V3057, V3068, V3072, V3073, V3074, V3082, V3084, V3094, V3096, V3097, V3102, V3103, V3104, V3108, V3114, V3115, V3118, V3126, V3126, V3145 Java: V6009, V6010, V6016, V6026, V6029, V6049, V6055, V6058, V6064, V6068, V6081 |
Опечатки | C, C ++: V501, V503, V504, V508, V511, V516, V519, V520, V521, V525, V527, V528, V529, V532, V533, V534, V535, V536, V537, V539549, V546, , V552, V556, V559, V560, V561, V564, V568, V570, V571, V575, V577, V578, V584, V587, V588, V589, V590, V592, V600, V602, V604, V606, V607, V616, , V620, V621, V622, V625, V626, V627, V633, V637, V638, V639, V644, V646, V650, V651, V653, V654, V655, V660, V661, V662, V666, V669, V671, V672 , V682, V683, V693, V715, V722, V735, V747, V754, V756, V765, V767, V787, V791, V792, V796, V1013, V1015, V1021, V1040, V1051 C #: V3001, V3003, V3005, V3007, V3008, V3009, V3011, V3012, V3014, V3015, V3016, V3020, V3028, V3029, V3034, V3035, V3036, V3037, V3038, V3050, V3055, V3056 , V3062, V3063, V3066, V3081, V3086, V3091, V3092, V3107, V3109, V3110, V3112, V3113, V3116, V3122, V3124, V3132, V3140 Java: V6001, V6005, V6009, V6012, V6014, V6015, V6017, V6021, V6026, V6028, V6029, V6030, V6031, V6037, V6041, V6042, V6043, V6045, V6057, V6059, V6061, V6062 , V6077, V6080, V6085, V6091 |
Отсутствует виртуальный деструктор | C, C ++: V599, V689 |
Стиль кодирования не соответствует логике работы исходного кода | C, C ++: V563, V612, V628, V640, V646, V705, V1044 C #: V3018, V3033, V3043, V3067, V3069, V3138, V3150 Java: V6040, V6047, V6086, V6089 |
Копировать-вставить | C, C ++: V501, V517, V519, V523, V524, V571, V581, V649, V656, V691, V760, V766, V778, V1037 C #: V3001, V3003, V3004, V3008, V3012, V3013, V3021, V3030, V3058, V3127, V3139, V3140 Java: V6003, V6004, V6012, V6021, V6027, V6032, V6033, V6039, V6067, V6072 |
Неправильное использование исключений | C, C ++: V509, V565, V596, V667, V740, V741, V746, V759, V1022 C #: V3006, V3052, V3100, V3141 Java: V6006, V6051 |
Переполнение буфера | C, C ++: V512, V514, V594, V635, V641, V645, V752, V755 |
Проблемы безопасности | C, C ++: V505, V510, V511, V512, V518, V531, V541, V547, V559, V560, V569, V570, V575, V576, V579, V583, V597, V598, V618, V6236642, V45642 , V675, V676, V724, V727, V729, V733, V743, V745, V750, V771, V774, V782, V1003, V1005, V1010, V1017 C #: V3022, V3023, V3025, V3027, V3053, V3063 Java: V6007, V6046, V6054 |
Приоритет операции | C, C ++: V502, V562, V593, V634, V648 C #: V3130, V3133 Java: V6044 |
Разыменование нулевого указателя / нулевой ссылки | C, C ++: V522, V595, V664, V757, V769 C #: V3019, V3042, V3080, V3095, V3105, V3125, V3141, V3145, V3146, V3148, V3149, V3153 Java: V6008, V6060 |
Разыменование непроверенного параметра | C, C ++: V595, V664, V783, V1004 C #: V3095 Java: V6060 |
Ошибки синхронизации | C, C ++: V712, V1011, V1018, V1025, V1036 C #: V3032, V3054, V3079, V3083, V3089, V3090, V3147 Java: V6070, V6074, V6082 |
Ошибки использования WPF | C #: V3044-V3049 |
Утечка ресурсов | C, C ++: V701, V773, V1020, V1023 |
Проверить целочисленное деление на ноль | C, C ++: V609 C #: V3064, V3151, V3152 Java: V6020 |
Проблемы сериализации / десериализации | C, C ++: V739, V1024 C #: V3094, V3096, V3097, V3099, V3103, V3104 Java: V6065, V6075, V6076, V6083, V6087 |
Индивидуальные правила пользователя | C, C ++: V2001-V2014 |
.
История выпусков PVS-Studio
- PVS-Studio 7.09 (27 августа 2020 г.)
- PVS-Studio 7.08 (18 июня 2020 г.)
- PVS-Studio 7.07 (16 апреля 2020 г.)
- PVS-Studio 7.06 (27 февраля 2020 г. )
- PVS-Studio 7.05 (10 декабря 2019 г.)
- PVS-Studio 7.04 (4 сентября 2019 г.)
- PVS-Studio 7.03 (25 июня 2019 г.)
- PVS-Studio 7.02 (25 апреля 2019 г.)
- PVS-Studio 7.01 (13 марта 2019 г.)
- PVS-Studio 7.00 (16 января 2019 г.)
- История выпусков старых версий
Содержание
PVS-Studio - активно развивающийся анализатор. Например, наша команда постоянно совершенствует интеграцию с такими системами, как PlatformIO, Azure DevOps, Travis CI, CircleCI, GitLab CI / CD, Jenkins, SonarQube и др. Однако лучший способ продемонстрировать развитие возможностей анализатора - показать график количества диагностик.
Рисунок 1. График увеличения количества диагностик в PVS-Studio
Как видите, мы активно улучшаем возможности анализатора по обнаружению новых шаблонов ошибок и одновременно подталкиваем к разработке других инструментов :).Более подробная информация о нововведениях в различных версиях анализатора представлена ниже.
PVS-Studio 7.09 (27 августа 2020 г.)
- PVS-Studio включен в отчет Forrester Research «Now Tech: Static Application Security Testing, Q3 2020» как специалист по SAST. Принятие методологии статического тестирования безопасности приложений (SAST) улучшает безопасность приложений и помогает снизить влияние недостатков безопасности на жизненный цикл приложения. Forrester Research - ведущая исследовательская компания в области новейших технологий, предоставляющая данные и анализ, определяющие влияние технологических изменений на бизнес.Отчет доступен при покупке или по подписке в Forrester Research.
- Улучшена навигация по сообщениям межпроцедурного анализатора в анализаторе PVS-Studio C # для расширений Visual Studio и Rider PVS-Studio. Теперь можно переходить к потенциально опасным фрагментам кода внутри метода, когда анализатор выдает предупреждение при вызове этого метода.
- Появилась возможность переопределить уровни серьезности по умолчанию для правил анализатора PVS-Studio C # в файлах конфигурации правил (.pvsconfig).
- V012. Некоторые предупреждения могли быть отключены. В отчет анализатора PVS-Studio C ++ добавлены правила исключения, которые определены в файлах конфигурации правил (.pvsconfig).
- V826. Рассмотрите возможность замены стандартного контейнера на другой.
- V827. Максимальный размер вектора известен во время компиляции. Подумайте о предварительном выделении его, вызвав резерв (N).
- V828. Пониженная производительность. Перемещение объекта в операторе возврата предотвращает удаление копии.
- V829. Время жизни переменной, выделенной в куче, ограничено областью текущей функции. Вместо этого рассмотрите возможность размещения его в стеке.
- V1059. Имя макроса переопределяет ключевое слово / зарезервированное имя. Это может привести к неопределенному поведению.
- V1060. Передача "BSTR" функции "SysAllocString" может привести к некорректному созданию объекта.
- V1061. Расширение пространства имен 'std' или 'posix' может привести к неопределенному поведению.
- V1062. Класс определяет настраиваемый оператор создания или удаления.Также необходимо определить противоположный оператор.
- V1063. Операция по модулю 1 не имеет смысла. Результат всегда будет нулевым.
- V3154. Выражение 'a% b' всегда оценивается как 0.
- V3155. Выражение неверное или его можно упростить.
- V6082. Небезопасная блокировка с двойной проверкой.
- V6083. Порядок сериализации полей должен быть сохранен во время десериализации.
- V6084. Подозрительный возврат всегда пустой коллекции.
- V6085.Отклонение от нормы в аналогичных сравнениях. Возможно, внутри выражения есть опечатка.
- V6086. Подозрительное форматирование кода. Вероятно, отсутствует ключевое слово else.
- V6087. InvalidClassException может возникнуть во время десериализации.
- V6088. Результат этого выражения будет неявно приведен к типу. Проверьте, правильно ли логика программы обрабатывает это.
- V6089. Возможно, строка была неправильно закомментирована, что изменило логику работы программы.
- V6090. Поле «А» используется до инициализации.
- V6091. Подозрительная реализация геттера / сеттера. Вместо этого, вероятно, следует вернуть / назначить поле «А».
- V6092. Ресурс возвращается из оператора try-with-resources. Он будет закрыт до выхода из метода.
PVS-Studio 7.08 (18 июня 2020 г.)
- Анализатор C # PVS-Studio для проектов .NET Framework и .NET Core теперь доступен в системах Linux и macOS.
- Анализатор C # PVS-Studio теперь можно использовать из JetBrains Rider IDE.
- Попробовать анализатор PVS-Studio на примерах кода C и C ++ теперь очень просто, не скачивая и не устанавливая дистрибутив анализатора, с помощью сервиса Compiler Explorer. Обратите внимание - сервис Compiler Explorer позволяет опробовать анализатор на небольшом изолированном фрагменте кода или синтетическом примере. Для полноценной оценки возможностей анализатора скачайте и установите полную версию PVS-Studio.
- Новый режим анализа списка файлов в инструменте командной строки PVS-Studio_Cmd.exe под Windows теперь поддерживает анализ файлов C, C ++ и C # и может отслеживать зависимости компиляции (зависимость исходных файлов от файлов заголовков). В этом режиме можно настроить анализ merge и pull request с помощью анализатора PVS-Studio.
- Анализатор C # PVS-Studio улучшил анализ проектов Unity - добавлены дополнительные аннотации для наиболее распространенных типов из библиотек Unity.
- Утилита преобразования журналов plog-converter (Linux, macOS) теперь поддерживает формат вывода журнала TeamCity.
- Blame Notifier теперь поддерживает систему контроля версий Perforce.
- V824. Для создания интеллектуальных указателей рекомендуется использовать функцию make_unique / make_shared.
- V825. Выражение эквивалентно перемещению одного уникального указателя на другой. Вместо этого рассмотрите возможность использования std :: move.
- V1056. Предопределенный идентификатор '__func__' всегда содержит строку 'operator ()' внутри тела функции перегруженного 'operator ()'.
- V1057.Псевдослучайная последовательность одинакова при каждом запуске программы. Рассмотрите возможность присвоения начального числа значению, неизвестному во время компиляции.
- V1058. Бессмысленное сравнение адресов двух разных функций.
- V6078. Возможная проблема совместимости Java SE API.
- V6079. Значение переменной проверяется после использования. Возможная логическая ошибка. Проверить линии: N1, N2.
- V6080. Попробуйте проверить наличие опечаток. Возможно, что назначенная переменная должна быть проверена в следующем условии.
- V6081. Аннотации без политики хранения RUNTIME не будут доступны через Reflection API.
Инструмент автоматического уведомления разработчика
PVS-Studio 7.07 (16 апреля 2020 г.)
- Анализатор PVS-Studio C ++ теперь умеет разбирать концепции. Concepts - это расширение шаблонов C ++, которые были введены в языковом стандарте C ++ 20. Исправлена ошибка анализатора V003, вызванная использованием концептов в анализируемом коде.
- PVS-Studio SonarQube теперь поддерживает macOS.
- (PlogConverter) теперь поддерживает формат вывода для сервера непрерывной интеграции TeamCity.
- Теперь можно включать и исключать определенные проекты из анализа в анализаторе командной строки для проектов Visual Studio \ MSBuild (PVS-Studio_Cmd.exe) с помощью флагов --selectProjects / --excludeProjects.
- Исправлено зависание плагина PVS-Studio Visual Studio при открытии решений из-за двойной инициализации.
- V1053. Вызов виртуальной функции 'foo' в конструкторе / деструкторе может привести к неожиданному результату во время выполнения.
- V1054.Нарезка объекта. Объект производного класса был скопирован в объект базового класса.
- V1055. Выражение sizeof возвращает размер типа контейнера, а не количество элементов. Рассмотрите возможность использования функции size ().
- V2573. MISRA. Идентификаторы, начинающиеся с "__" или "_ [A-Z]", зарезервированы.
Плагин
Инструмент преобразования журнала XML
PVS-Studio 7.06 (27 февраля 2020 г.)
- PVS-Studio теперь можно использовать с кроссплатформенной IDE PlatformIO для встраиваемой разработки. Дополнительные подробности по настройке PVS-Studio в PlatformIO доступны здесь.
- Оптимизировано выделение памяти для анализатора PVS-Studio C #. Это может ускорить анализ крупномасштабных проектов.
- В анализатор C # PVS-Studio добавлены новые аргументы командной строки: --excludeDefines / --appendDefines. Эти аргументы могут использоваться для отмены определения / определения символов препроцессора, которые будут использоваться во время анализа.
- Анализатор C # PVS-Studio теперь может корректно понимать специфичные для Unity проверки переменных на null, когда такие переменные неявно приводятся к типу bool.
- V823. Пониженная производительность. Объект может быть создан на месте в контейнере. Рассмотрите возможность замены методов: 'insert' -> 'emplace', 'push_ *' -> 'emplace_ *'.
- V1050. Неинициализированный член класса используется при инициализации базового класса.
- V1051. Попробуйте проверить наличие опечаток. Возможно, что назначенная переменная должна быть проверена в следующем условии.
- V1052. Объявление виртуальных методов в классе, помеченном как «final», бессмысленно.
- V2562.MISRA. Выражения с типом указателя не должны использоваться в операциях «+», «-», «+ =» и «- =».
- V2563. MISRA. Индексирование массивов должно быть единственной формой арифметики указателей, и ее следует применять только к объектам, определенным как тип массива.
- V2564. MISRA. Не должно быть неявного целочисленного преобразования с плавающей запятой.
- V2565. MISRA. Функция не должна вызывать себя прямо или косвенно.
- V2566. MISRA. Оценка постоянного выражения не должна приводить к беззнаковому целочисленному переносу.
- V2567. MISRA. Приведение не должно удалять квалификацию const / volatile из типа, на который указывает указатель или ссылка.
- V2568. MISRA. Оба операнда оператора должны относиться к одной и той же категории типов.
- V2569. MISRA. Оператор &&, оператор ||, оператор и унарный оператор & не должны быть перегружены.
- V2570. MISRA. Операнды логического "&&" или "||" операторы, '!' Оператор должен иметь тип bool.
- V2571. MISRA. Преобразования между указателями на объекты и целочисленные типы не должны выполняться.
- V2572. MISRA. Значение выражения не следует преобразовывать в другой существенный тип или более узкий существенный тип.
- V3150. Условия разрыва цикла не зависят от количества итераций.
- V3151. Возможное деление на ноль. Переменная использовалась как делитель до того, как сравнивалась с нулем. Проверить линии: N1, N2.
- V3152. Возможное деление на ноль.Перед использованием в качестве делителя переменная сравнивалась с нулем. Проверить линии: N1, N2.
- V3153. Разыменование результата оператора условного доступа со значением NULL может привести к исключению NullReferenceException. Рассмотрите возможность удаления скобок вокруг выражения нулевого условного доступа.
- V6077. Ярлык присутствует внутри переключателя (). Возможно, это опечатки и вместо этого следует использовать оператор «по умолчанию:».
PVS-Studio 7.05 (10 декабря 2019 г.)
- Инструмент Blame Notifier, который уведомляет разработчиков о результатах анализатора, теперь доступен на всех платформах, поддерживаемых анализатором (Windows, Linux, macOS).Blame Notifier использует информацию из системы контроля версий (SVN, Git, Mercurial), чтобы идентифицировать человека, ответственного за написание кода, инициировавшего сообщение анализатора.
- PVS-Studio теперь можно установить из менеджера пакетов Chocolatey.
- Анализ проектов .NET Core 3 и 3.1 теперь поддерживается в анализаторе C #.
- В версии анализатора для Windows теперь возможно указывать каталоги, исключенные из анализа в рамках конкретных проектов и решений Visual Studio внутри.pvsconfig файлы.
- Оптимизирован объем памяти анализатора C # PVS-Studio при его использовании для анализа крупномасштабных проектов.
- V822. Пониженная производительность. Создается новый объект, при этом ожидается ссылка на объект.
- V1044. Условия разрыва цикла не зависят от количества итераций.
- V1045. Функция DllMain вызывает исключение. Рассмотрите возможность включения оператора throw в блок try..catch.
- V1046. Небезопасное использование типов 'bool' и integer вместе в операции '& ='.
- V1047. Время жизни лямбда больше, чем время жизни локальной переменной, захваченной по ссылке.
- V1048. Переменной foo было присвоено то же значение.
- V1049. Защита включения 'foo' уже определена в заголовке 'bar1.h'. Заголовок bar2.h будет исключен из компиляции.
- V2558. MISRA. Параметр указателя / ссылки в функции должен быть объявлен как указатель / ссылка на const, если соответствующий объект не был изменен.
- V2559.MISRA. Вычитание,>,> =, <, <= следует применять только к указателям, которые адресуют элементы одного и того же массива.
- V2560. MISRA. Не должно быть никаких пользовательских вариативных функций.
- V2561. MISRA. Не следует использовать результат выражения присваивания.
- V3146. Возможное нулевое разыменование. Метод может возвращать значение NULL по умолчанию.
- V3147. Неатомарная модификация изменчивой переменной.
- V3148. Преобразование потенциального «нулевого» значения в тип значения может привести к NullReferenceException.
- V3149. Разыменование результата оператора as может привести к исключению NullReferenceException.
- V6072. Были обнаружены два похожих фрагмента кода. Возможно, это опечатка и следует использовать переменную "X" вместо "Y".
- V6073. Не рекомендуется возвращать null или выдавать исключения из методов toString / clone.
- V6074. Неатомарная модификация изменчивой переменной.
- V6075. Сигнатура метода «X» не соответствует требованиям сериализации.
- V6076. При повторной сериализации будет использоваться состояние кэшированного объекта из первой сериализации.
PVS-Studio 7.04 (4 сентября 2019 г.)
- Плагин
- PVS-Studio для IntelliJ IDEA теперь поддерживает IDEA версии 192.
- PVS-Studio для Visual Studio теперь могут автоматически загружать отчет анализа при анализе проектов Unreal Engine.
- Анализатор C # PVS-Studio теперь может анализировать проекты для .NET Core 3 Preview.
- Анализатор C # PVS-Studio теперь поддерживает получение возвращаемых значений из асинхронных методов и методов доступа к свойствам get \ set.
- под Windows теперь поддерживает отслеживание только дочерних процессов указанного родительского процесса.
- Добавлен новый режим игнорирования ccache для мониторинга компилятора под Linux.
- PVS-Studio для отображения результатов анализа в Jenkins теперь можно использовать под хостами Linux и macOS (ранее он был доступен только под Windows).
- PVS-Studio для SonarQube теперь поддерживает SonarQube 7.9 LTS.
- V1040. Возможна опечатка в написании заранее определенного имени макроса.
- V1041. Член класса инициализируется висячей ссылкой.
- V1042. Этот файл отмечен лицензией с авторским левом, которая требует, чтобы вы открыли производный исходный код.
- V1043. В заголовке объявляется глобальная объектная переменная. Будет создано несколько его копий во всех единицах перевода, которые включают этот файл заголовка.
- V2551. MISRA. Переменная должна быть объявлена в области видимости, которая сводит к минимуму ее видимость.
- V2552. MISRA. Выражения с базовым типом enum должны иметь значения, соответствующие перечислителям перечисления.
- V2553. MISRA. Оператор унарный минус не следует применять к выражению беззнакового типа.
- V2554. MISRA. Выражение, содержащее приращение (++) или декремент (-), не должно иметь других побочных эффектов.
- V2555. MISRA. Неправильное выражение сдвига.
- V2556. MISRA. Использование указателя на ФАЙЛ, когда связанный поток уже закрыт.
- V2557. MISRA. Операнд оператора sizeof () не должен иметь других побочных эффектов.
- V3140.Аксессоры свойств используют разные вспомогательные поля.
- V3141. Выражение под 'throw' является потенциальным нулем, что может привести к NullReferenceException.
- V3142. Обнаружен недостижимый код. Возможно, ошибка присутствует.
- V3143. Параметр value перезаписывается в установщике свойств и после этого не используется.
- V3144. Этот файл отмечен лицензией с авторским левом, которая требует, чтобы вы открыли производный исходный код.
- V3145. Небезопасное разыменование цели WeakReference.Объект мог быть собран сборщиком мусора до обращения к свойству Target.
- V6068. Подозрительное использование класса BigDecimal.
- V6069. Беззнаковое присвоение сдвига вправо отрицательного байтового / короткого значения.
- V6070. Небезопасная синхронизация по объекту.
- V6071. Этот файл отмечен лицензией с авторским левом, которая требует, чтобы вы открыли производный исходный код.
Плагины
Средство наблюдения за компилятором
Плагин
Плагин
PVS-Studio 7.03 (25.06.2019)
- В документации к анализатору PVS-Studio добавлен раздел, описывающий использование анализатора внутри контейнеров под Docker.
- Поддержка анализа проектов QNX Momentics, компилятор QCC.
- V1038. Странно, что к указателю добавляется символьный или строковый литерал.
- V1039. В многосимвольном литерале используется escape-символ. Это вызывает поведение, определяемое реализацией.
- V2543. MISRA. В операциях сложения / вычитания следует надлежащим образом использовать значение основного типа символа.
- V2544. MISRA. В выражениях следует использовать значения существенных соответствующих типов.
- V2545. MISRA. Преобразование между указателями разных типов объектов производить не следует.
- V2546. MISRA. Выражение, полученное в результате раскрытия макроса, должно быть заключено в круглые скобки.
- V2547. MISRA. Следует использовать возвращаемое значение непустой функции.
- V2548. MISRA. Адрес объекта с локальной областью видимости не должен выходить за ее пределы.
- V2549. MISRA. Указатель на ФАЙЛ не следует разыменовывать.
- V2550.MISRA. Значения с плавающей запятой не следует проверять на равенство или неравенство.
- V3138. Строковый литерал содержит потенциальное интерполированное выражение.
- V3139. Две или более case-ветки выполняют одни и те же действия.
- V6067. Две или более case-ветки выполняют одни и те же действия.
PVS-Studio 7.02 (25 апреля 2019 г.)
- PVS-Studio теперь поддерживает Visual Studio 2019. Проекты Visual C ++, .NET Framework и .NET Core из Visual Studio 2019 можно анализировать из самой IDE или из командной строки через PVS-Studio_Cmd.exe инструмент.
- Анализатор C # PVS-Studio теперь поддерживает новый синтаксис из C # 8.0.
- PVS-Studio C # теперь может обнаруживать потенциальные нулевые разыменования (правило V3080) внутри методов, когда потенциальное нулевое значение передается методу в качестве аргумента.
- для анализатора Java PVS-Studio теперь доступен в официальном репозитории плагинов JetBrains. Теперь вы также можете установить интеграцию с IDEA через наш установщик Windows.
- PVS-Studio для IDEA, Maven и Gradle теперь обеспечивают массовое подавление сообщений анализатора, которое можно использовать для скрытия предупреждений анализатора в устаревшем коде во время интеграции анализатора в процесс разработки.
- Compiler Monitoring for Windows теперь может корректно работать при мониторинге сборки в Keil uVision, если имя пользователя Windows содержит нелатинские символы.
- V1037. Две или более case-ветки выполняют одни и те же действия.
- V2530. MISRA. Цикл должен заканчиваться не более чем одним оператором break или goto.
- V2531. MISRA. Выражение основного типа «foo» не должно приводиться к основному типу «bar».
- V2532. MISRA. Строковый литерал не должен быть назначен объекту, если он не имеет типа указателя на char с атрибутом const.
- V2533. MISRA. Приведение в стиле C и функциональных обозначений не должно выполняться.
- V2534. MISRA. Счетчик цикла не должен иметь тип с плавающей запятой.
- V2535. MISRA. Недостижимый код не должен присутствовать в проекте.
- V2536. MISRA. Функция не должна содержать ярлыков, не используемых никакими операторами goto.
- V2537. MISRA. Функции не должны иметь неиспользуемых параметров.
- V2538. MISRA. Значение неинициализированной переменной использовать не следует.
- V2539. MISRA. Деструктор класса не должен завершаться с исключением.
- V2540. MISRA. Массивы не следует инициализировать частично.
- V2541. MISRA. Функцию не следует объявлять неявно.
- V2542. MISRA. Функция с ненулевым типом возврата должна возвращать значение из всех путей выхода.
Плагин
Плагины
PVS-Studio 7.01 (13 марта 2019)
- Лимита, существовавшего в пробной версии анализатора для плагина Visual Studio, ограничивающего количество сообщений анализатора, которые могут быть просмотрены в исходном коде, больше нет! Теперь PVS-Studio для Windows использует тот же пробный режим, что и PVS-Studio на других платформах - вы можете получить полнофункциональную пробную лицензию, заполнив форму на странице загрузки анализатора.
- PVS-Studio C # rule V3080 (null dereference) теперь может обнаруживать потенциальные разыменования, когда ссылка может получить null в одной из ветвей выполнения. Улучшен межпроцедурный анализ.
- PVS-Studio Плагин Visual Studio теперь может выполнять автоматические проверки для подавленных файлов, хранящихся в TFVC (Team Foundation Version Control). Этот режим можно включить на странице «Параметры ...> Определенные настройки анализатора».
- V1036. Потенциально опасная блокировка с двойной проверкой.
- V2529. MISRA. Любая метка должна быть объявлена в том же блоке, что и оператор goto, или в любом блоке, включающем ее.
PVS-Studio 7.00 (16 января 2019)
- PVS-Studio 7.00 теперь предоставляет статический анализатор для Java. Обо всех новых возможностях PVS-Studio 7.00 читайте в нашем блоге.
- PVS-Studio для SonarQube обновлен для поддержки последней версии SonarQube 7.4. Минимальная версия SonarQube, поддерживаемая плагином PVS-Studio, теперь повышена до LTS SonarQube версии 6.7.
- V2526. MISRA. Функция с именем «часы / время / difftime / ctime / asctime / gmtime / localtime / mktime» не должна использоваться.
- V2527. MISRA. Выражение-переключатель не должно иметь логического типа. Рассмотрите возможность использования конструкции if-else.
- V2528. MISRA. Оператор-запятая использовать не следует.
- V6001. Слева и справа от оператора foo находятся идентичные подвыражения.
- V6002. Оператор switch не охватывает все значения перечисления.
- V6003. Обнаружено использование шаблона if (A) {...} else if (A) {...}. Есть вероятность наличия логической ошибки.
- V6004. Оператор 'then' эквивалентен оператору 'else'.
- V6005. Переменная x присваивается самой себе.
- V6006. Объект создан, но не используется. Ключевое слово throw могло отсутствовать.
- V6007. Выражение всегда верно / неверно.
- V6008. Возможное нулевое разыменование.
- V6009.Функция получает нечетный аргумент.
- V6010. Необходимо использовать возвращаемое значение функции 'Foo'.
- V6011. Выражение содержит подозрительную смесь целых и вещественных типов
- V6012. Оператор '?:', Независимо от его условного выражения, всегда возвращает одно и то же значение.
- V6013. Сравнение массивов, строк, коллекций по ссылке. Возможно, было задумано сравнение на равенство.
- V6014. Странно, что этот метод всегда возвращает одно и то же значение NN.
- V6015. Рассмотрите возможность проверки выражения. Вероятно, здесь следует использовать '! =' / '- =' / '+ ='.
- V6016. Подозрительный доступ к элементу по постоянному индексу внутри цикла.
- V6017. Счетчик «X» не используется внутри вложенного цикла. Рассмотрите возможность проверки использования счетчика «Y».
- V6018. Постоянное выражение в операторе switch.
- V6019. Обнаружен недостижимый код. Возможно, ошибка присутствует.
- V6020. Деление или модификация деления на ноль.
- V6021. Значение присваивается переменной «x», но не используется.
- V6022. Параметр не используется внутри тела метода.
- V6023. Параметр «A» всегда перезаписывается в теле метода перед использованием.
- V6024. Оператор continue завершит цикл do {...} while (false), поскольку условие всегда ложно.
- V6025. Возможно, индекс выходит за рамки.
- V6026. Это значение уже присвоено переменной "b".
- V6027.Переменные инициализируются посредством вызова той же функции. Вероятно, это ошибка или неоптимизированный код.
- V6028. Идентичные выражения слева и справа от составного присваивания.
- V6029. Возможный неправильный порядок аргументов, переданных методу.
- V6030. Функция, расположенная справа от символа "|" и операторы '&' будут вызываться независимо от значения левого операнда. Попробуйте использовать '||' и вместо.
- V6031. Переменная «X» используется для этого цикла и для внешнего цикла.
- V6032. Странно, что тело функции «Foo_1» полностью эквивалентно телу функции «Foo_2».
- V6033. Элемент с таким ключом уже был добавлен.
- V6034. Сдвиг на N бит несовместим с размером шрифта.
- V6035. Двойное отрицание присутствует в выражении: !! x.
- V6036. Используется значение из неинициализированного необязательного параметра.
- V6037. Безусловный «break / continue / return / goto» внутри цикла.
- V6038.Сравнение с double.NaN бессмысленно. Вместо этого используйте метод double.isNaN ().
- V6039. Есть два оператора if с одинаковыми условными выражениями. Первый оператор if содержит метод return. Это означает, что второе утверждение if бессмысленно.
- V6040. Логика работы кода не соответствует его форматированию.
- V6041. Подозрительное присвоение внутри условного выражения оператора if / while / do ... while.
- V6042.Выражение проверяется на совместимость с типом «A», но приводится к типу «B».
- V6043. Рассмотрите возможность проверки оператора for. Начальное и конечное значения итератора совпадают.
- V6044. Постфиксное увеличение / уменьшение бессмысленно, потому что эта переменная перезаписывается.
- V6045. Подозрительное подвыражение в последовательности похожих сравнений.
- V6046. Неправильный формат. Рассмотрите возможность проверки элементов формата N функции 'Foo'.
- V6047.Возможно, что эта ветвь else должна применяться к предыдущему оператору if.
- V6048. Это выражение можно упростить. Один из операндов в операции равен NN. Наверное, это ошибка.
- V6049. Классы, которые определяют метод equals, также должны определять метод hashCode.
- V6050. Цикл инициализации класса присутствует.
- V6051. Использование операторов перехода в блоке finally может привести к потере необработанных исключений.
- V6052. Вызов переопределенного метода в конструкторе родительского класса может привести к использованию неинициализированных данных.
- V6053. Коллекция изменяется во время итерации. Может возникнуть ConcurrentModificationException.
- V6054. Классы не следует сравнивать по названию.
- V6055. Выражение внутри оператора assert может изменять состояние объекта.
- V6056. Реализация compareTo перегружает метод базового класса. Возможно, было задумано переопределение.
- V6057. Рассмотрите возможность проверки этого выражения. Выражение является чрезмерным или содержит опечатку.
- V6058. Функция "X" получает объекты несовместимых типов.
- V6059. Странное использование специального символа в регулярном выражении. Возможно, это было предназначено для побега.
- V6060. Ссылка использовалась до того, как была проверена на нулевое значение.
- V6061. Используемое постоянное значение представляется в восьмеричной форме.
- V6062. Возможна бесконечная рекурсия.
- V6063. Нечетная точка с запятой ';' после оператора if / foreach.
- V6064. Подозрительный вызов Thread.пробег().
- V6065. Несериализуемый класс не следует сериализовать.
- V6066. Передача в метод коллекции объектов несовместимых типов.
Плагин
История выпусков старых версий
Пожалуйста, прочтите историю выпусков старых версий здесь.
.