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

Я так и не понял, о чём пост: о превосходстве PVS-Studio над анализатором GCC или о том, что GCC проверили с помощью PVS-Studio?

http://radikal.ru/big/c5bde637a6684f8e9f353a91842cee8a

А, я понял. Вы хотите сказать, что если ваша PVS-Studio находит ошибки в GCC, то она лучше? Язабан.

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

Если писать неграмотно, то люди всё равно понимают, но осадочек остаётся.

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

А всякий полезный труд достоин оплаты :-)

Нет. Ты можешь попытаться это продать и заработать на этом, но просто по факту того, что ты там что-то потрудился, тебе никто ничего не должен.

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

Нет. Ты можешь попытаться это продать и заработать на этом, но просто по факту того, что ты там что-то потрудился, тебе никто ничего не должен.

Развивая эту великую логику можно сделать вывод, что уметь читать тоже никто не должен :-)

Было сказано, что трудящийся достоин оплаты, а не что Ванька обязан платить Петьке :-)

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

Бизнес, который посылает всех в даль при попытке купить продукт, не достоин никакого уважения.

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

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

Решиться-то он решился, только никому не даёт им пользоваться. И жалуется, что спроса нет.

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

Извините, не удержался.

Ну раз B2B, тогда второму би и надо вещать насколько это всё круто.

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

Сделайте версию для студентов и/или opensource и народ к вам потянется.

Но в принципе, для развлечения такие топики окей тут я думаю :)

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

Чини свою логику. «Кто-то кому-то должен» и нужность чего-либо себе не аналогичны.

трудящийся достоин оплаты

С чего бы? Хочешь оплату — заработай её. А то, что ты там говна навалил где-то никого особенно не заботит.

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

Бизнес, который посылает всех в даль при попытке купить продукт, не достоин никакого уважения.

Вы что-то путаете. Мы никогда не отворачивались от тех, кто хочет купить. :)

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

Мы не путаете, мы знаете, что у вас энтерпрайз головного мозга. Пишите лучше на хабр.

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

Чини свою логику. «Кто-то кому-то должен» и нужность чего-либо себе не аналогичны.

Смысла чинить логику нет :-) Смысл есть донести свою мысль, чтобы тебя поняли :-) А тебя вряд ли поняли :-)

С чего бы? Хочешь оплату — заработай её. А то, что ты там говна навалил где-то никого особенно не заботит.

Пойми, что если лично тебе не нужна куча говна за углом, то это не значит, что какой Иванушка не захочет её купить :-) Или ты думаешь, что все только зарабатывают тем, что нужно лично тебе? :-) Лол :-)

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

Ну вот и сумей продать, лалка энтерпрайзная. Что не залогинишься то? Мы все понимаем кто ты.

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

Ну вот и сумей продать, лалка энтерпрайзная. Что не залогинишься то? Мы все понимаем кто ты.

Какой понятливый :-) А кто сейчас не лалка энтерпрайзная? :-) Ты что ли? :-)

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

Мы не путаете, мы знаете, что у вас энтерпрайз головного мозга. Пишите лучше на хабр.

Туда мы пишем. Но раз мы подбираемся к Linux, то теперь нам надо и здесь присутствовать. Сами накликали нас сюда, говоря о необходимости Linux версии. :)

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

Антинаучная ересь! Сжечь его!

Сначала дай определение «научности» :-) Потом докажи что ересь :-)

И спички детям не игрушка :-) Лол :-)

anonymous
()

Какая-то странная бизнес модель - не говорить о цене продукта. Мол, вначале посмотрим сколько с вас можно содрать, потом назовём цену.

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

Андрей, достойнейший проект, достойнейший сайт, с удовольствием его читаю, так же косвенно видел над проектом, в котором принимаю участие тест PVS Linux над его кодом, исправили несколько незаметных багов (на удивление в нем их мало оказалось, кроме сторонних либ типа AngelSript) а на всяких хейтеров и придирастов не обращайте внимания. Удивляюсь вообще некоторым экземплярам то одно им не нравится то другое, а некоторые, судя по всему вообще не понимают о чем они не то что пишут - а о чем они думают =)

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

ну и естественно никакие там -Wall или прочее не видели эти баги, не вникал в стоимость, но какой бы она не была когда у меня будут деньги обязательно приобрету PVS (и из-за уважения хотя бы к сайту viva я не буду крякнутое брать)

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

Чего странного-то? Модель торгаша с радиорынка, который в ответ на вопрос «сколько стоит переходник?» сначала тебя с ног до головы взглядом окинет на предмет прилично ли одет.
Рекламирует так же.

