Как стать автором
Обновить

Комментарии 24

Что-то ошибки сильно детские — отстойненькое качество программирования. Я ожидал лучшего качества от Оракл и ошибок посложнее.
Я думаю, все описанные и неописанные в статье, а также ещё не найденные ошибки, проявляя себя в разных комбинациях, в итоге выливаются в какую-нибудь трудноуловимую багу. Наличие такого в этом проекте меня особенно огорчает, ибо сам пользуюсь.
Я вообще когда читаю статьи от PVS-Studio удивляюсь, как эти программы еще работают :)
Ну тут как ru_chp или новостями об автоавариях. Посмотришь — ужас-ужас. Однако машины едут, люди работают...
Я тут недавно наткнулся на баг с удалением автомонтируемой общей папки во время работы VM — тогда после саспенда виртуалка не запускается обратно. Гугление быстро помогло с решением, а среди прочего вывело на тикет, открытый шесть лет назад (!) ещё для третьей версии (!!!). И вот алилуйя, в версии 5.0.16 баг исправлен. А потом я просто полазил по их багтрекеру и мне поплохело.
Спасибо за анализ! А не подскажете, какую версию Вы исследовали? Просто у них буквально на днях вышла 5.0.16.
Возможно, кому-то пригодится номер проверенной ревизии:

Checked out external at revision 2796.
Checked out revision 59777.
Окей, насколько я правильно понял, то релиз был с ревизией 59915 ровно неделю назад, а значит вполне вероятно, что разработчики внесли соответствующие изменения

Скриншот
Они не могли внести изменения в релиз т.к. я только на этой неделе написал разработчикам. Как и в прошлый раз, они не выходят на контакт, в котором я уточняю куда и в каком формате выслать полный отчёт анализатора. Статьи они точно видят и исправляют код, но не больше.
Вам никогда не казалось, что создавая рекламу своему продукту, вы создаёте антирекламу C++? Когда такие люди допускают такие ошибки… «Может, что-то в консерватории подправить?» Ведь могут подумать: не лучше ли сменить язык, в котором не могут отказаться от наследия 60-х – 70-х годов – а оно нередко провоцирует на ошибки, чем приобретать лекарства от ошибок?

Кстати, не могли бы пролить свет на то, как анализ, который делается PVS-Studio, уживаются с «goto», наследием 60-х – 70-х? Какие сложности возникают перед анализатором, если встречается «goto», как это влияет на качество анализа? Ну и заодно могли бы коснуться операторов «break» и «continue», они ведь тоже меняют ход выполнения, хотя не так произвольно, как «goto».
Не лучше ли сменить язык...

А куда, вы все денетесь с подводной лодки? :) Слишком много кода, слишком большая инерция. Не страшно. Мой коллега вот недавно участвовал в одном семинаре. Там обсуждался, помимо всего прочего, инструмент статического анализа для Ада. Уж если язык Ада живей всех живых, то уж у Си++ ещё лет 20-30 точно в запасе есть. :)

goto

Если совсем кратко, то всё плохо. Многие диагностики приостанавливают свою работу. Чистятся многие структуры, хранящие специфические знания о состоянии потока выполнения и иную полезную информацию. Что в свою очередь ещё уменьшает количество срабатываний. Но это слишком большая тема, чтобы про неё говорить в комментариях.
Хорошее место "лагерем" не назовут Хороший язык "языком Ада" не назовут ;)
>Когда такие люди допускают такие ошибки…
Если бы был язык, в котором ошибки подобного рода были невозможны, все бы уже писали на нем.
НЛО прилетело и опубликовало эту надпись здесь
Если это слишком большая тема для комментариев, то может изложить отдельной статьёй? Вы же, в конце концов, должны сказать своим пользователям: «Если у вас в программе завёлся goto, то пеняйте на себя, наш анализатор бесполезен».
Как-то лихо Вы… Если на 100Mb кода есть пара goto — прям так уже и бесполезен анализатор?
Так напишите и раскройте нам глаза, сколько мегабайт при этом портится. Приподнимите занавес, ведь вряд ли кто-то кинется писать конкурирующий анализатор.
Идея написания статьи про goto и т.п. давно есть. Но вот только не пишется. Я уже один раз сел писать, но забросил после вступления. Муза не пришла. Не знаю, по что писать. Перечислять изменения в анализе, когда происходит встреча с goto, заунывно. Интересных историй, связанных с этим, тоже нет. В общем не идёт статья. Если когда-то появятся вдохновляющие идеи — напишу.
Да, если нет вдохновения, то тяжело. Иногда даже не стоит начинать.
НЛО прилетело и опубликовало эту надпись здесь
Задача компилятора — проверить отсутствие явных синтаксических ошибок и максимально быстро сгенерировать код. У анализатора кода нет задачи отработать максимально быстро, поэтому возможны более сложные/долгие проверки. Которые с одной стороны увеличивают время работы, а с другой дают более сложные диагностики.
Возможно, Вам будет интересна моя давняя статья, где я рассуждал как раз на эту тему: Чем статический анализ отличается от предупреждений компилятора?
Про copy-paste: попробовал на нашем проекте и было единственное место с then=else и это не copy-paste, а результат мутации (почему-то это слово через 'д' начал печатать) на протяжении жизни проекта — "сделай так" через "так не надо, лучше вот так" до "не, давай по-другому", ну и невнимательности, что привела к дублированию кода (на будущее переделал через switch с единственной веткой, а то в худшем случае там в гирлянду может перерасти).
Ещё в коде встретилось чудесное:
this.Dock = System.Windows.Forms.DockStyle.Top | DockStyle.Left;
и PVS-studio предложил дописать [Flags] к перечислению (ага, в .NET), хотя в перечислении значения по порядку от 0 до 5. Тут скорее неправильное использование этого перечисления.
Единственный косяк с уровнем High и текстом "Congratulations! PVS-Studio has not found any issues in your source code!" порадовал и заставляет срочно его исправить.
Есть еще один мало популярный, но хорошо известный в узких кругах эмулятор PCem

https://bitbucket.org/pcem_emulator/pcem/src

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

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