Для получения триального ключа
заполните форму ниже
Team License (базовая версия)
Enterprise License (расширенная версия)
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
RUB
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

Бесплатная лицензия PVS-Studio для специалистов Microsoft MVP
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

Для получения лицензии для вашего открытого
проекта заполните, пожалуйста, эту форму
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

Мне интересно попробовать плагин на:
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

Ваше сообщение отправлено.

Мы ответим вам на


Если вы так и не получили ответ, пожалуйста, проверьте папку
Spam/Junk и нажмите на письме кнопку "Не спам".
Так Вы не пропустите ответы от нашей команды.

>
>
PVS-Studio теперь поддерживает любую сб…

PVS-Studio теперь поддерживает любую сборочную систему на Windows и любой компилятор. Легко и "из коробки"

28 Мар 2014

Сейчас в PVS-Studio мы делаем бомбу!

0243_CLMonitoring_ru/image1.png

В следующей версии PVS-Studio 5.15 сможет проверять проекты, которые собираются абсолютно в любой сборочной системе: Makefile, Visual Studio Project, собственная система сборки на основе Python, Bash или что там еще... Теперь мы можем просто "наблюдать" за вызовами компилятора. И собирать всю необходимую информацию для запуска анализа автоматически. Более того, это работает с любым (разумным) компилятором C/C++, который запускается в Windows. Хотите подробностей?

Как работает плагин к Visual Studio и почему это ограничивало возможность использования?

Изначально PVS-Studio это плагин для Microsoft Visual C++. Взаимодействие со средой разработки заключается в двух аспектах. Во-первых, это интеграция в пользовательский интерфейс. Ведь удобно работать с инструментом из привычной среды. Во-вторых, это получения параметров компиляции файлов для того, чтобы провести правильный анализ.

Для тех, кто не очень знаком с механизмом работы анализаторов кода (и в частности PVS-Studio), я напомню. Прежде, чем выполнять анализ, необходимо выполнить препроцессирование, т.е. раскрыть все #include и #define. Это делается для того, чтобы узнать дополнительную информацию об используемых типах данных прежде всего.

Плагин PVS-Studio собирал параметры компиляции с использованием API среды Visual Studio и запускал препроцессирование самостоятельно. Теперь мы научились следить за тем, с какими параметрами запускается компилятор и "повторять" его вызов с ключом "выполнить препроцессирование". А затем уже запускать анализатор. Это ничего не меняет для плагина, в нем так и остается старый механизм. Но для некоторых проектов (даже для некоторых родных проектов Visual C++) этот механизм не мог быть использован. О каких случаях идет речь?

Во-первых, если у вас Makefile-проект, который собирается, например, с помощью nmake. Тогда API среды Visual Studio не позволяло узнать плагину параметры компиляции и вызвать препроцессированние. Конечно, вы всегда могли встроить вызов PVS-Studio в Makefile. Но, будем честны, это не самое удобное решение, которое можно предложить. Нет, конечно у нас есть пользователи, которые используют PVS-Studio именно так. Но многих такой сценарий отпугивал.

Во-вторых, если у вас самописная система сборки, которая вызывает компилятор из скриптов, то это хоть и похоже на Makefile, то только в теории. На практике модифицировать такую систему сборки может часто только ее автор, который может быть не доступен. И попробовать PVS-Studio на таком проекте оказывается почти невозможно.

Другими словами, нередко возникали ситуации, что вроде и проект собирается компилятором Visual C++, и есть желание попробовать PVS-Studio. Но это оказывалось не очень легко и желание плавно сходило на нет...

Как мы решили эту проблему?

Мы разработали специальную утилиту мониторинга вызова компиляторов. Она работает с основными компиляторами для Windows, но, как и прежде, наш главный фокус: пользователи Visual C++.

0243_CLMonitoring_ru/image2.png

Инструмент для мониторинга просто перехватывает все вызовы компилятора и затем запускает компилятор еще раз с параметров "препроцессировать файл", после чего уже вызывает анализатор. Главная прелесть в том, что все это делается абсолютно прозрачно для пользователя и повторить это может любой.

Причем мы предоставляем два разных способа воспользоваться этой возможностью.

Вариант 1 – Мониторинг с графическим интерфейсом

Итак, предположим вы получили доступ к исходникам Unreal Engine 4. Вы открываете солюшен в Visual Studio и видите, что это nmake-based проект, поэтому проверить его с помощью плагина PVS-Studio нельзя. Это не проблема. Вы делаете следующее:

  • Запускаете PVS-Studio Standalone.
  • Нажимаете кнопку "Compiler Monitoring", где выбираете платформу x64 для мониторинга. Ведь в Unreal Engine 4 вы будете собирать 64-битную версию.
  • Нажав на кнопку "Start Monitoring" вы увидите, что включился режим наблюдения за вызовами компилятора.
  • Теперь вы идете в Visual Studio и нажимаете кнопку Build – пошла сборка проекта. При этом в окне мониторинга вы видите, что перехватываются вызовы компилятора. Обратите внимание, что там пишется количество перехваченных вызов, а не количество файлов с кодом. Дело в том, что часто компилятор запускается с несколькими файлами в аргументах. Поэтому количество запусков компилятора меньше или равно количеству файлов.
  • Когда сборка в Visual Studio закончилась, вы нажимаете кнопку Stop Monitoring. И тогда начинается работа PVS-Studio. Файлы препроцессируются и анализируются. Диагностические сообщения появляются в окне утилиты PVS-Studio Standalone. Вы можете сразу начать с ними работать. Но я рекомендую дождаться завершения анализа, сохранить полученный результат проверки в файл UE4.plog. Затем закрыть PVS-Studio Standalone, открыть файл UE4.plog из среды Visual Studio с помощью меню PVS-Studio и работать с результатами проверки уже там. Почему? Да потому что в среде Visual Studio у вас будет IntelliSense, и вы сможете легко делать навигацию по коду, смотреть значения макросов, искать объявления переменных. Все это конечно можно делать и в PVS-Studio Standalone, но будем честны – до Visual Studio нашему инструменту далеко по удобству использованию.