anonymous
()

ну после PVS, Coverity у меня в проекте нашел тройку багов. на ней и остановились.

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

Такие вещи должны проверяться динамическим анализатором

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

У cppcheck например есть возможность добавлять свои alloc/dealloc функции, но он как-то неуверенно с этим работает. Даже на не очень сложной логике перестает определять утечки.

путей выполнения между первым и вторым может быть много

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

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

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

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

Перефразирую: что делает откровенная реклама в моём уютненьком development? Она несет полезную информацию? Нет - ибо реклама.

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

Если бы была хотя бы демо версия этого «сферического инструмента в вакууме», было бы о чем говорить. Её нету.

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

Если бы была хотя бы демо версия этого «сферического инструмента в вакууме», было бы о чем говорить. Её нету.

Есть под венду.

hateyoufeel ★★★★★
()

Честно говоря — не впечатлило. Ошибок там должно быть явно больше. Кроме того, те категории ошибок, с которыми в основном борются создатели компилятора, они совсем не из этой категории.

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

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

Намного чаще встречается ситуация, где компилятор генерит вроде бы правильный код, но он неэффективен (нерационально используются регистры, лишние инструкции). И тут ваш анализатор вообще бессилен.
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68027 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71923 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71343 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66152 - примеры таких багов, зарепорченных лично мной

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

Да, кстати. Попробуйте проверить своим анализатором этот самый CompCert — https://github.com/AbsInt/CompCert
Похоже что ничего не выйдет - ocaml там

SZT ★★★★★
()
Последнее исправление: SZT (всего исправлений: 1)
Ответ на: комментарий от Andrey_Karpov_2009

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

Да? А выглядит как реклама этого вашего PVS studio. Вот когда откроете исходники, тогда добро пожаловать. А пока еще не известно, что у вас там унутре.

Deleted
()
Ответ на: комментарий от SZT

Подобные ситуации с довольно малой вероятностью можно выловить вашим статическим анализатором

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

Намного чаще встречается ситуация, где компилятор генерит вроде бы правильный код, но он неэффективен (нерационально используются регистры, лишние инструкции).

И для этого есть свои инструменты, третьи.

ИЧСХ, все это нисколько не отменяет полезность статического анализа как такового.

Или какими-нибудь формальными методами, типа как в CompCert C.

О_о неужели возможно формально доказать корректность оптимизирующего компилятора? В нем многие задачи NP-полные и решаются с эвристическими упрощениями, доказательство корректности тоже должно быть NP-полным.

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

О_о неужели возможно формально доказать корректность оптимизирующего компилятора?

А почему это должно быть невозможно? Если взять простой неоптимизирующий компилятор, то его работа сводится к тому, чтобы перевести прогрмму с одного языка на другой язык, при этом нигде не ошибиться. С доказательством подобного компилятора конечно же придется повозиться (если случай не тривиальный), но эта задача вполне решаемая. А сами оптимизации можно доказывать отдельно. Оптимизации компиляторов можно сравнить со всякими символьными вычислениями, например в той же Maxima, а такие вещи точно можно доказывать. Так что не вижу проблемы

В нем многие задачи NP-полные и решаются с эвристическими упрощениями, доказательство корректности тоже должно быть NP-полным.

Надо доказывать справедливость самой оптимизации вообще, что она никогда ни для какого кода не изменяет наблюдаемое поведение итоговой программы (если конечно нет UB в самом коде, тогда может быть что угодно).

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

Оффтопик же.

Wine/Virtualbox - это не проблема. Вот то, что, по словам разработчика, макросы нужно руками разворачивать, делает эту хрень крайне неудобной. Хотя я до сих пор не понимаю, почему нельзя сделать веб-версию с интеграцией в github для опенсорсных проектов.

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

Перефразирую: что делает откровенная реклама в моём уютненьком development?

Этот уютненький development будет вашим только на вашем локалхосте. А пока этот уютненький development является публичным.

Она несет полезную информацию?

Да.

Нет - ибо реклама.

Да.

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

Если бы была хотя бы демо версия этого «сферического инструмента в вакууме», было бы о чем говорить. Её нету.

Есть под венду.

Есть и под линукс.

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

Если бы была хотя бы демо версия этого «сферического инструмента в вакууме», было бы о чем говорить. Её нету.

Есть под венду.

Есть и под линукс.

На сайте я не нашёл. С рабочей почты я им писать не слишком хочу.

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

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

Кто сказал, что нельзя сделать? Вы просто заинтересуйте разработчиков.

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

С рабочей почты я им писать не слишком хочу.

