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)
Ответ на: комментарий от tailgunner

И что? Для системного программирования достаточно и Си (без классов).

И что? Для системного программирования достаточно и ассемблера (без Си :-)

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

Много раз слышал эту чушь, но никогда не видел цифр.

Чушь? Нет, это не чушь. Чтобы в этом убедиться, достаточно попробовать написать на g++ загрузочную программу для дискеты флешки. Что-нибудь сложнее программы, выводящей «привет мир».

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

alman ★★★
()

Наконец-то под linux появится профессиональный софт для отладки

А то в этом решете по 11 лет бэкдоры не исправляют. Только не надейтесь что линуксятники что-то купят, они в жизни за софт не заплатят.

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

Для системного программирования достаточно и Си (без классов).

И что? Для системного программирования достаточно и ассемблера (без Си :-)

Именно так. Но ассемблер давно не используется в системном программировании (небольшие фрагменты не в счет). Так что всем пофиг на то, что он достаточен. Так же пофиг на то, что достаточен Си, это вообще не довод.

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

Много раз слышал эту чушь, но никогда не видел цифр.

Чушь? Нет, это не чушь.

И цифры где?

Чтобы в этом убедиться, достаточно попробовать написать на g++ загрузочную программу для дискеты флешки. Что-нибудь сложнее программы, выводящей «привет мир».

Просто чтобы ты понял нерелевантность своего примера - напиши драйвер умеренно сложного устройства (сетевой карты, например), влезающий в загрузочный сектор.

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

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

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

И цифры где?

0123456789 - это арабские цифры. I,II,III,IV,V,VI, etc - а это римские. :)

Просто чтобы ты понял нерелевантность своего примера - напиши драйвер умеренно сложного устройства (сетевой карты, например), влезающий в загрузочный сектор.

Нет, это ты не понимаешь о чём речь. Речь не о загрузочном секторе, а о программе на С++ без операционной системы. Пусть это будет хоть ПЗУ для девборды с экзотической архитектурой. Или даже не экзотической - пусть это будет BIOS для материнской платы.

Кстати, сетевой драйвер на C++ ты можешь найти вот на этой странице - http://l4os.ru/floppy_image/20110115

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

Это же элементарно - обработка исключений завязана на операционную систему. Если железо или операционная система не предоставляют возможности для обработки исключений, то... Впрочем, если железо не поддерживает аппаратную защиту, то о большинстве исключений можно забыть, а вот в случае отсутствия операционной системы реализация интерфейса между железом и «системной программой на С++» выльется в эпическую задачу.

Я не говорю что исключения не нужны. Но если на целевой архитектуре они не поддерживаются, то это не повод отказываться от использования классов.

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

Это же элементарно - обработка исключений завязана на операционную систему.

4.2. Дальше можно этот идиотизм не читать.

И да, я поясню тебе что имел ввиду tailgunner: ему просто было интересно, а накуя использовать исключения в загрузчике?

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

А разве им платят не за то чтобы помогали пердолить, когда одному скушно? НУ НЕ ЗА СОФТ ЖЕ В САМОМ ДЕЛЕ

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

И цифры где?

0123456789

Евгений?

Речь не о загрузочном секторе

Но как же:

alman> написать на g++ загрузочную программу для дискеты флешк

Ты этого не писал?

обработка исключений завязана на операционную систему

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

Эпик.

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

И причем тут аппаратные исключения к программным? У тебя в венде одно маппится на второе? Я за тебя рад.

5.4 If during the evaluation of an expression, the result is not mathematically defined or not in the range of representable values for its type, the behavior is undefined.

И никаких исключений.

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

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

Я даже больше скажу: всё больше интересно, зачем вообще использовать исключения :)

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

Как насчёт BIOS на С++?

Эпик

Не будешь ли так любезен пояснить, как ты будешь перехватывать Access Violation, например, на 8086?

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

Я даже больше скажу: всё больше интересно, зачем вообще использовать исключения :)

Тссс, не раскрывай сразу все карты.

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

Не будешь ли так любезен пояснить, как ты будешь перехватывать Access Violation, например, на 8086?

Не будешь ли ты так любезен пояснить, какое отношение имеет Access Violation к исключениям Си++?

Хотя... можешь не пояснять, я узнал типичные ошибки вендузятнега-самоучки.

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

Access Violation, например, на 8086

Ыыыыы... Расскажи-ка, где в 8086 ты нашел Access Violation?

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

Так, исключения из системного программирования исключили.

Чуть не забыл - цифры. На самом деле это довольно просто - достаточно помграться с опциями компилятора на предмет отключения стандартных библиотек, crt и обработчика исключений и сравнить размеры сгенерированных бинарей.

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

Так, исключения из системного программирования исключили.

Никто их не исключал, но неважно. Лучше расскажи о вреде шаблонов/дженериков в системном программировании.

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

Лучше расскажи о вреде шаблонов/дженериков в системном программировании.

Не использую, посему на эту тему мне сказать нечего. Сразу же сказал - мне хватает наследования, полиформизма и инкапсуляции.

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

Нее, так не пойдет. Когда включается полиморфизм, то он тянет за собой кучу кода, который в системном программировании является лишней сущностью.

anonymous
()

тред не читал, но по ссылке «Что пришлось тестировать и о чем узнать при подготовке Linux-версии PVS-Studio». сообщается. что видео удалено пользователем.

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

objdump -S myclass.o | less

Вот такая команда как бы разрушает все инсинуации о «куче кода».

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

LD_PRELOAD не сработает, они слинковали glibc статически.

Оп-па, серьёзно?! А исходники эти дебилы открыть при этом не забыли? Или хотя бы предоставить своё днище в виде объектных файлов с возможностью перелинковки пользователем? LGPL под которой glibc прямо запрещает статическую линковку без возможности перелинковки.