Таким простым способом вы можете проверять проекты, используя графический интерфейс мониторинга в PVS-Studio. Но ведь бывает удобно еще и из командной строки запускать мониторинг? Об этом в следующем разделе.

Вариант 2 – Мониторинг с интерфейсом командной строки

Но бывает и так, что графический интерфейс для мониторинга не очень удобен. Предположим, мы хотим проверить Qt 5.2. Для этого мы скачиваем дистрибутив в виде архива, распаковываем его. Запускаем Visual Studio 2012 Command Promt (для правильного окружения), переходим в папку с Qt и делаем следующее:

  • Запускаем режим мониторинга:

"C:\Program Files (x86)\PVS-Studio\CLMonitor.exe" monitor

Программа сразу завершится, но оставит "следящий модуль" в памяти.

  • Запускаем configure.exe – это программа из пакета Qt, которая подготавливает скрипт для сборки.
  • Запускаем nmake – откиньтесь на спинку кресла и подождите, пока Qt соберется.
  • Когда сборка Qt завершилась, то надо сказать мониторингу, что пора закончить следить и начать делать анализ (для платформы Win32, результаты сохранить в log):

"C:\Program Files (x86)\PVS-Studio\CLMonitor.exe" analyze C:\Qt5.plog Win32

  • Когда анализ будет завершен, результат работы анализатора будет сохранен в plog-файле. Я не рекомендую работать с логом напрямую. Лучше открыть его в PVS-Studio Standalone, там работать с логом намного удобнее.

Как видно, проверять проекты с любой системой сборки из командной строки ничуть не сложнее, чем при использовании пользовательского интерфейса. Те же 5 простых пунктов.

О проблемах и ограничениях

Каких-либо принципиальных проблем в технологии мониторинга мы (пока?) не выявили. Но о некоторых нюансах стоит все-таки знать.

Во-первых, мониторинг перехватывает все вызовы компилятора. А это значит, что если вы запустите несколько разных процессов на сборку, то перехвачены будут все. И проанализированы. То есть в результатах проверки будет каша из правильного и "чужого" проекта. Не забывайте об этом и не запускайте никакие другие процессы сборки во время работы мониторинга.

Во-вторых, иногда бывают нюансы с precompiled headers. Нередко бывает так, что путь до прекомпилированных заголовков отсутствует в списке include-папок. При этом компилятор находит такие заголовки, а препроцессор (являющийся часть компилятора!) – уже не находит. Здесь решение простое – добавить явно путь до некоторых включаемых файлов с список include-папок.

Trial Mode

Теперь небольшая ложка дегтя. В PVS-Studio есть триальный режим, который ограничивает клики в списке обнаруженных проблем. Однако при использовании PVS-Studio из командной строки и в режиме мониторинга имена файлов совсем не показываются. Вместо этого выдаются сообщения "Trial Restriction". Но вы всё же можете познакомиться как работает режим мониторинга и на триале, используя UI приложение PVS-Studio Standalone (пункт меню Tools -> Analyze your files...).

Популярные статьи по теме
Обрабатывать ли в PVS-Studio вывод других инструментов?

Дата: 26 Май 2022

Автор: Андрей Карпов

Анализатор PVS-Studio умеет "схлопывать" повторяющиеся предупреждения. Предоставляет возможность задать baseline, что позволяет легко внедрять статический анализ в legacy-проекты. Стоит ли предостави…
15000 ошибок в открытых проектах

Дата: 24 Май 2022

Автор: Андрей Карпов

Количество багов в нашей коллекции перевалило за отметку 15000. Именно такое количество ошибок обнаружила команда PVS-Studio в различных открытых проектах. Особенно интересно, что это всего лишь побо…
Комментарии в коде как вид искусства

Дата: 04 Май 2022

Автор: Сергей Хренов

Приветствую всех программистов, а также сочувствующих. Кто из нас хотя бы раз в жизни не оставлял комментарии в коде? Был ли это ваш код, а может, чужой? Что за комментарии вы написали: полезные или …
Visual Studio 2022 стильно и свежо. История о её поддержке в PVS-Studio

Дата: 15 Фев 2022

Автор: Николай Миронов

Кажется, анонс Visual Studio 2022 был только недавно, и вот она уже вышла. Это означало ровно одно – поддержать данную IDE нужно в ближайшем релизе PVS-Studio. О том, с какими сложностями пришлось ст…
Лучшие срабатывания статического анализатора

Дата: 29 Окт 2021

Автор: Максим Звягинцев

У всех, кто запускал статический анализатор в первый раз на большом проекте, был небольшой шок по поводу сотен, тысяч или даже десятков тысяч предупреждений. Как-то грустно становится после такого. Т…

Комментарии (0)

Следующие комментарии
Этот сайт использует куки и другие технологии, чтобы предоставить вам более персонализированный опыт. Продолжая просмотр страниц нашего веб-сайта, вы принимаете условия использования этих файлов. Если вы не хотите, чтобы ваши данные обрабатывались, пожалуйста, покиньте данный сайт. Подробнее →
Принять