Pull to refresh

Comments 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

Если совсем кратко, то всё плохо. Многие диагностики приостанавливают свою работу. Чистятся многие структуры, хранящие специфические знания о состоянии потока выполнения и иную полезную информацию. Что в свою очередь ещё уменьшает количество срабатываний. Но это слишком большая тема, чтобы про неё говорить в комментариях.
Хорошее место "лагерем" не назовут Хороший язык "языком Ада" не назовут ;)
>Когда такие люди допускают такие ошибки…
Если бы был язык, в котором ошибки подобного рода были невозможны, все бы уже писали на нем.
UFO just landed and posted this here
Если это слишком большая тема для комментариев, то может изложить отдельной статьёй? Вы же, в конце концов, должны сказать своим пользователям: «Если у вас в программе завёлся goto, то пеняйте на себя, наш анализатор бесполезен».
Как-то лихо Вы… Если на 100Mb кода есть пара goto — прям так уже и бесполезен анализатор?
Так напишите и раскройте нам глаза, сколько мегабайт при этом портится. Приподнимите занавес, ведь вряд ли кто-то кинется писать конкурирующий анализатор.
Идея написания статьи про goto и т.п. давно есть. Но вот только не пишется. Я уже один раз сел писать, но забросил после вступления. Муза не пришла. Не знаю, по что писать. Перечислять изменения в анализе, когда происходит встреча с goto, заунывно. Интересных историй, связанных с этим, тоже нет. В общем не идёт статья. Если когда-то появятся вдохновляющие идеи — напишу.
Да, если нет вдохновения, то тяжело. Иногда даже не стоит начинать.
UFO just landed and posted this here
Задача компилятора — проверить отсутствие явных синтаксических ошибок и максимально быстро сгенерировать код. У анализатора кода нет задачи отработать максимально быстро, поэтому возможны более сложные/долгие проверки. Которые с одной стороны увеличивают время работы, а с другой дают более сложные диагностики.
Про 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

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

Понимаю, что интерес минимальный с вашей стороны, но очень хочется надеяться на проверку.
Sign up to leave a comment.