LINUX.ORG.RU

PVS-Studio для Linux

 , , ,


0

5

Появилась версия анализатора PVS-Studio, работающая в GNU/Linux. До этого программа работала только в Windows.

PVS-Studio — это инструмент для выявления ошибок в исходном коде программ, написанных на С и C++. В случае интеграции с Visual Studio также возможна проверка проектов на C#.

PVS-Studio выполняет широкий спектр проверок кода, но наиболее удачно справляется с поиском опечаток и последствий неудачного Copy-Paste. Показательные примеры таких ошибок: V501, V517, V522, V523, V3001.

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

Пакеты PVS-Studio в форматах deb, rpm и tgz доступны для скачивания на официальном сайте.

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

Обязательно сразу же прочитайте краткую инструкцию «как запустить PVS-Studio в Linux».

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

Доклад на конференции C++ CoreHard Autumn 2016 «Что пришлось тестировать и о чем узнать при подготовке Linux-версии PVS-Studio».

Про что доклад: большинство программистов плохо представляют, что означает создание PVS-Studio для Linux. Многие думают, что вся сложность заключается в портировании кода, однако это очень далеко от истины: портировать код очень просто, но это только 5% работы. Остальная работа скрыта от стороннего наблюдателя и состоит в решении многих инфраструктурных вопросов. Предлагаем заглянуть на кухню разработчиков анализатора PVS-Studio и узнать разные интересные нюансы их работы.

>>> Подробности



Проверено: Aceler ()
Последнее исправление: cetjs2 (всего исправлений: 8)

Вы кстати ещё раздаете бесплатные лицензии для открытых проектов или уже нет? Если да, то условия как у Coverity / Intel XE или же обязательно быть серьёзным проектом с оформленным non-profit?

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

Кстати, а опасности связанные с разным поведением например va_arg на разных архитектурах/integer promotion оно ловит? Ну и все же хочется какого-то сравнения с coverity/purespace. Последний хорош, но у него в разы больше ложных срабатываний, в отличие от coverity. При этом некоторые косяки которые не видит coverity ловит ВНЕЗАПНО clang-analyze.

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

тоже самое можно будет сделать и с персональным ключем выданным на имеил

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

MuZHiK-2 ★★★★
()
Ответ на: комментарий от ZenitharChampion

Вопрос от фаната CentOS 5: какую билд-ферму вы используете?

У нас свой build-сервер с Jenkins'ом.

И ещё мне кажется что нужно написать что ошибка ≠ критическая уязвимость. Это вроде и так понятно, но не для всех, и когда эти некоторые видят «исправлено 10000 ошибок», то они не верят.

Мы никогда не говорили, что это критические уязвимости. Мы всегда называли это ошибками. Возможно, некоторые из них самые настоящие уязвимости, но мы все равно про это не знаем, так как не понимаем код проверяемых проектов. А ошибок действительно 10000. Именно ошибок. Понятно, что многие из них не проявляют себя или проявляют крайне редко. Но это уже следствие проверки проектов наскоком. Естественно суть анализаторов коде не в этом, а в нахождении ошибок в свежем коде и тем самым сокращении времени на устранение дефектов на этапе тестирования.

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

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

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

а откуда столько ненависти в адрес разработчиков сей программы?

Разработчики выбрали гнусный способ саморекламы. Они паразитируют на опенсорсе и ничего не отдают взамен. Даже автор новости лично писал, что толку от их проверок нет и всё делается только ради пиара.

Смысл проверок — реклама PVS-Studio. ... Мы всегда говорим, что разовые проверки не имеют смысла и годятся только как реклама.

https://habrahabr.ru/company/pvs-studio/blog/307786/#comment_9753258

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

А ты точно уверен в том что все «Linux программисты» только и говорят про эту шнягу?

Да.

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

Так че с бесплатной версией для домашнего юзера? Есть она?

Нет.

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

Вынужден признать, что без Copy-Paste программирование временами будет крайне утомительным и скучным занятием. Без Ctrl-C, Ctrl-V программировать не получится

Фу на вас.... ах да, тогда сабж был бы менее нужен.

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

Разработчики выбрали гнусный способ саморекламы. Они паразитируют на опенсорсе и ничего не отдают взамен. Даже автор новости лично писал, что толку от их проверок нет и всё делается только ради пиара.

Смысл проверок — реклама PVS-Studio. ... Мы всегда говорим, что разовые проверки не имеют смысла и годятся только как реклама.

https://habrahabr.ru/company/pvs-studio/blog/307786/#comment_9753258

Согласен. Вот даже по вашей ссылке человек задал безобидный вопрос про сравнение Clang Static Analyze и у него теперь отрицательная карма.

Я вот выразил недоумение, что откровенное реклама делает на хабре (раньше хотя бы под статьи маскировали) https://habrahabr.ru/company/pvs-studio/blog/313498/

и слил себе половину кармы)))

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

anonymous
()

Давно хотел спросить - не было ли у вас планов прикрутить к анализатору оптимизатор и генератор кода? Т.е. были ли мысли о полноценном компиляторе?