Я писал с личной. Более того, сказал что интересуюсь как частное лицо.

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

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

Да. И это означает, что PVS-Studio силён, так как смог найти что-то даже в таком коде.

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

Кто сказал, что нельзя сделать? Вы просто заинтересуйте разработчиков.

Чем? Сисек у меня нет, потому что я парень. Если я свою приблуду для проверки опенсорса на основе их PVS-Studio запилю, они меня наверняка ещё и засудят. Хотя, эта идея мне в принципе нравится.

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

Чем? Сисек у меня нет, потому что я парень.

Судя по фразе, проблема не в сиськах.

Если я свою приблуду для проверки опенсорса на основе их PVS-Studio запилю, они меня наверняка ещё и засудят.

Я не знаю, какая у них лицензия на pvs-studio.

Хотя, эта идея мне в принципе нравится.

Да, неплохая идея.

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

На сайте я не нашёл. С рабочей почты я им писать не слишком хочу.

Должен Вас расстроить. Скорее всего, тогда Вы никогда не сможете попробовать PVS-Studio. Пока мы склоняемся к варианту после Release продолжить выдавать пробную версию PVS-Studio для Linux только по запросу. С Linux будет много возни и дорогой поддержки. Поэтому есть смысл отсеять всех тех, кто даже потенциально не является клиентом. Письмо - это хороший фильтр. Если человек не может написать нам, то вероятность, что он станет клиентом, стремится к нулю. Рационально сосредоточиться на более перспективных программистах.

А теперь, все кто это прочитал, можете кидаться в меня тряпками. Да, вот такие мы. И мне не стыдно. :) Нам надо думать каждый месяц о зарплатах для 20 сотрудников.

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

Wine/Virtualbox - это не проблема. Вот то, что, по словам разработчика, макросы нужно руками разворачивать, делает эту хрень крайне неудобной.

Есть уже всё под Linux. Некоторые из местных жителей уже успели попробовать и написать нам свои отзывы. Спасибо им. Сейчас работаем над устранением недоработок. Затем будет новый заход.

Про макросы я вообще не понимаю. Да, мне их надо просматривать, так как я с проектом не знаком. Разработчикам со своим кодом будет проще. Ну а если они сами даже не понимают, что понаписали, то всегда можно сгенерировать *.i файл и посмотреть. Но PVS-Studio тут уже ни при чём.

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

Всё можно. Вот выделит нам кто-то денег на это, займёмся. Ну или станем богатые и тогда начнем заниматься всякой фигнёй. А пока, извините.

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

Скорее всего, тогда Вы никогда не сможете попробовать PVS-Studio.

Пока что я бы не сказал что я что-то теряю. О PVS я знаю только из вашего маркетоидного бреда. С другой стороны, с конкурирующими продуктами я могу ознакомиться лично, потому как они либо открыты (анализаторы типа cppcheck и шланга или инструменты типа frama-c), либо есть возможность их использовать с открытыми проектами (coverity). Стоимость же использования PVS (я не о стоимости покупки) и профит от него пока совершенно неясны. Стоит ли писать вам ради какой-то мутной хрени? Не уверен.

Если добавить к этому вашу личность, а так же ту статейку, где вы агитировали против использования библиотек в случае, например, crc32 (тут я должен уточнить, от одного только этого пункта мы с коллегами рыдали), то всё становится совсем печально.

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

Есть уже всё под Linux. Некоторые из местных жителей уже успели попробовать и написать нам свои отзывы. Спасибо им. Сейчас работаем над устранением недоработок. Затем будет новый заход.

Где? Пока я вижу непонятные статьи и призывы бесплатно поработать бета-тестерами. Я не вижу готового продукта, который можно без лишнего геморроя встроить в CI.

Всё можно. Вот выделит нам кто-то денег на это, займёмся. Ну или станем богатые и тогда начнем заниматься всякой фигнёй. А пока, извините.

Вы путаете причину и следствие.

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

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

Похожим образом действует компания LispWorks :-)

anonymous
()

Как они посмели? Что следующее они будут анализировать, Туринскую плащаницу?

slon
()
Ответ на: комментарий от SZT

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

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

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

Письмо - это хороший фильтр.

Т.е. тогда не просто с фирменного ящика, а для пущей аутентичности, разумеется, и на языке страны, где расположена фирма?

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

Т.е. тогда не просто с фирменного ящика, а для пущей аутентичности, разумеется, и на языке страны, где расположена фирма?

Ды хоть как-нибудь. Судя по комментариям здесь, для многих написание письма является непреодолимым барьером. И это славно.

Andrey_Karpov_2009
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.