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

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

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

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

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

** На сайте установлена reCAPTCHA и применяются
Политика конфиденциальности и Условия использования Google.
Ваше сообщение отправлено.

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


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

>
>
Из подвала секретной лаборатории разраб…

Из подвала секретной лаборатории разработчиков PVS-Studio...

16 Авг 2013

Время от времени мы рассказываем о своих внутренних исследованиях и разработках, которые происходят в команде разработчиков статического анализатора кода PVS-Studio для C/C++. Сегодняшняя история об очередной новинке, которую мы готовим в рамках нашего продукта.

Поддержка C++ Builder была прекращена в PVS-Studio после версии 5.20. По всем возникшим вопросам вы можете обратиться в нашу поддержку. Анализ на основе имеющихся препроцессированных файлов также больше не поддерживается. Используйте режим отслеживания запусков компилятора, позволяющий автоматически генерировать и анализировать препроцессированные файлы в ходе сборки проекта.

Тем, кто следит за нашим проектом (а тем более пользуется им) известно, что наш анализатор изначально был плагином только для Visual Studio. Затем стало возможно пользоваться им как консольным приложением, встраиваемым в Makefile (спросите меня как, если не знаете). Потом, в начале этого года у нас появилась интеграция в C++Builder. Кстати у нас пока довольно мало пользователей под C++Builder, и мы не совсем понимаем почему. И вот недавно мы задумались над так называемым standalone приложением.

Вообще как для пользователя выглядит идеальный статический анализатор кода (в вакууме или нет)? Мне кажется, на основе моего опыта работы в этой области, идеальный анализатор должен выглядеть так. Пользователь скачивает утилиту, запускает ее, указывает папку с кодом и нажимает большую зеленую кнопку: "Найти все ошибки!". Никакой настройки, никакой "интеграции в проект". Ведь пользователю это не нужно? Да, не нужно. Но нужно анализатору кода, к сожалению. Как минимум, нужна информация по #include и #define, если мы говорим о C++. Она нужна для того, чтобы выполнить препроцессирование кода.

И тут мы приходим к необходимости выбора одного из вариантов:

  • Либо инструмент должен сам извлекать эту информацию из файла проекта (как делают наши плагины для Visual C++ и C++Builder).
  • Либо инструмент может получать эту информацию, если она ему будет передана в Makefile (как работает наша версия для командной строки).
  • Либо инструмент заставляет пользователя мучительно вбивать все папки для #include и параметры #define, что почти невозможно, т.к. пользователю это сделать чрезвычайно сложно.
  • Либо... придумать какой-то еще вариант.

Мы пошли по четвертому пути и решили попробовать так. А что если в качестве исходной информации анализатор будет получать не обычные исходники в виде .cpp-файлов, а уже препроцессированные файлы. Т.е. файлы, которые обработаны препроцессором. Это нас избавит от необходимости вызывать препроцессор, а соответственно знать эти #include и #define.

Конечно, это немного не совпадает с описанным выше идеальным вариантом анализатора. Но с другой стороны, это позволяет использовать PVS-Studio для практически любого С/С++ проекта, в какой бы среде разработки вы его не вели.

Итак, разрабатываемый в секретных лабораториях нашей команды инструмент выглядит примерно так:

0206_Secret_Devs_ru/image1.png

Рисунок 1 – Диалог запуска проверки препроцессированных файлов.

Во-первых, мы указываем папку, где находится препроцессированные .i-файлы. Их и будет анализировать наш инструмент.

Во-вторых, мы указываем папку с исходниками. Это нужно для того, чтобы ошибки выявлять более точно. Кроме того, всегда лучше делать (в дальнейшем) навигацию по пользовательским .cpp-файлам, а не по не совсем понятным человеку .i-файлам.

В-третьих, мы указываем папку, в которой находятся системные include-файлы. Самые-самые базовые, вроде <string> или <stream>. Для чего? Чтобы анализатор знал, что вот здесь лежат те файлы, на которые выдавать диагностические сообщения не надо.

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