Если правда, то скоро они с http://gpl-violations.org/ познакомятся.

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

Вряд-ли. Компания маленькая и любой скандал ей будет на пользу. Это раз. Во вторых, это такая мелочь, что яйца выедённого не стоит. Неужели больше нет других продуктов с закрытым исходным кодом, которые живут с этим? Кому нужен такой прецедент? Вопрос риторический.

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

Не, там ниже в комментах пузан пообещал объектники предоставить по первому требованию. Может ведь не выглядеть ламером-маркетологом когда хочет.

zabbal ★★★★★
()

hotfix

echo -ne "\xe9\x37\x01\x00\x00" | dd of=pvs-studio seek=$((16#1d3a1f)) bs=1 conv=notrunc

tested on

5befc43afd49f9437800ff1e9b5f0db0  pvs-studio-6.10.19280.1-1.x86_64.tgz
anonymous
()
Ответ на: комментарий от alman

Какой такой прецедент? Бить сапогами нерадивых проприетарщиков? Нормальный прецедент, отревзляющий.

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

Просто чтобы ты понял нерелевантность своего примера - напиши драйвер умеренно сложного устройства (сетевой карты, например), влезающий в загрузочный сектор.

А Вы тоже не слышали про UEFI?

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

Тоже говорят про pvs-studio. Видимо есть такой вид людей, которые будут нудить и надоедать пока у них не купят pvs или не ответят по существу.

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

Жму руку Andrey_Karpov_2009. Так упорно и нагло продвигать своё поделие в сообществе, где тебе плюнул в рожу уже кажется каждый первый - это безусловно талант!

А мы что? А мы ничего. Их маркетологи уже всех притомили. Их вон на Википедии аж 6 лет назад забанили: https://en.wikipedia.org/wiki/MediaWiki_talk:Spam-whitelist/Archives/2009/04#...

Может и на Лоре, того?

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

https://youtu.be/auHdiSIhG3g

Дублируйте свои статьи текстом, ролики на ютубе смотрю только если хочется посмотреть на пуфыстых кошечек.

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

А Вы тоже не слышали про UEFI?

Слышали, не переживай. А от про UEFI, _написанный_ на Си++ (не поддерживающий программы на Си++, а написанный на нем) - не слышали.

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

Тебе вот смешно. А я вот вчера начал читать книгу Майерса «Effective Modern C++». А там в благодарностях автора первым стоит Андрей Карпов. И когда такой человек, практически с небес спускается до тебя, то это помоему круто.

ЗЫ: Олсо подписплся на Карпова в твиттере. Очень интересно, рекомендую.

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

Меня больше смутило

влезающий в загрузочный сектор.

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

А там в благодарностях автора первым стоит Андрей Карпов.

Во-первых вранье про «первым», во-вторых не в благодарностях, а в ссылке на пример, в третьих пример не самый лучший, т.к. в нем изначально зачем-то выбран левый тип вместо логичного size_t, причем этот код их же Visual обругает предупреждением, потому практической ценности в примере нет, кто хоть как-то следит за кодом и выхлопом компилятора такой ошибки не допустит.

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

Во-первых вранье про «первым», во-вторых не в благодарностях, а в ссылке на пример, в третьих пример не самый лучший, т.к. в нем изначально зачем-то выбран левый тип вместо логичного size_t, причем этот код их же Visual обругает предупреждением, потому практической ценности в примере нет, кто хоть как-то следит за кодом и выхлопом компилятора такой ошибки не допустит.

Человек с пони на аватарке не врать не может.

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

Человек с пони на аватарке не врать не может.

я смотрю человек с пони в каждой новости про PVS на говно исходит, совпадение?

anonymous
()

тестирую сабж на cmake-based проектах (т.е через compile_commands.json файл).

проблемы:

  • часто сегфолтится во время анализа. иногда помогает -j опция.
  • после анализа на многие файлы ругается ошибкой V001.
vvviperrr ★★★★★
()
Ответ на: комментарий от vvviperrr

часто сегфолтится

Ещё камень в огород, если создать пустой файл лицензии — сегфолтится. (дальше обращение авторам) Если на оффтопике работает хорошо, хотелось бы статью как вы смогли так облажаться перенося под linux. Думаю для всех будет хорошим уроком.

ASM ★★
()
Последнее исправление: ASM (всего исправлений: 1)

наиболее удачно справляется с поиском опечаток и последствий неудачного Copy-Paste

такие ошибки вообще надо искать?

pseudo-cat ★★★
()

Я правильно понимаю, что просто триальной версии, не требующей общения с продажниками PVS, не предоставляется?

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

я вот тоже не догнал. вроде только под винду триал есть.

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

тестирую сабж на cmake-based проектах (т.е через compile_commands.json файл). проблемы: .....

Прошу написать в поддержку.

А вот в книжках пишут, что нормальный владелец бизнеса в таком случае сам бы пнул своих сотрудников из поддержки, чтобы те быстренько связались с vvviperrr и выяснили, что к чему.

Видать, вруть бумагомаратели вроде Адизеса и Минцберга...

eao197 ★★★★★
()
Ответ на: комментарий от pseudo-cat

такие ошибки вообще надо искать?

Любые ошибки надо искать.

anonymous
()

Вот сложно было ткнуть сразу носом в это?

http://www.viva64.com/ru/w/V101/

Я тут весь уже на говно изошёлся, выслушал массу лесных отзывов о своей компетенции и о том, что моя проблема нафиг не нужна. А тут выясняется, что это первое, что вы проверяете своим анализатором!

Сказали бы выставить analysis-mode=5 и всё

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