LINUX.ORG.RU

Диагностики GCC — это хорошо, но недостаточно

 , , , ,


0

7

С++ компилятор, реализованный в GCC, умеет выполнять множество полезных диагностик. Эти диагностики весьма хороши, и многие считают, что их более чем достаточно. В том числе я нередко слышу, что анализатор PVS-Studio не нужен, так как все те же диагностики имеются у GCC. Конечно, я знаю, что это не так. Это то же самое как сравнивать бесплатный Paint.NET с платным Photoshop. Вроде одно и то же, и функции общие есть. Но платный профессиональный Photoshop всегда будет мощнее, чем такие инструменты как Paint.NET.

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

Проверка GCC была ответственным испытанием для бета-версии PVS-Studio for Linux. Это и новая операционная система, это огромное количество макросов, это и код, который уже проверен многими инструментами, и найти в котором хоть что-то непростая задача.

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

Находим ошибки в коде компилятора GCC с помощью анализатора PVS-Studio

Перемещено Aceler из proprietary

<grammarnazi>

Проект написан на языке C и C++.
Я регулярно публикую ссылки на интересные статьи по программированию на языке C и C++,...

Нет такого языка «C и С++». Поэтому правильнее было бы «на языках C и C++». А то читаешь и недоумеваешь, как автор умудрился написать настолько мощный анализатор, но при этом считает C и C++ одним языком.

</grammarnazi>

eao197 ★★★ ()

Если программист действительно заботится о качестве кода, он должен использовать такие специализированные инструменты, как PVS-Studio.

Погромист должен, но если у вас маленький проект, то PVS-Studio вам не нужен и вообще присылайте письма с корпоративных ящиков, тогда мы сообщим вам цену. Может быть.

anonymous ()

В статье попадается интересное:

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

Автор анализатора кода вручную раскрывает макросы, шок.

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

Я как-то ковырялся с GCC-шным GIMPLE, и даже сделал что-то вроде простенького анализатора. Он смотрел, чтобы после каждого user-defined acquire вызывался соответствующий release (с тем же аргументом лока, адресом или хендлом). Ну, типа *alloc/free, pthread_mutex_lock/unlock, open/close. Но это очень нудное занятие, ну его.

Пусть лучше Андрей Карпов допиливает свой PVS, потом же наверняка сделает триал. Вот тогда и попроверяем свой г-код, да.

vmx ★★ ()
Ответ на: комментарий от eao197

Нет такого языка «C и С++». Поэтому правильнее было бы «на языках C и C++». А то читаешь и недоумеваешь, как автор умудрился написать настолько мощный анализатор, но при этом считает C и C++ одним языком.

Не понимаю, отчего здесь вспыхивает такая ненависть, когда я упоминаю про C/C++ или «языке C и С++». Всем ведь понятно, что имеется в виду. И часто пишут именно так. Я и многие грамотные программисты понимают, что это разные языки, но также и понимают почему их часто используют в паре. Не виду в записи C/C++ ничего неестественного. Это следует читать как «язык C или язык C++». Никто ведь не ругается, что нет языка С/С++/С#. Я думаю, такие комментарии появляются в том случае, если нечего сказать по существу. Тогда начинают придираться к отдельным словам и фразам.

Andrey_Karpov_2009 ()
Ответ на: комментарий от anonymous

Погромист должен, но если у вас маленький проект, то PVS-Studio вам не нужен и вообще присылайте письма с корпоративных ящиков, тогда мы сообщим вам цену. Может быть.

Добро пожаловать в реальность. Программисты хотят получать зарплату. А статический анализ это B2B.

Andrey_Karpov_2009 ()
Ответ на: комментарий от invy

Что реклама какойто мутной проприетарщины делает в разделе development?

Моя миссия рассказать программистам, что существует такая методология как «статический анализ кода». Объяснить, что они могут экономить деньги, силы и продемонстрировать на примерах как это работает. У нас в России уровень разработки крайне отстаёт и я считаю своё занятие крайне положительным.

Andrey_Karpov_2009 ()
Ответ на: комментарий от eao197

А то читаешь и недоумеваешь, как автор умудрился написать настолько мощный анализатор, но при этом считает C и C++ одним языком.

Просто автору мощного анализатора необязательно быть занудой :-)

anonymous ()
Ответ на: комментарий от Andrey_Karpov_2009

Я думаю, такие комментарии появляются в том случае, если нечего сказать по существу. Тогда начинают придираться к отдельным словам и фразам.