0206_Secret_Devs_ru/image2.png

Рисунок 2 – Список диагностических сообщений после проверки i-файлов.

Обращаю внимание читателей на то, что это не Visual Studio или RAD Studio. Это отдельная утилита, которая повторяет полностью (точнее использует) окно PVS-Studio. В ней есть и встроенный редактор кода (Scintilla из Notepad++), который позволяет работать с ошибкам достаточно полноценно:

0206_Secret_Devs_ru/image3.png

Рисунок 3 – Полноценный редактор кода.

Естественно этот пост не тянет на полноценное описание нашей новой секретной утилиты. Однако на несколько вопросов я уже могу ответить.

Кому НЕ нужна эта утилита? Тем, кто спокойно может проверить свой проект в PVS-Studio с помощью интеграции в Visual Studio и C++Builder. Кому НУЖНА эта утилита? Тем, кто хочет проверять свой код с помощью PVS-Studio и использует другие среды разработки и/или проектные файлы, в которые сложно встроить нашу утилиту командной строки.

Какой бы вы хотели видеть такую утилиту? Удобен ли вам режим проверки по готовым препроцессированным файлам? Чего не хватает в такой утилите? Выпускать ли нам ее или забросить дальнейшие разработки этой утилиты, так как всех устраивает наша интеграция в среды от Microsoft/Embarcadero?

P.S. Кстати мы обновили дизайн нашей базы ошибок, обнаруженных в open source проектах.

Популярные статьи по теме
PVS-Studio для Java

Дата: 17 Янв 2019

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

В седьмой версии статического анализатора PVS-Studio мы добавили поддержку языка Java. Пришло время немного рассказать, как мы начинали делать поддержку языка Java, что у нас получилось и какие дальн…
PVS-Studio ROI

Дата: 30 Янв 2019

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

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

Дата: 31 Май 2014

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

Я изучил множество ошибок, возникающих в результате копирования кода. И утверждаю, что чаще всего ошибки допускают в последнем фрагменте однотипного кода. Ранее я не встречал в книгах описания этого …
Технологии, используемые в анализаторе кода PVS-Studio для поиска ошибок и потенциальных уязвимостей

Дата: 21 Ноя 2018

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

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

Дата: 20 Мар 2017

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

В своей предыдущей статье я писал, что мне не нравится подход, при котором статические анализаторы кода оцениваются с помощью синтетических тестов. В статье приводился пример, воспринимаемый анализат…
Бесплатный PVS-Studio для тех, кто развивает открытые проекты

Дата: 22 Дек 2018

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

В канун празднования нового 2019 года команда PVS-Studio решила сделать приятный подарок всем контрибьюторам open-source проектов, хостящихся на GitHub, GitLab или Bitbucket. Им предоставляется возмо…
Главный вопрос программирования, рефакторинга и всего такого

Дата: 14 Апр 2016

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

Вы угадали, ответ - "42". Здесь приводится 42 рекомендации по программированию, которые помогут избежать множества ошибок, сэкономить время и нервы. Автором рекомендаций выступает Андрей Карпов - тех…
Зло живёт в функциях сравнения

Дата: 19 Май 2017

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

Возможно, читатели помнят мою статью под названием "Эффект последней строки". В ней идёт речь о замеченной мной закономерности: ошибка чаще всего допускается в последней строке однотипных блоков текс…
Любите статический анализ кода!

Дата: 16 Окт 2017

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

Я в шоке от возможностей статического анализа кода, хотя сам участвую в разработке инструмента PVS-Studio. На днях я был искренне удивлён тому, что анализатор оказался умнее и внимательнее меня.
Статический анализ как часть процесса разработки Unreal Engine

Дата: 27 Июн 2017

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

Проект Unreal Engine развивается - добавляется новый код и изменятся уже написанный. Неизбежное следствие развития проекта - появление в коде новых ошибок, которые желательно выявлять как можно раньш…

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

Следующие комментарии

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