alman ★★★
()

GPL-опроблемы успели поправить? :)

Тем не менее, удобная и крутая вещь. Молодцы.

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

Вот даже по вашей ссылке человек задал безобидный вопрос про сравнение Clang Static Analyze и у него теперь отрицательная карма. Я вот выразил недоумение, что откровенное реклама делает на хабре (раньше хотя бы под статьи маскировали).

Ну это вопросы к кармо...честву на швабре.

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

Как бы карма это не просто циферка, она имеет определенные последствия. Я эту карму набирал больше года, путем написания статей, а слил за один пост

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

А ты точно уверен в том что все «Linux программисты» только и говорят про эту шнягу?

Да.

Любого количества примеров недостаточно для доказательства высказывания «все ... говорят об ...». В то же время, одного контрпримера достаточно для опровержения.

Нравится тебе на вентилятор вбрасывать, что ли?

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

И поделом. Высказывания в фанатичной и категоричной манере мало красят человека.

Печально конечно, что на Хабре нельзя высказать свою точку зрения, если это не вылизывание причинного места. На ЛОРЕ линуксоиды уже высказали свое отношение. Но наверно это неправильные линуксоиды, и не для них предназначено.

Вы окончательное и единственное верное мнение за весь ЛОР вынесли?

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

ой все, я вижу ты из этой шайки тоже

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

Вы окончательное и единственное верное мнение за весь ЛОР вынесли?

А где там было высказано мнение за весь ЛОР?

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

Маководы не верят, что программы для мак могут глючить, зачем им?

Если разработчики под мак попадают в категорию «маководы», то надеюсь, что они о чём-то догадываются.

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

Давно хотел спросить - не было ли у вас планов прикрутить к анализатору оптимизатор и генератор кода? Т.е. были ли мысли о полноценном компиляторе?

Эээ..... Нет.

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

Когда конторка разорится, тогда всё выложат под GPLv3, как миленькие.

Со стороны не похоже, что они разоряются, но допустим. И что дальше? Думаешь народ бросится развивать и добавлять проверки?

DarkEld3r ★★★★★
()

Доклад на конференции C++ CoreHard Autumn 2016 «Что пришлось тестировать и о чем узнать при подготовке Linux-версии PVS-Studio».

Очень много времени Евгений рассказывает про то, как это удивительно, что заказчик (даже если этот заказчик сам разработчик) не знает что ему нужно даже если он уверен в обратном, и как он будет недоволен если сделать всё именно так, как он говорил изначально. Я в фирме, занимающейся разработкой ПО на заказ, это выучил первым же делом больше 10 лет назад. И любой аналитик это должен знать как азы. Собственно, всякие Agile-методолгоии появились во многом именно из-за этого известного факта.

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

Breaking news!

характерное для российского бизнеса «мы вам цену не скажем, пишите/звоните, там договоримся»

российского

Oracle - российская компания? Вот это поворот!

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

Не курю и не пью.

Очевидно, что автора новости.

Vudod ★★★★★
()
Ответ на: Breaking news! от hobbit

Тебе что-то непонятно в слове «характерный»? Ну так это не ко мне, а в школу.

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

Можно попробовать пропатчить внутренний глибц, а именно функцию time().

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

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

А может сообщество начнёт запиливать своё «pvs-studio»?

cppcheck есть. Можешь предлагать патчи уже сейчас.

hobbit ★★★★★
()
Ответ на: Breaking news! от hobbit

Ты в русский язык совсем не умеешь? Или в логику? «характерное для российского бизнеса» не значит что кроме российского бизнеса это нигде не используется.

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

LD_PRELOAD не сработает, они слинковали glibc статически. faketime не работает. В принципе, она одна используется для проверки лицензии в бета-версии. Не особо ковырял, но вроде как там именно вызов time().

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

Да на хабре теперь в основном вебдизигнеры всякие, только и делают, что жопы друг другу вылизывают. Ты как вчера родился.

false ★★★★★
()
Ответ на: комментарий от MuZHiK-2

Кстати! На opennet новость об этой поделке идет явно с пометкой «реклама», сразу видно что будут что-то впаривать, и это более точно отражает суть.

И это правильно. И снимает целый ряд вопросов. Кстати, дядя автор ведёт в комментариях переговоры о продаже, т.е. осуществляет коммерческую деятельность. Потенциально это даже опасно для ЛОРа.

Но здесь половина админов --- латентные или явные вендузятники, а вторая половина --- глубокие пофигисты. У меня было мнение, что авторы программулины администрации ЛОРа отбашляют, но, думаю, оно предвзято: не нужна диверсия там, где достаточно идиотизма и раздолбайства.

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

осуществляет коммерческую деятельность

А чего тут плохого?

Тут даже есть /Jobs

fornlr ★★★★★
()

молодцы!

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

В случае с лункусом, даже проприетарный софт большое достижение.

