Comments 24
Что-то ошибки сильно детские — отстойненькое качество программирования. Я ожидал лучшего качества от Оракл и ошибок посложнее.
0
Я думаю, все описанные и неописанные в статье, а также ещё не найденные ошибки, проявляя себя в разных комбинациях, в итоге выливаются в какую-нибудь трудноуловимую багу. Наличие такого в этом проекте меня особенно огорчает, ибо сам пользуюсь.
+4
Я тут недавно наткнулся на баг с удалением автомонтируемой общей папки во время работы VM — тогда после саспенда виртуалка не запускается обратно. Гугление быстро помогло с решением, а среди прочего вывело на тикет, открытый шесть лет назад (!) ещё для третьей версии (!!!). И вот алилуйя, в версии 5.0.16 баг исправлен. А потом я просто полазил по их багтрекеру и мне поплохело.
0
Спасибо за анализ! А не подскажете, какую версию Вы исследовали? Просто у них буквально на днях вышла 5.0.16.
0
Возможно, кому-то пригодится номер проверенной ревизии:
Checked out external at revision 2796.
Checked out revision 59777.
0
Вам никогда не казалось, что создавая рекламу своему продукту, вы создаёте антирекламу C++? Когда такие люди допускают такие ошибки… «Может, что-то в консерватории подправить?» Ведь могут подумать: не лучше ли сменить язык, в котором не могут отказаться от наследия 60-х – 70-х годов – а оно нередко провоцирует на ошибки, чем приобретать лекарства от ошибок?
Кстати, не могли бы пролить свет на то, как анализ, который делается PVS-Studio, уживаются с «goto», наследием 60-х – 70-х? Какие сложности возникают перед анализатором, если встречается «goto», как это влияет на качество анализа? Ну и заодно могли бы коснуться операторов «break» и «continue», они ведь тоже меняют ход выполнения, хотя не так произвольно, как «goto».
Кстати, не могли бы пролить свет на то, как анализ, который делается PVS-Studio, уживаются с «goto», наследием 60-х – 70-х? Какие сложности возникают перед анализатором, если встречается «goto», как это влияет на качество анализа? Ну и заодно могли бы коснуться операторов «break» и «continue», они ведь тоже меняют ход выполнения, хотя не так произвольно, как «goto».
0
Не лучше ли сменить язык...
А куда, вы все денетесь с подводной лодки? :) Слишком много кода, слишком большая инерция. Не страшно. Мой коллега вот недавно участвовал в одном семинаре. Там обсуждался, помимо всего прочего, инструмент статического анализа для Ада. Уж если язык Ада живей всех живых, то уж у Си++ ещё лет 20-30 точно в запасе есть. :)
goto
Если совсем кратко, то всё плохо. Многие диагностики приостанавливают свою работу. Чистятся многие структуры, хранящие специфические знания о состоянии потока выполнения и иную полезную информацию. Что в свою очередь ещё уменьшает количество срабатываний. Но это слишком большая тема, чтобы про неё говорить в комментариях.
+2
>Когда такие люди допускают такие ошибки…
Если бы был язык, в котором ошибки подобного рода были невозможны, все бы уже писали на нем.
Если бы был язык, в котором ошибки подобного рода были невозможны, все бы уже писали на нем.
0
UFO just landed and posted this here
Если это слишком большая тема для комментариев, то может изложить отдельной статьёй? Вы же, в конце концов, должны сказать своим пользователям: «Если у вас в программе завёлся goto, то пеняйте на себя, наш анализатор бесполезен».
0
Так напишите и раскройте нам глаза, сколько мегабайт при этом портится. Приподнимите занавес, ведь вряд ли кто-то кинется писать конкурирующий анализатор.
0
Идея написания статьи про goto и т.п. давно есть. Но вот только не пишется. Я уже один раз сел писать, но забросил после вступления. Муза не пришла. Не знаю, по что писать. Перечислять изменения в анализе, когда происходит встреча с goto, заунывно. Интересных историй, связанных с этим, тоже нет. В общем не идёт статья. Если когда-то появятся вдохновляющие идеи — напишу.
+1
Да, если нет вдохновения, то тяжело. Иногда даже не стоит начинать.
0
UFO just landed and posted this here
Задача компилятора — проверить отсутствие явных синтаксических ошибок и максимально быстро сгенерировать код. У анализатора кода нет задачи отработать максимально быстро, поэтому возможны более сложные/долгие проверки. Которые с одной стороны увеличивают время работы, а с другой дают более сложные диагностики.
0
Возможно, Вам будет интересна моя давняя статья, где я рассуждал как раз на эту тему: Чем статический анализ отличается от предупреждений компилятора?
+1
Про copy-paste: попробовал на нашем проекте и было единственное место с then=else и это не copy-paste, а результат мутации (почему-то это слово через 'д' начал печатать) на протяжении жизни проекта — "сделай так" через "так не надо, лучше вот так" до "не, давай по-другому", ну и невнимательности, что привела к дублированию кода (на будущее переделал через switch с единственной веткой, а то в худшем случае там в гирлянду может перерасти).
Ещё в коде встретилось чудесное:
Единственный косяк с уровнем High и текстом "Congratulations! PVS-Studio has not found any issues in your source code!" порадовал и заставляет срочно его исправить.
Ещё в коде встретилось чудесное:
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!" порадовал и заставляет срочно его исправить.
0
Есть еще один мало популярный, но хорошо известный в узких кругах эмулятор PCem
https://bitbucket.org/pcem_emulator/pcem/src
Отличается он хороший точностью эмулирования, для запуска например старых игр.
Понимаю, что интерес минимальный с вашей стороны, но очень хочется надеяться на проверку.
https://bitbucket.org/pcem_emulator/pcem/src
Отличается он хороший точностью эмулирования, для запуска например старых игр.
Понимаю, что интерес минимальный с вашей стороны, но очень хочется надеяться на проверку.
0
Sign up to leave a comment.
Свежий взгляд на код Oracle VM VirtualBox