Начиная с версии 6.10 анализатор PVS-Studio поддерживает не только Windows, но и Linux платформу.
PVS-Studio выполняет статический анализ кода и генерирует отчёт, помогающий программисту находить и устранять ошибки. PVS-Studio выполняет широкий спектр проверок кода, но наиболее силён в поисках опечаток и последствий неудачного Copy-Paste. Показательные примеры таких ошибок: V501, V517, V522, V523, V571, V611.
Windows-версия анализатора по прежнему доступна здесь. Анализатор интегрируется с Visual Studio 2010-2015 или может использовать отдельно в режиме Standalone.
Новая Linux-версия (.deb, .rpm, .tgz) доступна для скачивания на странице:
» http://www.viva64.com/ru/pvs-studio-download-linux/
Мы также рекомендуем сразу ознакомиться с разделом документации "Как запустить PVS-Studio в Linux". Если что-то будет не понятно или что-то будет не работать, мы с радостью поможем вам, задавайте вопросы в почте.
Чтобы получить регистрационный ключ для знакомства с инструментом — напишите нам. Со временем процесс получения демонстрационной версии может измениться, но сейчас нам важно понимать кто качает анализатор, как его использует, какие проблемы возникают и так далее.
P.S. В первые дни после выхода Linux-версии нас может «накрыть» волна отзывов и вопросов. Поэтому если мы будем отвечать на вопросы с задержкой, просим понять и простить.
UPD. Большинство программистов плохо представляют, что означает создание PVS-Studio для Linux. Многие думают, что вся сложность в портировании кода, однако это очень далеко от истины: портировать код очень просто, однако это только 5% работы. Остальная работа скрыта от стороннего наблюдателя и заключается в решении многих инфраструктурных вопросов. Предлагаем заглянуть на кухню разработчиков анализатора PVS-Studio и узнать разные интересные нюансы их работы. Доклад на конференции C++ CoreHard Autumn 2016 «Что пришлось тестировать и о чем узнать при подготовке Linux-версии PVS-Studio»:
Комментарии (77)
sborisov
25.10.2016 10:00+6http://www.viva64.com/ru/m/0036/
И со средами разными интеграцию сделали. Молодцы! Проделали огромную работу!
vershov
25.10.2016 10:07+8Помнится, года три назад вы открещивались от Линукс версии по причине «никому будет не нужно». Молодцы, что передумали.
servekon
25.10.2016 10:08В репозитории планируете добавлять?
SvyatoslavMC
25.10.2016 10:47+2Репозитории есть! Но на данный момент тестируются.
Randl
26.10.2016 14:330xd34df00d
26.10.2016 18:35У них же даже tgz есть.
Не уверен, правда, что QA checks пройдёт, например, ну да ладно. Вечерком-другим сам наваяю ебилд, посмотрим.
dartraiden
25.10.2016 13:01-1В репозитории многих дистрибутивов (тот же Debian) не принимают проприетарное ПО.
Кроме того, разработчики сабжа неоднократно подчёркивали, что не продают PVS-Studio частным лицам.
Поэтому, скорее всего, репозиторий у них будет свой.FoxCanFly
25.10.2016 13:04+4В debian нет никаких проблем добавить свой репозиторий. И проприетарное ПО там принимают в non-free раздел кстати
Uint32
25.10.2016 21:16+1>>разработчики сабжа неоднократно подчёркивали, что не продают PVS-Studio частным лицам
Есть какой либо прогресс в этой области?
Думаю, что многим, как и мне интересен этот продукт, но смотреть на продукт, который тебе все равно не продадут — зачем?
1vanK
25.10.2016 10:30-23Жаль, что рекламу на Хабре перестали даже маскировать под статьи. Могли бы хотя бы сравнение запилить с существующими до этого аналогами на линуксе. А то они бедные прозябали столько лет во тьме.
EvgeniyRyzhkov
25.10.2016 10:34+15Поможете нам сделать такую статью, чтобы было больше объективности? Лицензию предоставим, с методологией подскажем.
1vanK
25.10.2016 10:37-28нет
DenimTornado
25.10.2016 11:53-5*звук_хлыста_из_теории_большого_взрыва*
1vanK
25.10.2016 12:23-1Печально конечно, что на Хабре нельзя высказать свою точку зрения, если это не вылизывание причинного места. На ЛОРЕ линуксоиды уже высказали свое отношение. Но наверно это неправильные линуксоиды, и не для них предназначено.
DarkEld3r
25.10.2016 12:40+5Причём здесь своё мнение? Я к сабжу прохладно отношусь, но какие-то статьи со сравнениями уже были. И разумеется в комментариях были недовольные методами сравнения. Прекрасно понимаю, что самому заморачиваться сравнением и писать статью может быть лень, но тогда забавно требовать это от других.
Тем более, что люди продолжали просить линукс-версию. В том числе, и на лоре, где контингент довольно специфический и на отдельных "ярких представителей" я бы равняться не стал.
1vanK
25.10.2016 12:47-6Я пишу статьи на темы, которые мне интересны. С какой стати я должен помогать рекламировать их продукт, существование которого для меня безразлично? Я захожу почитать статьи на технические темы, которыми славится Хабр а не рекламу. И высказал свое недоумение по этому поводу.
на лоре, где контингент довольно специфический
Весь их контингент такой, начиная с Торвальдса. И именно этому контингенту предназначен продукт.
DarkEld3r
25.10.2016 13:03+16Зачем рекламировать? Разнеси их в пух и прах, если получится, конечно. Опять же, странно жаловаться на рекламу: они ведь в свой блог пишут — всё это так или иначе будет рекламой.
Не интересен продукт? Тогда что в этой теме делать вообще? Вроде, по первым строкам и, тем более, картинке должно быть понятно о чём речь пойдёт.
Весь их контингент такой, начиная с Торвальдса.
Ничего подобного. Во первых, "даже" на лоре есть вполне адекватные и не фанатичные люди. И если на то пошло, то я лор регулярно почитываю, как раз благодаря более живым комментариям. Впрочем, это палка о двух концах.
Во вторых, уверяю, что линуксом (как инструментом) пользуются совершенно разные люди. По совершенно разным причинам. Среди них есть и разработчики, которым может быть интересен сабж.
DenimTornado
25.10.2016 16:40Хм, нужно, видимо пояснение, я не одобряю мысль комментатора выше, это был сарказм.
heleo
25.10.2016 11:09-1Приятно смотреть на то, что процесс всё же развиваеться) жаль пока не могу сам протестировать.
Ogi
25.10.2016 11:45+20А вы уже проверили Linux-версию PVS-Studio с помощью Linux-версии PVS-Studio и сообщили разработчикам о найденных ошибках?
kloppspb
25.10.2016 12:13Только 64?
Andrey2008
25.10.2016 12:33Да. Несколько минорных версий назад мы отказались от 32-битных версий. Слишком мал процент пользователей, чтобы заниматься с этой версией.
fshp
25.10.2016 13:20+3Бидапичаль. Рабочий проект прибит гвоздями к debian jessie i386, с кучей статических библиотек. Понятно, что x86 давно уже рудимент. Но менять десятки тысяч единиц оборудования никто не будет :-(
fshp
25.10.2016 20:30Кстати, а в чём сложность поддержки 32 бит? Уж вы то переносимый код писать умеете.
Andrey2008
25.10.2016 20:43+3Если кратко, то:
- Полный тестовый прогон это тяжкий процесс. Мы прогоняем PVS-Studio на 115 C++ открытых проектах и 50 C# открытых проектах. Все эти проекты прогоняются под Visual Studio 2010, 2012, 2013, 2015. Это много часов. Если надо прогнать ещё и 32-битную версию, это в 2 раза дольше. Плюс ещё под Linux теперь около 30 проектов.
- Собираемая статистика сказала нам, что количество запусков на Win32 системах меньше 4% (точное значение не помню). И дальше этот процент все равно будет только уменьшаться. А что касается клиентов, так вообще никого. Получается, что проблемы нет.
FoxCanFly
25.10.2016 13:09$ date +"%Y" 2016
kloppspb
25.10.2016 14:22+2И что? До фига кода надо поддерживать для 32. Многие клиенты любят принцип «работает — не трогай», в том числе и в отношении железа :-)
FoxCanFly
25.10.2016 16:47+5Так ваши клиенты просят, что бы у вас билд-сервера тоже все 32-битными были, или я не так понимаю?
kloppspb
25.10.2016 16:54Да. И тестовые машины тоже.
fshp
25.10.2016 17:56И уж тем более машины разработчиков.
Я тут CLion с нетерпением ждал. А потом раз — и выпилили поддержку 32 бит.
Частично спасает lxc/docker, что бы элементарно иметь на машине свежие версии инструментов, от которых не зависит сборка (git, браузер, ssh и т.д.). Но IDE всё равно приходится запускать из окружения.
FoxCanFly
25.10.2016 18:02+2А с чем требования то такие связаны? Это какая то религиозная неприязнь к 64 битным процессорам, что не хотят, что бы продукта касалось своими грязными лапами хоть что-то 64 битное?
fshp
25.10.2016 18:05Нет. Просто у клиентов есть куча оборудования, которое не поддерживает 64 бита. Оборудование копилось годами, со своими функциями оно справляется на ура. Менять его поэтому никто не будет.
NeoCode
25.10.2016 18:11+1Ну и что? В чем проблема завести хотя-бы один 64-битный компьютер специально для такого софта, который уже не существует для x32 но тем ни менее мог бы быть полезен при разработке?
fshp
25.10.2016 18:30Ну вот смотрите. Нужен мне PVS-Studio для анализа проекта.
Проект имеет в зависимостях статическую библиотеку, исходников которой я не имею. Т.е. просто пересобрать под 64 бита у меня не выйдет, и пересобирать библиотеку мне никто не будет.
Выхода 3:
1) Сборка на таргет-системе. Но тогда я не смогу использовать PVS.
2) Кросс-компиляция. Придётся подготовить своими силами sysroot, своевременно следить за обновлениями. Большие костыли с запуском и отладкой.
3) Сборка с multilib. К сожалению, в debian multilib не для всех пакетов корректно реализован. При попытке установки 32-битных версий зависимостей, dpkg предлагает снести полсистемы из-за конфликтов, вплоть до DE.
Теперь у меня есть 64-битная машина. Как это мне поможет?
NeoCode
25.10.2016 19:48Простите, а зачем собирать проект на x64? PVS-студио это же статический анализатор, ему вообще никакие компиляторы для работы не требуются. Или проблема в том что он считает все проекты по умолчанию только 64-битными?
CodeRush
25.10.2016 20:17+1PVS-Studio анилизирует не тектовые файлы, а препроцессированные, а получить их можно либо интегрировав анализатор в сборочную систему, либо запустив Compiler Monitoring и «поймав» эти файлы во время сборки. Самой программе, понятно, компилятор не нужен, не без него очень трудно получить то, что она ожидает на вход.
NeoCode
25.10.2016 21:17Тогда понятно. Тяжелое наследие Си в виде препроцессора и здесь сказывается))
SvyatoslavMC
25.10.2016 22:46Поясню несколько спорных моментов.
- Препроцессированные файлы — текстовые файлы.
- Получить их можно и нужно, запустив компилятор (вот где он нужен) с нужными параметрами.
- Правильная интеграция в сборочную систему позволяет правильно делать шаг, описанный выше.
- Смотреть на препроцессированные файлы пользователю обычно нет необходимости.
- Именно эти файлы являются исходными данными для анализа
CodeRush
25.10.2016 23:41Прошу прощения за неудачную формулировку, имел в виду «файлы с исходным текстом», а написал просто «текстовые».
SvyatoslavMC
25.10.2016 23:05Проект имеет в зависимостях статическую библиотеку, исходников которой я не имею. Т.е. просто пересобрать под 64 бита у меня не выйдет, и пересобирать библиотеку мне никто не будет.
Этапы линковки, что бы с ними не произошло, на анализ файлов не повлияют, но исходные файлы обязаны успешно компилиться.
Анализатор теперь только 64х битный, но анализировать он может любые компилируемые исходники, даже если компилятор 32х битный.fshp
25.10.2016 23:38Я не спорю, это можно сделать. Но из нажатия одной кнопки запуск анализа превращается в целый квест.
xpancy
25.10.2016 13:14+1Кто успел посмотреть видео? Поделитесь секретом, что там было?
SvyatoslavMC
25.10.2016 13:26Наше выступление: https://www.youtube.com/watch?v=auHdiSIhG3g&feature=youtu.be
CodeRush
25.10.2016 13:53+2Спасибо, теперь ждем версию для MacOS и интеграцию с XCode. *подмигивает*
NeoCode
25.10.2016 18:18Да, кстати хотел это же написать (кстати интересно чего минусуют). Это, можно сказать, большая тройка десктопных операционных систем (а значит систем на которых разрабатывают софт). И если уж вы взялись за поддержку Линукса, то обойти Макось было бы нарушением вселенского равновесия.
Планируете ли добавить поддержку ObjC, Swift?
Планируете ли добавить поддержку других языков, скажем Java (судя по сайту C# вы поддерживаете)?Andrey2008
25.10.2016 18:20Планируете ли добавить поддержку ObjC, Swift?
Пока нет.
Планируете ли добавить поддержку других языков, скажем Java (судя по сайту C# вы поддерживаете)?
Java — пока нет (но разные фантазии бродят).
C# — да, поддерживаем.NeoCode
25.10.2016 18:53-3Ну а про MacOSX так и не ответили ни да ни нет :) Можно ли из этого сделать какой-то вывод?
А ведь OSX и Java это пожалуй те технологии где больше всего крутится $$$: яболчная компания приучила своих пользователей за все платить, а java — это банковская сфера, которая всегда с деньгами.
HabraBabra
25.10.2016 19:46Было бы хорошо скриншотов каких нибудь, исслистрирующих работу, да и цену указать, если апа платная
kloppspb
25.10.2016 21:50У меня выдаётся такое:
$ pvs-studio-analyzer trace — make -f makefile all
…
strace: umovestr: short read (256 < 2049) @0x7fff37403e60: Bad address
Finished building target: klib
При этом бинарник получается точно такой же, как и при сборке без PWS.SvyatoslavMC
25.10.2016 22:49Это ошибка программы strace, которая возникает не на процессах компиляции, а на каких-нибудь системных процессах, которые шуржат во время сборки. Поэтому на анализ и сборку не влияет.
onto
25.10.2016 21:55Есть ли возможность интеграции с Qt Creator, но под Windows?
SvyatoslavMC
25.10.2016 22:58Проверять не Visual Studio проекты давно можно с помощью мониторинга компиляции, доступном в утилите Standalone.
Для интеграции в QMake/CMake/QtCreator/CLion мы разработали 2 модуля. С большой вероятностью они позволят выполнить аналогичную интеграцию и в Windows. Я проверю такую возможность, но чуть позже.
ZyXI
26.10.2016 00:19Получил 11 бету, всё никак не соберусь просмотреть все предупреждения, но от того, что видел общее впечатление «PVS плохо работает с пользовательскими макросами».
Установка сейчас очень простая: распаковать, создать
~/.local-pvs
,sed -r -i -e 's@^PREFIX=.*@PREFIX="$HOME/.local-pvs/bin"@' install.sh
(зачем вообще кто?то захардкодил там $PREFIX?),./install.sh
(можно с таким же успехом просто сделатьcp
имеющихся исполняемых файлов: скрипт просто зовёт install для копирования файлов с изменением пользователя/прав доступа, насколько я понимаю задачуinstall
).
Использование тоже просто: с https://github.com/neovim/neovim
git clone https://github.com/neovim/neovim cd neovim mkdir build && cd build cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$PWD/root -DJEMALLOC_USE_BUNDLED=1 path=( ~/.local-pvs/bin $path ) # То же, что и изменение $PATH rehash pvs-studio-analyzer trace -- make pvs-studio-analyzer analyze --lic-file /path/to/PVS-Studio.lic -o ../PVS-Studio.log plog-converter -t errorfile -o ../PVS-Studio.log.conv ../PVS-Studio.log # или plog-converter -t xml -o ../PVS-Studio.log.xml ../PVS-Studio.log
Первое выдаёт пригодные для того же Vim
/home/zyx/a.a/Proj/c/neovim/src/nvim/window.c:5138:1: error: V501 There are identical sub-expressions to the left and to the right of the '==' operator: (curtab) == curtab
, второе
<message> <trialMode>full</trialMode> <stringNumber>5138</stringNumber> <filePath>/home/zyx/a.a/Proj/c/neovim/src/nvim/window.c</filePath> <errorType>error</errorType> <errorCode>V501</errorCode> <errorText>There are identical sub-expressions to the left and to the right of the '==' operator: (curtab) == curtab</errorText> <isFalse>false</isFalse> <errorLevel>1</errorLevel> <prevString> int count = 0;</prevString> <currentString> FOR_ALL_WINDOWS_IN_TAB(wp, curtab) {</currentString> <nextString> if (wp->w_buffer != NULL</nextString> <extendedString></extendedString> </message>
. И это, как раз, пример сообщения об «ошибке» в макросах. Впрочем, из XML файла их легко убрать, просто не доходят руки написать фильтр. Ошибок PVS тоже немало нашёл, но шума от макросов куда больше.
Andrey2008
26.10.2016 09:11Вы можете подавлять предупреждения в макросах, написав (рядом с макросами) комментарии специального вида. Подробнее про это рассказывается в документации. Если не хотите изменять исходные коды, то можно написать эти комментарии в файле конфигурации диагностик pvsconfig (см. тот-же раздел документации).
1vanK
26.10.2016 01:00-1На ЛОРе пользователи в двух темах написали, что ваша студия статически линкуется с GPL кодом
http://www.linux.org.ru/news/proprietary/12967863/page4
http://www.linux.org.ru/forum/development/12896582/page2
Андрей Карпов живо откликается на многие вопросы, но на эти почему то не нашел времени ответить. Интересно было бы услышать комментарииAndrey2008
26.10.2016 10:58+6Наш продукт включает в себя библиотеку glibc, распространяемую под лицензией LGPL. В соответствии с лицензией LGPL, по запросу третьего лица, мы готовы предоставить объектные файлы, которые позволят перекомпоновать наш продукт с использованием другой версии glibc. Мы гарантируем работоспособность нашего продукта только с официальной версией glibc 2.23. Запросы на получение объектных файлов можно отправлять через форму обратной связи.
robert_ayrapetyan
26.10.2016 03:13+1Планируется ли поддержка ОС без strace (например, *BSD)?
SvyatoslavMC
26.10.2016 09:22Утилита strace — один из нескольких универсальных способов проверить любой проект без интеграции анализатора в сборочную систему.
Сам анализатор довольно универсальное приложение, но не Linux-base системы мы пока поддерживать не планируем.
Andrey2008
27.10.2016 09:45+2На Хабре решили не публиковать, а то зачастили. Но возможно читателям будет интересен очередной пример проверки проекта под Linux. Это CodeLite.
Linux-версия PVS-Studio не смогла обойти стороной CodeLite
khrisanfov
27.10.2016 15:14Что-то не понял как встроить анализатор в Clion. Должен ли я создать новую цель взамен основной или создать дополнительную с помощью команды pvs_studio_add_target? Не могли бы вы дать пример файла CMakeLists проекта, который изображен на скриншоте в документации?
PavelBelikov
28.10.2016 06:24+1cmake_minimum_required(VERSION 3.5)
project(example)
set(SOURCE_FILES main.cpp)
add_executable(example ${SOURCE_FILES})
include(PVS-Studio.cmake)
pvs_studio_add_target(TARGET analyze ALL
OUTPUT FORMAT errorfile
ANALYZE example
LOG PVS-Studio.log
LICENSE PVS-Studio.lic)
Создаётся новая цель analyze, которая осуществляет проверку. Если в аргументах указать ALL, то эта цель будет вызываться при сборке All targets. Если не указать, то нужно собирать analyze: сначала соберётся example, а потом analyze.
Andrey2008
28.10.2016 11:18+4Обращение ко всем пользователям Linux-версии PVS-Studio 6.10.
WARNING! Хочу обратить внимание, что сырой лог, полученный сразу после проверки использовать нельзя! Он не предназначен для просмотра и служит только как источник данных для программы plog-converter.
К нам стало приходить большое количество писем, что результатами работы PVS-Studio пользоваться невозможно. Программисты получают огромный файл, с тысячами одинаковых сообщений на один заголовочный *.h файл и прочим мусором. Мучаются, жалуются. Другие, наверное, не жалуются, а молча теряют интерес к PVS-Studio.
Эти файлы и не предназначены для просмотра. Для преобразования их в «человеческий» формат служит утилита plog-converter, описанная в документации. Эта утилита не только преобразует лог, но и удаляет в нём дубликаты для h-файлов, фильтрует сообщения и так далее. Например, есть смысл начать изучение отчета с предупреждений общего назначения первого и второго уровня (ключ -a GA:1,2). Это очень важно, так как иначе программист просто утонет в сообщениях.
В следующей версии, мы планируем изменить изначального формат лога, чтобы было понятно, что это некий бинарный формат и он не предназначен для просмотра. Это должно подсказать программисту, что с этим файлом надо ещё что-то сделать и он, продолжив в чтение документации, будет узнавать про plog-converter.
Randl
Это замечательно. Ждем ебилды.