PVS-Studio для Linux

    PVS-Studio for LinuxСвершилось! Сегодня мы выпустили публичную версию анализатора PVS-Studio для Linux. Теперь разработчики Linux приложений получат новое мощное оружие для борьбы с багами в коде. Призываем разнести эту новость по миру. Расскажите своим коллегам по работе, напишите в Twitter и Facebook! Да будут программы надёжней и стабильней!

    Начиная с версии 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»:

    PVS-Studio

    461,00

    Ищем ошибки в C, C++ и C# на Windows, Linux, macOS

    Поделиться публикацией

    Похожие публикации

    Комментарии 84
      +11

      Это замечательно. Ждем ебилды.

        +6
        http://www.viva64.com/ru/m/0036/
        И со средами разными интеграцию сделали. Молодцы! Проделали огромную работу!
          +8
          Помнится, года три назад вы открещивались от Линукс версии по причине «никому будет не нужно». Молодцы, что передумали.
            0
            В репозитории планируете добавлять?
              0

              Да, хотелось бы ppa.

                +2
                Репозитории есть! Но на данный момент тестируются.
                  0
                    0
                    У них же даже tgz есть.

                    Не уверен, правда, что QA checks пройдёт, например, ну да ладно. Вечерком-другим сам наваяю ебилд, посмотрим.
                  –1
                  В репозитории многих дистрибутивов (тот же Debian) не принимают проприетарное ПО.
                  Кроме того, разработчики сабжа неоднократно подчёркивали, что не продают PVS-Studio частным лицам.

                  Поэтому, скорее всего, репозиторий у них будет свой.
                    +4
                    В debian нет никаких проблем добавить свой репозиторий. И проприетарное ПО там принимают в non-free раздел кстати
                      +1
                      >>разработчики сабжа неоднократно подчёркивали, что не продают PVS-Studio частным лицам
                      Есть какой либо прогресс в этой области?
                      Думаю, что многим, как и мне интересен этот продукт, но смотреть на продукт, который тебе все равно не продадут — зачем?
                    –23

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

                      +15
                      Поможете нам сделать такую статью, чтобы было больше объективности? Лицензию предоставим, с методологией подскажем.
                        –28

                        нет

                          –5
                          Ты сам знаешь чей это ответ.
                            –5
                            *звук_хлыста_из_теории_большого_взрыва*
                              –1

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

                                0
                                Так здесь было всегда. Я знал на что шел шутя эту шутку.
                                  –3

                                  А на ЛОРе на что угодно админы локалхоста пишут "не нужно". Вот это круто!

                                    +5

                                    Причём здесь своё мнение? Я к сабжу прохладно отношусь, но какие-то статьи со сравнениями уже были. И разумеется в комментариях были недовольные методами сравнения. Прекрасно понимаю, что самому заморачиваться сравнением и писать статью может быть лень, но тогда забавно требовать это от других.


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

                                      –6

                                      Я пишу статьи на темы, которые мне интересны. С какой стати я должен помогать рекламировать их продукт, существование которого для меня безразлично? Я захожу почитать статьи на технические темы, которыми славится Хабр а не рекламу. И высказал свое недоумение по этому поводу.


                                      на лоре, где контингент довольно специфический

                                      Весь их контингент такой, начиная с Торвальдса. И именно этому контингенту предназначен продукт.

                                        +16

                                        Зачем рекламировать? Разнеси их в пух и прах, если получится, конечно. Опять же, странно жаловаться на рекламу: они ведь в свой блог пишут — всё это так или иначе будет рекламой.


                                        Не интересен продукт? Тогда что в этой теме делать вообще? Вроде, по первым строкам и, тем более, картинке должно быть понятно о чём речь пойдёт.


                                        Весь их контингент такой, начиная с Торвальдса.

                                        Ничего подобного. Во первых, "даже" на лоре есть вполне адекватные и не фанатичные люди. И если на то пошло, то я лор регулярно почитываю, как раз благодаря более живым комментариям. Впрочем, это палка о двух концах.


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

                                          –13

                                          нет

                                            +6
                                            Будь у меня возможность заминусовать, я бы тоже поставил минус вашему комментарию. Потому что он не несет никакой ценности для меня, как для читающего его, кроме того что это ваше мнение. Мне не сильно интересно ваше мнение, честно сказать.
                                              –6

                                              Ваш комментарий тоже не имеет для меня ценности.

                                    0
                                    Хм, нужно, видимо пояснение, я не одобряю мысль комментатора выше, это был сарказм.
                                  +3
                                  Попросите дедфуда :-)
                                    +3
                                    У меня Coverity не завёлся, сравнение будет неполным :(
                                  +4
                                  Если бы вся рекламы была бы такой, то и всякие плагины типа AdBlock, RequestPolicy и NoScript не нужны были бы!
                                    –8

                                    Какой такой? Покупайте наш новый пантин прови, теперь с активной формулой. В чем отличие?

                                  0
                                  Ура-ура! Тестировал бету, был очень доволен. Вы молодцы!
                                    –1
                                    Приятно смотреть на то, что процесс всё же развиваеться) жаль пока не могу сам протестировать.
                                      +20
                                      А вы уже проверили Linux-версию PVS-Studio с помощью Linux-версии PVS-Studio и сообщили разработчикам о найденных ошибках?
                                        0
                                        Только 64?
                                          0
                                          Да. Несколько минорных версий назад мы отказались от 32-битных версий. Слишком мал процент пользователей, чтобы заниматься с этой версией.
                                            +3

                                            Бидапичаль. Рабочий проект прибит гвоздями к debian jessie i386, с кучей статических библиотек. Понятно, что x86 давно уже рудимент. Но менять десятки тысяч единиц оборудования никто не будет :-(

                                              0

                                              Кстати, а в чём сложность поддержки 32 бит? Уж вы то переносимый код писать умеете.

                                                +3
                                                Если кратко, то:

                                                • Полный тестовый прогон это тяжкий процесс. Мы прогоняем PVS-Studio на 115 C++ открытых проектах и 50 C# открытых проектах. Все эти проекты прогоняются под Visual Studio 2010, 2012, 2013, 2015. Это много часов. Если надо прогнать ещё и 32-битную версию, это в 2 раза дольше. Плюс ещё под Linux теперь около 30 проектов.
                                                • Собираемая статистика сказала нам, что количество запусков на Win32 системах меньше 4% (точное значение не помню). И дальше этот процент все равно будет только уменьшаться. А что касается клиентов, так вообще никого. Получается, что проблемы нет.

                                              0
                                              $ date +"%Y"
                                              2016
                                              
                                                +2
                                                И что? До фига кода надо поддерживать для 32. Многие клиенты любят принцип «работает — не трогай», в том числе и в отношении железа :-)
                                                  +5
                                                  Так ваши клиенты просят, что бы у вас билд-сервера тоже все 32-битными были, или я не так понимаю?
                                                    0
                                                    Да. И тестовые машины тоже.
                                                      0

                                                      И уж тем более машины разработчиков.
                                                      Я тут CLion с нетерпением ждал. А потом раз — и выпилили поддержку 32 бит.


                                                      Частично спасает lxc/docker, что бы элементарно иметь на машине свежие версии инструментов, от которых не зависит сборка (git, браузер, ssh и т.д.). Но IDE всё равно приходится запускать из окружения.

                                                        +2
                                                        А с чем требования то такие связаны? Это какая то религиозная неприязнь к 64 битным процессорам, что не хотят, что бы продукта касалось своими грязными лапами хоть что-то 64 битное?
                                                          0

                                                          Нет. Просто у клиентов есть куча оборудования, которое не поддерживает 64 бита. Оборудование копилось годами, со своими функциями оно справляется на ура. Менять его поэтому никто не будет.

                                                            +1
                                                            Ну и что? В чем проблема завести хотя-бы один 64-битный компьютер специально для такого софта, который уже не существует для x32 но тем ни менее мог бы быть полезен при разработке?
                                                              0

                                                              Ну вот смотрите. Нужен мне PVS-Studio для анализа проекта.
                                                              Проект имеет в зависимостях статическую библиотеку, исходников которой я не имею. Т.е. просто пересобрать под 64 бита у меня не выйдет, и пересобирать библиотеку мне никто не будет.


                                                              Выхода 3:
                                                              1) Сборка на таргет-системе. Но тогда я не смогу использовать PVS.
                                                              2) Кросс-компиляция. Придётся подготовить своими силами sysroot, своевременно следить за обновлениями. Большие костыли с запуском и отладкой.
                                                              3) Сборка с multilib. К сожалению, в debian multilib не для всех пакетов корректно реализован. При попытке установки 32-битных версий зависимостей, dpkg предлагает снести полсистемы из-за конфликтов, вплоть до DE.


                                                              Теперь у меня есть 64-битная машина. Как это мне поможет?

                                                                0
                                                                Простите, а зачем собирать проект на x64? PVS-студио это же статический анализатор, ему вообще никакие компиляторы для работы не требуются. Или проблема в том что он считает все проекты по умолчанию только 64-битными?
                                                                  +1
                                                                  PVS-Studio анилизирует не тектовые файлы, а препроцессированные, а получить их можно либо интегрировав анализатор в сборочную систему, либо запустив Compiler Monitoring и «поймав» эти файлы во время сборки. Самой программе, понятно, компилятор не нужен, не без него очень трудно получить то, что она ожидает на вход.
                                                                    0
                                                                    Тогда понятно. Тяжелое наследие Си в виде препроцессора и здесь сказывается))
                                                                      0
                                                                      Поясню несколько спорных моментов.

                                                                      • Препроцессированные файлы — текстовые файлы.
                                                                      • Получить их можно и нужно, запустив компилятор (вот где он нужен) с нужными параметрами.
                                                                      • Правильная интеграция в сборочную систему позволяет правильно делать шаг, описанный выше.
                                                                      • Смотреть на препроцессированные файлы пользователю обычно нет необходимости.
                                                                      • Именно эти файлы являются исходными данными для анализа
                                                                        0
                                                                        Прошу прощения за неудачную формулировку, имел в виду «файлы с исходным текстом», а написал просто «текстовые».
                                                                    0
                                                                    Проект имеет в зависимостях статическую библиотеку, исходников которой я не имею. Т.е. просто пересобрать под 64 бита у меня не выйдет, и пересобирать библиотеку мне никто не будет.

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

                                                                    Анализатор теперь только 64х битный, но анализировать он может любые компилируемые исходники, даже если компилятор 32х битный.
                                                                      0

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

                                                                        0

                                                                        Как-то так не сработает?


                                                                        echo #!/usr/bin/ssh {x64host} > /usr/bin/pvs-studio


                                                                        Ну и на {x64host} подмонтировать сетевую диру с исходниками :)

                                                                          0

                                                                          Способ интересный. Но pvs не через стандартный поток работает. Он вроде перехватывает системные вызовы, которые система сборки вызывает. А для этого его необходимо на той же машине запускать.

                                                                            0

                                                                            Так если в систему сборки встраивать — то перехват системных вызовов не нужен.

                                                                            0

                                                                            Но мне уже тут сказали, что линковка не влияет на анализ. Так что попробую запустить сборку на 64-битной машине.

                                                                          0

                                                                          Я последовал вашему совету. Запускал pvs через trace. Файлы компилируются успешно, но make прерывает сборку на этапе линковки. Лог-файл от pvs не создаётся.
                                                                          Так же я пробовал интеграцию с qmake. Тоже никакой реакции.


                                                                          Подскажите, лог создаётся после компиляции или во время?

                                                      +1
                                                      Кто успел посмотреть видео? Поделитесь секретом, что там было?
                                                        0
                                                        Полная версия тут: https://www.youtube.com/watch?v=IpN76t_84h4
                                                          0
                                                          Наше выступление: https://www.youtube.com/watch?v=auHdiSIhG3g&feature=youtu.be
                                                            +1
                                                            Перезалили. Теперь здесь: https://youtu.be/auHdiSIhG3g
                                                            +2
                                                            Спасибо, теперь ждем версию для MacOS и интеграцию с XCode. *подмигивает*
                                                              0
                                                              Да, кстати хотел это же написать (кстати интересно чего минусуют). Это, можно сказать, большая тройка десктопных операционных систем (а значит систем на которых разрабатывают софт). И если уж вы взялись за поддержку Линукса, то обойти Макось было бы нарушением вселенского равновесия.
                                                              Планируете ли добавить поддержку ObjC, Swift?
                                                              Планируете ли добавить поддержку других языков, скажем Java (судя по сайту C# вы поддерживаете)?
                                                                0
                                                                Планируете ли добавить поддержку ObjC, Swift?
                                                                Пока нет.

                                                                Планируете ли добавить поддержку других языков, скажем Java (судя по сайту C# вы поддерживаете)?
                                                                Java — пока нет (но разные фантазии бродят).

                                                                C# — да, поддерживаем.
                                                                  –3
                                                                  Ну а про MacOSX так и не ответили ни да ни нет :) Можно ли из этого сделать какой-то вывод?
                                                                  А ведь OSX и Java это пожалуй те технологии где больше всего крутится $$$: яболчная компания приучила своих пользователей за все платить, а java — это банковская сфера, которая всегда с деньгами.
                                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                                  0
                                                                  У меня выдаётся такое:

                                                                  $ pvs-studio-analyzer trace — make -f makefile all

                                                                  strace: umovestr: short read (256 < 2049) @0x7fff37403e60: Bad address
                                                                  Finished building target: klib

                                                                  При этом бинарник получается точно такой же, как и при сборке без PWS.
                                                                    0
                                                                    Это ошибка программы strace, которая возникает не на процессах компиляции, а на каких-нибудь системных процессах, которые шуржат во время сборки. Поэтому на анализ и сборку не влияет.
                                                                    0
                                                                    Есть ли возможность интеграции с Qt Creator, но под Windows?
                                                                      0
                                                                      Проверять не Visual Studio проекты давно можно с помощью мониторинга компиляции, доступном в утилите Standalone.

                                                                      Для интеграции в QMake/CMake/QtCreator/CLion мы разработали 2 модуля. С большой вероятностью они позволят выполнить аналогичную интеграцию и в Windows. Я проверю такую возможность, но чуть позже.
                                                                      0

                                                                      Получил 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 тоже немало нашёл, но шума от макросов куда больше.

                                                                        0
                                                                        Вы можете подавлять предупреждения в макросах, написав (рядом с макросами) комментарии специального вида. Подробнее про это рассказывается в документации. Если не хотите изменять исходные коды, то можно написать эти комментарии в файле конфигурации диагностик pvsconfig (см. тот-же раздел документации).
                                                                        –1

                                                                        На ЛОРе пользователи в двух темах написали, что ваша студия статически линкуется с GPL кодом
                                                                        http://www.linux.org.ru/news/proprietary/12967863/page4
                                                                        http://www.linux.org.ru/forum/development/12896582/page2
                                                                        Андрей Карпов живо откликается на многие вопросы, но на эти почему то не нашел времени ответить. Интересно было бы услышать комментарии

                                                                          +6
                                                                          Наш продукт включает в себя библиотеку glibc, распространяемую под лицензией LGPL. В соответствии с лицензией LGPL, по запросу третьего лица, мы готовы предоставить объектные файлы, которые позволят перекомпоновать наш продукт с использованием другой версии glibc. Мы гарантируем работоспособность нашего продукта только с официальной версией glibc 2.23. Запросы на получение объектных файлов можно отправлять через форму обратной связи.
                                                                        +1
                                                                        Планируется ли поддержка ОС без strace (например, *BSD)?
                                                                          0
                                                                          Утилита strace — один из нескольких универсальных способов проверить любой проект без интеграции анализатора в сборочную систему.

                                                                          Сам анализатор довольно универсальное приложение, но не Linux-base системы мы пока поддерживать не планируем.
                                                                          +2
                                                                          На Хабре решили не публиковать, а то зачастили. Но возможно читателям будет интересен очередной пример проверки проекта под Linux. Это CodeLite.

                                                                          Linux-версия PVS-Studio не смогла обойти стороной CodeLite
                                                                            0
                                                                            Что-то не понял как встроить анализатор в Clion. Должен ли я создать новую цель взамен основной или создать дополнительную с помощью команды pvs_studio_add_target? Не могли бы вы дать пример файла CMakeLists проекта, который изображен на скриншоте в документации?
                                                                              +1
                                                                              cmake_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.
                                                                              +4

                                                                              Обращение ко всем пользователям Linux-версии PVS-Studio 6.10.


                                                                              WARNING! Хочу обратить внимание, что сырой лог, полученный сразу после проверки использовать нельзя! Он не предназначен для просмотра и служит только как источник данных для программы plog-converter.


                                                                              К нам стало приходить большое количество писем, что результатами работы PVS-Studio пользоваться невозможно. Программисты получают огромный файл, с тысячами одинаковых сообщений на один заголовочный *.h файл и прочим мусором. Мучаются, жалуются. Другие, наверное, не жалуются, а молча теряют интерес к PVS-Studio.


                                                                              Эти файлы и не предназначены для просмотра. Для преобразования их в «человеческий» формат служит утилита plog-converter, описанная в документации. Эта утилита не только преобразует лог, но и удаляет в нём дубликаты для h-файлов, фильтрует сообщения и так далее. Например, есть смысл начать изучение отчета с предупреждений общего назначения первого и второго уровня (ключ -a GA:1,2). Это очень важно, так как иначе программист просто утонет в сообщениях.


                                                                              В следующей версии, мы планируем изменить изначального формат лога, чтобы было понятно, что это некий бинарный формат и он не предназначен для просмотра. Это должно подсказать программисту, что с этим файлом надо ещё что-то сделать и он, продолжив в чтение документации, будет узнавать про plog-converter.

                                                                              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                              Самое читаемое