Linux - самая удобная платформа для разработки. Т.е. если ты пишешь исключительно под винду (или мак), то и работать имеет смысл по виндой (маком). А если что-то кроссплатформенное - то машина под линуксом однозначно лучший выбор. Это я к тому, что софта для разработки по Linux'ом предостаточно и он удобнее его использовать именно под этой платформой. Веб веб разработчиков, работающих на винде, вообще не понимаю.

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

Эта «поделка» помогла выявить несколько тысяч ошибок в опенсорс-ПО. Что же твой хвалёный Coverity этого не сделал?

Coverity это сделал, и выявил куда больше ошибок. Во-первых, потому что он доступен как бесплатный сервис и интегрируется с гитхабом. Во-вторых, он находит больше на ~20% больше ошибок и почти не фалсит, в отличие от. Мы сравнивали на работе.

slovazap ★★★★★
()

Всё ждал от вас новости, чтобы задать такой вопрос. Ваш анализатор на такой код что-нибудь выдаст:

#include <stdio.h>
#include <inttypes.h>

void a(void) {
  uint32_t a,b;
  int64_t c;
  a=10,b=11;
  c=(a-b);
  printf("C: %li\n",c);
}
void b(void) {
  uint8_t a,b;
  int16_t c;
  a=10,b=11;
  c=(a-b);
  printf("C: %i\n",c);
}

int main(void) {
  a();
  b();
  return 0;
}
ASM ★★
()

только одно замечание: man tar bomb. типичная виндузятская привычка.

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

Когда конторка разорится, тогда всё выложат под GPLv3, как миленькие.

А сколько ждать?

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

Ваш анализатор на такой код что-нибудь выдаст?

Если честно, я не уловил суть примера.

Анализатор на строке «printf(„C: %li\n“, c);» выдаёт: V576 Incorrect format. Consider checking the second actual argument of the 'printf' function. The actual argument equals '4294967295'.

Теперь прошу пояснить, что бы Вы хотели здесь видеть и почему. Т.е. прошу пояснить, что хотели узнать этим примером.

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

Если честно, я не уловил суть примера.

А жаль. Подобный код у миллионов людей приводит к ошибкам:

64% gcc-4.4.7 -m32 main.c ; ./a.out
C: -1
C: -1
64% gcc-4.4.7  main.c ; ./a.out
C: 4294967295
C: -1
64% gcc-6.2.0  main.c ; ./a.out
C: 4294967295
C: -1
64% gcc-6.2.0 -m32  main.c ; ./a.out 
C: -1
C: -1

ASM ★★
()
Последнее исправление: ASM (всего исправлений: 1)
Ответ на: комментарий от i-rinat
64% cat main.c
#include <stdio.h>
#include <inttypes.h>

void a(void) {
  uint32_t a,b;
  int64_t c;
  a=10,b=11;
  c=(a-b);
  printf("C: %li\n",(long int)c);
}
void b(void) {
  uint8_t a,b;
  int16_t c;
  a=10,b=11;
  c=(a-b);
  printf("C: %i\n",c);
}

int main(void) {
  a();
  b();
  return 0;
}

64% gcc-6.2.0  -Wall -Wpedantic main.c ; ./a.out
C: 4294967295
C: -1
ASM ★★
()
Ответ на: комментарий от ASM

А жаль

так ведь правильно анализатор указал. используешь платформонезависимые типы, используй и соответствующие спецификаторы для печати: PRId64.

vvviperrr ★★★★★
()
Ответ на: комментарий от i-rinat

А причём тут printf? Тут дело в том, что результат операций с 32-х битными операндами без приведения типа присваивается 64-х битному результату.

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

Всё верно говорите, только не эту ошибку обсуждаем.

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

А причём тут printf?

Я там увидел %i, который для int, а передавался туда int16_t.

Тут дело в том, что результат операций с 32-х битными операндами без приведения типа присваивается 64-х битному результату.

А там разве не ожидаемый результат?

Подправил код, чтобы -Wall ругалось на несоответствие типов, так видно, какой тип имеет выражение:

#include <stdio.h>
#include <inttypes.h>

void a(void) {
  uint32_t a = 10, b = 11;
  printf("%f", a - b);
}
void b(void) {
  uint8_t a = 10, b = 11;
  printf("%f", a - b);
}
int main(void) { a(); b(); return 0; }

q.c: In function ‘a’:
q.c:6:12: warning: format ‘%f’ expects argument of type ‘double’, but argument 2 has type ‘uint32_t {aka unsigned int}’ [-Wformat=]
   printf("%f", a - b);
            ^
q.c: In function ‘b’:
q.c:10:12: warning: format ‘%f’ expects argument of type ‘double’, but argument 2 has type ‘int’ [-Wformat=]
   printf("%f", a - b);
            ^

Суть — в type promotion. uint32_t уже имеет такой же размер в битах, что и int, поэтому остаётся как есть. uint8_t повышается до int. Это в описании языка есть, разве нет?

i-rinat ★★★★★
()
Последнее исправление: i-rinat (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.