Comments 60
Ну так скажите же главное — таки решето или не решето?
Точка с запятой после цикла полностью изменила задуманную логику. Предполагаемое тело цикла не будет участвовать в итерациях, а выполнится один раз уже после работы цикла.
А если бы «i» была объявлена внутри for, то все было бы лучше — ошибка при компиляции.
Неправильное сравнение — в изначальном коде следующая за циклом строка кода использует переменную с тем же именем, что и переменная цикла, а в вашем коде просто выводится фиксированная строка.
Если я правильно понимаю, то в этой статье вы проверяли Userspace-часть кода Vbox. Но ведь там есть и модуль ядра для использования возможностей аппаратной виртуализации. На него будете «покушаться» в дальнейшем? Было бы очень интересно, т.к. я сам работаю над похожим проектом, и интересует возможность проверки модулей ядра.
Пока будет 2 статьи о проверке этой версии. Есть много других проектов, которые тоже интересно посмотреть, например, KDE.Если вас интересует возможность внедрения анализатора в свой проект, то в этом плане анализатор сильно вырос за последнее время и продолжает развиваться. Если вкратце, то есть возможность проверить всё, что компилируется под Windows и Linux, но подробности лучше уточнить, написав в поддержку.
/* running on battery? */
if (powerStatus.ACLineStatus == 0 /* Offline */
|| powerStatus.ACLineStatus == 255 /* Unknown */
&& (powerStatus.BatteryFlag & 15))
Наверное здесь все же не ошибка, но, бесспорно, читабельность страдает и вероятность ошибки повышается.
Перевод примерно такой: если статус батареи неизвестный, но при этом есть флаг что она вообще присутствует ИЛИ сеть отключена — считать что идет работа от батареи.
if (powerStatus.ACLineStatus == 0 /* Offline */
|| powerStatus.ACLineStatus == 255 /* Unknown */
&& (powerStatus.BatteryFlag & 15))
Наверное здесь все же не ошибка, но, бесспорно, читабельность страдает и вероятность ошибки повышается.
Перевод примерно такой: если статус батареи неизвестный, но при этом есть флаг что она вообще присутствует ИЛИ сеть отключена — считать что идет работа от батареи.
Извините, не нашёл этот вопрос в факе: а что вы (Andrey2008?) думаете над тем, чтобы разрешить использовать PVS-Studio для проверки некоммерческих проектов?
Маленьких любительских некоммерческих проектов с открытым исходным кодом, авторы которого в любом случае не в состоянии купить анализатор?
Маленьких любительских некоммерческих проектов с открытым исходным кодом, авторы которого в любом случае не в состоянии купить анализатор?
Они могут совершенно спокойно использовать наш CppCat.
$250 — слишком много для проектов, которые приносят исключительно убыток.
А ещё CppCat только для Visual Studio, т. е. конкретно, ну, например, мне, совершенно не подходит.
А ещё CppCat только для Visual Studio, т. е. конкретно, ну, например, мне, совершенно не подходит.
Может быть Вам это просто не нужно?
В моём коде нет ошибок, которые PVS-Studio не в состоянии обнаружить?
Извините, в мой предыдущий комментарий закралась логическая ошибка:
В моём коде нет ошибок, которые PVS-Studio не в состоянии обнаружить?следует читать как
В моём коде нет ошибок, которые PVS-Studio в состоянии обнаружить?
Насколько я знаю, Coverity бесплатно сканирует проекты с открытым исходным кодом.
Да. Для этого у них есть грант от министерства обороны.
Ну, Andrey2008 тоже бесплатно анализирует, да еще и авторам проектов на блюдечке разжеванные ошибки шлет.
Но хотелось бы, как Andrey2008 и говорит, использовать анализатор регулярно.
Нет, я безусловно понимаю, что сие можно расценить как обычное желание халявы (чёрт побери, это оно и есть!), но я всё же могу привести два достойных аргумента:
Донёс мысль?
Нет, я безусловно понимаю, что сие можно расценить как обычное желание халявы (чёрт побери, это оно и есть!), но я всё же могу привести два достойных аргумента:
- Непрофессиональные кодописатели, такие как я, не имеющие с их проектов какого-либо (неотрицательного) профита, не являются целевой аудиторией Viva64 (или как там компания называется?), то есть пока (пока, я надеюсь) никак охвачены; даже CppCat, который вроде бы позиционируется именно для такой ЦА, как оказалось, не подходит, ибо А) только Visual Studio, и Б) всё же немножечко дороговат.
- Исправление багов в проектах с открытым исходным кодом приносит пользу всем (ну, не вдаваясь в хитрые тонкости лицензирования), но так же и самой Viva64, ибо сие (не нужно расшифровывать, что именно?) оказывается невероятно эффективной рекламой (см. Adobe Photoshop, Corel DRAW и другие: эти продукты стали популярными из-за пиратства).
Донёс мысль?
«Хочу ездить на машине. Но денег нет. Завод Форд останавливает производство и отправляет персонал в отпуска. Лучше бы они мне машину за это время сделали.»
Но на самом деле, Вы правильно сказали: «Непрофессиональные кодописатели… не являются целевой аудиторией».
Но на самом деле, Вы правильно сказали: «Непрофессиональные кодописатели… не являются целевой аудиторией».
Меня расстраивают ваши язвительные комментарии.
Вы понимаете, что сейчас вы полностью потеряли мою лояльность к Viva64?
Зачем вы таким образом представляете компанию?
Вы понимаете, что сейчас вы полностью потеряли мою лояльность к Viva64?
Зачем вы таким образом представляете компанию?
Не в обиду, но с точки зрения бизнеса, Вы попадаете в категорию покупателей, который вот в этой замечательной статье описаны как «Представитель ЦА, который гипотетически воспользовался бы вашим предложением, если бы ему за это доплатили». Кстати очень хорошая статья. Всем рекомендую. Да и вообще, хватит уже про всякое бесплатное. Ну не работает оно в некоторых сферах и всё тут. В нашем случае тоже не работает. Если $250 для работы дорого, то и обсуждать тут нечего.
P.S. Минусуйте все меня, гадкого капиталиста. Но немногие, которые откроют свой дело и которым ежемесячно нужно будет платить зарплату сотрудникам, смогут меня тогда понять.
P.S. Минусуйте все меня, гадкого капиталиста. Но немногие, которые откроют свой дело и которым ежемесячно нужно будет платить зарплату сотрудникам, смогут меня тогда понять.
Вообще, статью "Отказались от демо и фримиума — и отсеяли кучу шлака" можно всю на цитаты растощить. Но в данном случае, я имею в виду вот это:
Не про статический анализ, но совпадение на 100%.
Эльба на старте стоила 300 рублей в месяц, и даже тогда находились люди, считавшие эту цену заоблачной. При этом первый покупатель оплатил годовую подписку еще до того, как мы закрыли доступ к части функций на бесплатном тарифе. Этот пример отлично иллюстрирует два типа потенциальных клиентов:
- Представитель ЦА, который гипотетически воспользовался бы вашим предложением, если бы ему за это доплатили,
- Настоящий потенциальный клиент, которому ваш инструмент действительно принесёт пользу.
В случае с бизнес-сервисами, первый тип — это человек с сомнительным вялотекущим дельцем, у которого нет бурной деятельности и, как следствие, тех проблем, которые вы можете для него решить. Второй же действительно делает бизнес и понимает, что борьба с рутиной обходится ему дороже той суммы, которую вы озвучиваете. Перенесите это на свою сферу и прекратите попытки угодить персонажу номер 1.
Не про статический анализ, но совпадение на 100%.
Мне интересно услышать ваше отношение к мнению о том, что Adobe Photoshop, к примеру, именно благодаря пиратству и тому, что люди осваивали компьютерную графику именно с данным инструментом, стал стандартом де-факто, и компаниям приходится покупать это ПО для сотрудников.
То есть остаётся PVS-Studio, который уже не купить.
Вы можете назвать мне минусы безвозмездного лицензирования PVS-Studio для СПО?
Я могу вам назвать два очевидных плюса: нефиговая реклама и см. начало комментария про фотошоп.
P. S. Я не имею ничего против капитализма. Это не мешает мне сомневаться в политиках некоторых коммерческих структур.
Если $250 для работы дорого, то и обсуждать тут нечего.По поводу CppCat: $250 — цена нормальная, и заплатить столько за ПО в рамках хобби возможно, но: только Visual Studio.
То есть остаётся PVS-Studio, который уже не купить.
Да и вообще, хватит уже про всякое бесплатное.Бесплатное только для некоммерческих проектов. Эти ЦА не пересекаются: открытое некоммерческое и закрытое коммерческое ПО. Компании, разрабатывающие коммерческое ПО не смогут пользоваться бесплатной лицензией PVS-Studio, т. к. исходные коды их ПО закрыты.
Вы можете назвать мне минусы безвозмездного лицензирования PVS-Studio для СПО?
Я могу вам назвать два очевидных плюса: нефиговая реклама и см. начало комментария про фотошоп.
P. S. Я не имею ничего против капитализма. Это не мешает мне сомневаться в политиках некоторых коммерческих структур.
Бесплатное только для некоммерческих проектов.
А как следить?
Inel вот недавно прикрыл раздачу бесплатной некоммерческой версии Intel Parallel Studio (компиляторы + инструменты), мотивируя это, по слухам с форумов Intel, тем, что пользуются все, а не только в некоммерческих целях.
Но если для Intel финансовый ущерб от этого мог быть не таким существенным, то для Viva64 все может быть наоборот.
Andrey2008, только Visual Studio — это действительно серьезное ограничение. Если бы как-нибудь поддерживалась бесплатная Express версия VS, то все было бы нормально, а так VS для хобби может быть дороговато.
Меня в свое время от покупки CppCat остановило требование VS, так как ее у меня нет, а CppCat не умеет следить за вызовами компилятора из nmake (для меня предпочтительнее) или интегрироваться в VS Express.
А полноценный PVS-Studio, не требующий VS, мне для моих проектов (не всегда открытых), по понятным причинам, за $250 никто не продаст :)
А как следить?Если компания будет использовать бесплатную PVS-Studio для анализа закрытого ПО, то лицензия на эту бесплатную версию окажется для них неприменима, ибо будет нарушено одно из условий этой лицензии, таким образом действия этой компании будут нарушать закон о защите интеллектуальной собственности.
Inel вот недавно прикрыл раздачу бесплатной некоммерческой версии Intel Parallel Studio (компиляторы + инструменты), мотивируя это, по слухам с форумов Intel, тем, что пользуются все, а не только в некоммерческих целях.
Но если для Intel финансовый ущерб от этого мог быть не таким существенным, то для Viva64 все может быть наоборот.
Если компания незаконно использует программное обеспечение, то, по словам Andrey2008, она ещё меньше пересекается с ЦА Viva64, чем я.
В таком случае никакой разницы между использованием пиратки и использованием бесплатной версии в нарушение лицензии со стороны закона нет.
Маленьких любительских некоммерческих проектов с открытым исходным кодом, авторы которого в любом случае не в состоянии купить анализатор?
Для информации. Появился бесплатный вариант лицензии для таких случаев: Как использовать PVS-Studio бесплатно.
Я чего-то одного не пойму — почему в коде:
ваш анализатор ругается, если это «известная магия win32»? Ведь у вас же есть аналогичная проверка, связанная с функцией
/* Okay, we were loaded manually. Call the GDI functions. */
pixelformat = ChoosePixelFormat( hdc, ppfd );
/* doing this twice is normal Win32 magic */
pixelformat = ChoosePixelFormat( hdc, ppfd );
ваш анализатор ругается, если это «известная магия win32»? Ведь у вас же есть аналогичная проверка, связанная с функцией
memset
и заменой её на RtlSecureZeroMemory
, то есть, ваш анализатор знает особенности побочных действий некоторых функций (или компилятора). Так почему же он не знает, что надо дважды вызывать функцию ChoosePixelFormat
, ведь, она, вероятно, имеет какое-то побочное действие, из-за которого и происходит эта «магия win32»?Я не понимаю Ваш комментарий. :(
Анализатор ругается не про магию, а что в переменную два раза подряд записывается значение. Посмотрите сообщение анализатора в статье.
Мне, например, тоже ничего не известно про такую про магию и зачем так делают. Про магию вообще написано, исходя из комментария в коде /* is normal Win32 magic */.
Анализатор ругается не про магию, а что в переменную два раза подряд записывается значение. Посмотрите сообщение анализатора в статье.
Мне, например, тоже ничего не известно про такую про магию и зачем так делают. Про магию вообще написано, исходя из комментария в коде /* is normal Win32 magic */.
Правильно. Он ругается на записывание два раза в переменную возвращаемого значения из определённой функции, хотя это якобы «is normal Win32 magic», то есть, по моей логике, в мире win32 это поведение известно и ничего странного в нём нет. Вы, как специалист, разрабатывающий анализатор, нацеленный, в том числе, на глубокое понимание особенностей платформы win32, можете об этом знать. Вот я и высказал недоумение, почему, вроде бы, проблема всем известна, а анализатор её не ловит?
Он же ругается в случае с
Ещё раз повторюсь, что эта логика действует только в случае, если это «is normal Win32 magic», если же это не так, то поведение анализатора вполне себе закономерное, а проблема в излишне скупом комментарии, не проясняющим, что это за «нормальная магия Win32», которую, вот вы говорите, тоже не знаете, и который и ввёл меня в заблуждение.
Он же ругается в случае с
memset
, то есть он умеет определять, что вот есть функция, поведение которой в некоторых случаях не очевидно, надо сообщить. То есть, он в принципе может определять функции и сопоставлять их с некоторой базой знаний по ним. Значит, он мог бы определить, вот есть функция ChoosePixelFormat
, поведение её не очевидно: возвращаемое ей значение нужно присваивать одной и той же переменной два раза, так что если мы нашли данную ситуацию, то считать ошибкой это поведение не надо.Ещё раз повторюсь, что эта логика действует только в случае, если это «is normal Win32 magic», если же это не так, то поведение анализатора вполне себе закономерное, а проблема в излишне скупом комментарии, не проясняющим, что это за «нормальная магия Win32», которую, вот вы говорите, тоже не знаете, и который и ввёл меня в заблуждение.
Нет там никакой магии, просто функция может вернуть ноль, а не формат — это будет означать наличие ошибки. Правильный код должен проверять именно возвращаемое значение, а не тупо два раза вызывать в надежде, что один из них сработает.
Не понимаю: почему создатели крупного и всемирно известного проекта не сделали то же, что и вы? Раз это так просто! Прибыль от этого проекта же несоизмерима со стоимостью вашего или аналогичного ПО.
И много ли подобных программ вы анализировали? Многие ли относятся наплевательски к своим продуктам?
И много ли подобных программ вы анализировали? Многие ли относятся наплевательски к своим продуктам?
Так вроде же цель таких статей как раз в том, чтобы показать, что статический анализ кода это не только не сильно сложно, но и безумно полезно!
Мы многое проверяли и многое нашли.
Не надо думать, что мы прям такие на белом коне. Статический анализ одна из технологий и переоценивать ей не стоит. Т.е. нельзя сказать, что если компания начнет использовать наш инструмент, ошибок больше не будет. Нужно применять и другие методы. Многие компании тратят много денег на качество кода, и то что мы ловко что-то находим в их коде, не означает что код до безобразия глючен.
Однако, мы стараемся показать свои возможности и у нас получается находить ошибки. Это показывает, что используя дополнительный инструмент можно избежать многих дефектов. Соответственно PVS-Studio крайне полезен и принесёт экономию при разработке ПО. Лучше уж сражаться с алгоритмической ошибкой, а не с опечаткой.
Не надо думать, что мы прям такие на белом коне. Статический анализ одна из технологий и переоценивать ей не стоит. Т.е. нельзя сказать, что если компания начнет использовать наш инструмент, ошибок больше не будет. Нужно применять и другие методы. Многие компании тратят много денег на качество кода, и то что мы ловко что-то находим в их коде, не означает что код до безобразия глючен.
Однако, мы стараемся показать свои возможности и у нас получается находить ошибки. Это показывает, что используя дополнительный инструмент можно избежать многих дефектов. Соответственно PVS-Studio крайне полезен и принесёт экономию при разработке ПО. Лучше уж сражаться с алгоритмической ошибкой, а не с опечаткой.
Скажите, а код qemu проверялся? Если да — можно ссылку, если нет — будите?
QEMU ещё было бы любопытно проверить и сравнить — у них часть багов «пересекаются».
Заключительная статья о проверке проекта: Проверяем Oracle VM VirtualBox. Часть 2
А вы не пробовали исправить найденное, собрать и посмотреть, не пропали какие-нибудь досадные баги?
Новая проверка этого проекта спустя почти 2 года: Свежий взгляд на код Oracle VM VirtualBox
Sign up to leave a comment.
Проверяем Oracle VM VirtualBox. Часть 1