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

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

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

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

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

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

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


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

>
>
>
Какие баги нашёл LibreOffce в PVS-Studi…

Какие баги нашёл LibreOffce в PVS-Studio?

24 Фев 2015

Обычно мы проверяем с помощью PVS-Studio какой-нибудь проект. В этот раз вышло по-другому. Мы проверили PVS-Studio с помощью LibreOffice :-). А потом все-таки смогли и наоборот проверить.

0307_PVS-StudioIssuesInLibreOffice_ru/image1.png

Введение

Статьи о проверках проектов вызывают самую разную реакцию у читателей: от "Сколько уже можно это рекламировать?" до "Огромное спасибо! PVS-Studio — действительно отличный инструмент." Справедливости ради хочется сказать, что в проверке проекта не учувствуют специалисты по рекламе, прикладывают усилия только разработчики PVS-Studio и переводчик. Вклад анализатора в open-source, безусловно присутствует не малый. Разработчики не всегда заинтересованы в обратной связи, но письмо о проверке получают и найденные ошибки исправляют. На примере проекта LibreOffice, статья о котором тоже скоро будет доступна, хочу рассказать о влиянии проверок проектов на сам анализатор и о проделанной работе.

Об анализаторе

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

Проект LibreOffice оказался хорошим тестом для статического анализатора и заставил поработать каждого из команды PVS-Studio.

Расскажу о проблемах, с которыми мы столкнулись при проверке.

Утечка памяти

LibreOffice собирается с помощью MS Visual C++ 2013 в Cygwin. Утилита PVS-Studio Standalone относительно недавно обзавелась возможностью проверять любые проекты, не вдаваясь в подробности сборочной системы, достаточно просто включить "Compiler Monitoring" и запустить сборку проекта. Подробнее об этой возможности можно прочитать в статье: PVS-Studio теперь поддерживает любую сборочную систему на Windows и любой компилятор. Легко и "из коробки". Если вкратце, то из запущенных процессов в Windows извлекается информация, необходимая для запуска процесса в этом же окружении. Так вот для хранения строки запуска, текущей директории, переменных окружения и т.п. выделяется несколько сотен килобайт неуправляемой памяти. Если процесс относится к поддерживаемому компилятору, то информация копировалась в управляемую память, неуправляемая память в любом случае освобождалась, НО, для переменных окружения, как оказалось, этого не делалось. Для каждого процесса не освобождалось в среднем 500 килобайт. На проверяемых ранее проектах это не приводило к серьёзным проблемам (по крайней мере мы не замечали, что что-то не в порядке и пользователи не жаловались). Сборка Make'ом LibreOffice сопровождается огромным количеством запускаемых процессов, не относящихся к компилятору. За несколько часов сборки было запущено более ста тысяч процессов, в итоге "накапало" 25 гигабайт. После исправления данного места, размер памяти используемой программой мониторинга уменьшился до 1.8 гб.

Длительная проверка

Весь процесс сборки, включая компиляцию библиотек, содержал 12245 файлов с исходным кодом. К сожалению, процесс проверки такого количества файлов занял около 15 часов, поэтому в ядре анализатора были проведены некоторые оптимизации, которые позволили перепроверить проект уже за 9 часов. Это в 2 раза больше времени сборки проекта, но это уже вполне адекватная и приемлемая скорость работы.

Сложности анализа

Если анализатору не удаётся разобрать какие-нибудь конструкции в исходном коде, то он выдаёт сообщения V001 на этот файл. Такой участок кода анализатором пропускается и в очень редких случаях влияет на результаты проверки. Тем не менее, сообщения V001 на этом проекте были изучены и поправлены.

Старый формат путей

При проверке проекта были обнаружены системные пути в старом формате, например, "C:/PROGRA~2/MICROS~4.0/VC/include". Такой формат полностью поддерживается ядром анализатора и плагином, но фильтрация сообщений на системных файлах не сработала, поэтому были внесены соответствующие правки.

Неудавшаяся сериализация

Данная проблема не совсем относится к продуктам PVS-Studio. В утилите PVS-Studio Standalone, в которой проверялся LibreOffice, недавно была улучшена навигация по файлам, которая теперь позволяет переходить по включаемым заголовках и выполнять поиск типов и переменных в зависимых файлах. Все зависимости собираются во время проверки и сохраняются возле *.plog файла. К сожалению, стандартному классу System.Runtime.Serialization.Formatters.Binary.BinaryFormatter не удаётся сериализовать структуры большого объёма - возникает внутренне исключение, поэтому теперь используется библиотека Protocol Buffers, которая отлично справляется с той же задачей.

Заключение

Результатом проверки LibreOffice стала статья, которая призвана сделать лучше ещё один open-source проект, и хорошие правки в продуктах PVS-Studio. Статья о найденных ошибка в LibreOffice будет опубликована в ближайшие дни. А мы хотим сказать спасибо проекту LibreOffice, который помог нам сделать наш анализатор лучше!

Дополнительные ссылки

Популярные статьи по теме
Эффект последней строки

Дата: 31 Май 2014

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

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

Дата: 30 Янв 2019

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

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

Дата: 27 Июн 2017

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

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

Дата: 22 Окт 2018

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

PVS-Studio, как и другие статические анализаторы кода, часто выдаёт ложные срабатывания. Но не стоит спешить считать странные срабатывания ложными. Это короткая история о том, как PVS-Studio вновь ок…
Характеристики анализатора PVS-Studio на примере EFL Core Libraries, 10-15% ложных срабатываний

Дата: 31 Июл 2017

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

После большой статьи про проверку операционной системы Tizen мне было задано много вопросов о проценте ложных срабатываний и о плотности ошибок (сколько ошибок PVS-Studio выявляет на 1000 строк кода)…
Технологии, используемые в анализаторе кода PVS-Studio для поиска ошибок и потенциальных уязвимостей

Дата: 21 Ноя 2018

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

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

Дата: 16 Окт 2017

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

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

Дата: 22 Дек 2018

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

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

Дата: 14 Апр 2016

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

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

Дата: 19 Май 2017

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

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

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

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

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