Не обращай внимания :-)

anonymous ()
Ответ на: комментарий от invy

Забаньте этого торгаша. Что реклама какойто мутной проприетарщины делает в разделе development?

«Торгаш» сделал полезную программу :-) А всякий полезный труд достоин оплаты :-) И вовсе не обязательно чтить нищебродство во имя фанатизма :-)

anonymous ()
Ответ на: комментарий от Andrey_Karpov_2009

Да вы небось ещё и жрать каждый день хотите, вообще совесть потеряли.

Пиши вместо «программист должен» «команда програмистов должна» или «бизнес должен». А то ты обращаешься к одиночкам, хотя сам с ними не хочешь работать.

anonymous ()
Ответ на: комментарий от vmx

Я как-то ковырялся с GCC-шным GIMPLE, и даже сделал что-то вроде простенького анализатора. Он смотрел, чтобы после каждого user-defined acquire вызывался соответствующий release (с тем же аргументом лока, адресом или хендлом). Ну, типа *alloc/free, pthread_mutex_lock/unlock, open/close.

Такие вещи должны проверяться динамическим анализатором, а не статическим, так как путей выполнения между первым и вторым может быть много (а если он всегда один, то используй RAII и не парься:)

annulen ★★★★★ ()
Ответ на: комментарий от Andrey_Karpov_2009

Очевидно, что не понимаете. Как по мне, так существуют общепринятые выражения «языки C/C++», «на языках C/C++» и «на языках C и C++». Но не «на языке C и C++». По вашей же ссылке:

В ней в доступной форме рассмотрены не только популярные языки программирования С/C++, но и изложены основные принципы визуального проектирования и событийного программирования...Детальное объяснение материала и подробные комментарии к примерам помогут вам самостоятельно освоить языки C/C++ и приемы работы...

Когда вы говорите про «язык С и C++», то возникает странное ощущение. То вы на профильных форумах задаетесь вопросом «Почему люди часто ошибаются при написании простых функций сравнения?» То пишете так, что не понятно, представляете ли вы себе разницу между C и C++. Или для вас просто русский не родной. Или в своих текстах вы не уделяете внимания деталям (тогда как вы уделяете внимание деталям в своем коде?)...

Я думаю, такие комментарии появляются в том случае, если нечего сказать по существу.

Вы по-другому подумайте: вам показали фрагмент вашей в статье, который вызывает недоумение. Поправить его просто. Тем самым вы сделаете свою статью чуть лучше.

Но вместо этого вы ищете врагов там, где их нет.

Ну а если вам так уж хочется по существу, то пожалуйста: продвижение своего продукта, который еще и нацелен на разработчиков, — это дело сложное и неблагодарное (по себе знаю, что это такое). Но вам бы стоило или грамотного маркетолога нанять, или же самому подучиться маркетингу и PR-технологиям. Т.к. то, как вы пытаетесь продвигать свой продукт сейчас — это фейспалм. Очевидно, что вы сделали крутой инструмент и примеры проблем, которые он вылавливает, вызывают порой восхищение. Ну так расскажите об этом так, чтобы вашим инструментом захотелось воспользоваться. Пока же получается так: штука вроде бы крутая, но ее толкают какие-то жлобы, общающиеся в стиле «платите или валите».

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

eao197 ★★★ ()
Ответ на: комментарий от Andrey_Karpov_2009

Я и многие грамотные программисты понимают, что это разные языки, но также и понимают почему их часто используют в паре. Не виду в записи C/C++ ничего неестественного.

и понимают почему их часто используют в паре

Поясните плебеям.

Stil ★★★★★ ()

Андрей, вы лучше расскажите что делать тем, кого вы взяли в тестеры линуксовой версией. Я до сих пор так и не понял, что мне делать с логами анализатора. Если правильный путь делать grep по логам, то это стоит отразить в readme.

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

После того, как я получил доступ к линуксовой бете, то я натравил анализатор на тестовый игровой проект с обновленной версией движка. В выхлопе были сообщения для /usr/include/* и ругань на мой дефайн assert (clang-анализатор тоже ругается на мой assert). Я сомневаюсь, что в моем тестовом проекте и движке нет ошибок.

andreyu ★★★★★ ()
Ответ на: комментарий от Andrey_Karpov_2009

Моя миссия рассказать программистам, что существует такая методология как «статический анализ кода»

Если бы это было так, вы бы тут писали о статическом анализе кода. Глядя же на ваши темы, очевидно, что ваша миссия — реклама вашего продукта и не более того.

ecko ★★★ ()
Ответ на: комментарий от invy

Забаньте этого торгаша.

Что за совковское отношение? Мы все торгаши, поскольку продаем свой труд. Альтруисты есть только в сказках, в реальности они все зарабатывают себе на проживание.

Что реклама какойто мутной проприетарщины делает в разделе development?

Инструмент напрямую относится к разработке.

andreyu ★★★★★ ()
Ответ на: комментарий от Andrey_Karpov_2009

Моя миссия рассказать программистам, что существует такая методология как «статический анализ кода».

Это наглая ложь. Твоя миссия - продать pvs studio. Если бы ты хотел о статическом анализе кода рассказывать то делал бы как NASA - рекомендовал бы использовать сразу кучу разных анализаторов, а не зацикливаться на своей поделке, и учил бы что не бывает анализатора, умеющего сразу всё и лучше всех.

Объяснить, что они могут экономить деньги, силы и продемонстрировать на примерах как это работает.

Тогда надо начинать объяснение со сборки -Wall и -Werror сразу как минимум двумя открытыми компиляторами, а не с рекламы pvs studio.

invy ★★★★★ ()
Последнее исправление: invy (всего исправлений: 2)
Ответ на: комментарий от ecko

Если бы это было так, вы бы тут писали о статическом анализе кода.

Бизнесу, имеющему отношение к разработке ПО, не интересны подробности этой предметной области :-)

Глядя же на ваши темы, очевидно, что ваша миссия — реклама вашего продукта и не более того.

Всякому бизнесу интересны инструменты для зарабатывания денег :-)

anonymous ()
Ответ на: комментарий от invy

Это наглая ложь.

Это реальность :-)

Твоя миссия - продать pvs studio.

Это нормально :-)

Если бы ты хотел о статическом анализе кода рассказывать то делал бы как NASA

NASA далеко, их там очень много и у них такой бюджет, что тебе и не снилось :-)

- рекомендовал бы использовать сразу кучу разных анализаторов, а не зацикливаться на своей поделке

Это не нормально не уважать труд, тем паче труд коллег :-)

и учил бы что не бывает анализатора, умеющего сразу всё и лучше всех.

Докажи, что не бывает :-)

anonymous ()
Ответ на: комментарий от EXL

Собственно продолжаю это делать и, в обозримом будущем, буду продолжать это делать.

Поэтому для меня фраза «язык C и C++» безграмотна с точки зрения разработчика софта. Что ухудшает впечатление от статьи. Если заменить на «языки C и C++» или «языки C/C++» статья точно хуже не станет.

Ну и по мне «язык C и C++» в статье, это как что-то вроде:

int i = 0, j = 1, k = 2;
i = 0;
Понятно, что ничего страшного нет, но выглядит корявенько.

eao197 ★★★ ()
Ответ на: комментарий от eao197

Поэтому для меня фраза «язык C и C++» безграмотна с точки зрения разработчика софта.

А фраза «ламповая сишка», которую ты применяешь раз от раза, для тебя грамотна с точки зрения разработчика софта? :-) Лол :-)

anonymous ()

Проверка GCC была ответственным испытанием для бета-версии PVS-Studio for Linux.

Неужели вы всё таки решились создать продукт для Linux. После стольких-то лет отбрыкиваний. Внушает уважение.

mono ★★★★★ ()

Я могу демонстрировать, что изучать предупреждения GCC это хорошо

Пишет «В соответствии с требованиями законодательства Российской Федерации доступ к запрашиваемому Интернет-ресурсу http://radikal.ru/big/c5bde637a6684f8e9f353a91842cee8a заблокирован.» Что ж ты там такое демонстрировал?

hotpil ★★ ()
Ответ на: комментарий от anonymous

Зачем ты так со своей микроволновкой, чувак? Вонять же будет.

P.S. Копирасты должны висеть на фонарях.

Это же оффтопик здесь, какой из ТС копираст. Просто бизнес-от-технарей. По-моему, достойно толики уважения. Не всем же обкладываться тоннами менеджеров и маркетологов со старта. Придумал он такой путь выхода в плюс, не самый плохой. Да и явно не жируют.

Вот михалкова бы задушил собственными руками!

PtiCa ★★★★ ()
Последнее исправление: PtiCa (всего исправлений: 1)