PVS-Studio теперь в Compiler Explorer

    image1.png

    Совсем недавно произошло знаменательное событие: PVS-Studio появился в Compiler Explorer! Теперь вы можете быстро и легко проанализировать код на наличие ошибок прямо на сайте godbolt.org (Compiler Explorer). Это нововведение открывает большое количество новых возможностей – от утоления любопытства по поводу способностей анализатора до возможности быстро поделиться результатом проверки с другом. О том, как использовать эти возможности, и пойдёт речь в этой статье. Осторожно – большие гифки!

    Если вам хочется сразу перейти к делу и проанализировать код здесь и сейчас, то вот вам полностью готовая к использованию ссылка. Рекомендую добавить её себе в закладки – еще пригодится ;)

    Теперь давайте обо всём по порядку. Compiler Explorer – интерактивный онлайн-сервис для исследования компиляторов. Здесь вы можете прямо на сайте писать код и сразу видеть, какой ассемблерный вывод сгенерирует для него тот или иной компилятор:

    image2.gif

    Помимо этого, на сайте существует еще целый набор возможностей, и сегодня мы рассмотрим возможность проведения анализа с помощью PVS-Studio. Для того, чтобы провести анализ, необходимо сделать следующее:

    1. Зайти на сайт godbolt.org,
    2. Во вкладке с выводом компилятора нажать "Add tool...",
    3. В выпадающем списке выбрать "PVS-Studio".

    Пример такой последовательности действий вы можете увидеть на анимации ниже:

    image3.gif

    Готово! Теперь в появившемся окне будут автоматически выводиться все предупреждения, которые выдаются анализатором на ваш код. Анализировать можно как собственноручно написанный код, так и исходные файлы, загруженные по отдельности. Естественно, файлы должны быть самодостаточными и не использовать include на файлы, не входящие в стандартную библиотеку. В противном случае файл не получится ни скомпилировать, ни проверить.

    На данный момент анализ с помощью PVS-Studio доступен на сайте для всех версий GCC и Clang под платформы x86 и x64. Мы планируем расширить возможности сайта и на другие поддерживаемые нами компиляторы (например, MSVC или компиляторы для ARM), если на это будет спрос.

    Сейчас на сайте включены только General-диагностики уровней error, warning и note. Мы специально не стали включать остальные режимы (Optimization, 64-bit, Custom и MISRA), чтобы в выводе остались только самые важные предупреждения. Также, в отличие от самого PVS-Studio, Compiler Explorer пока не поддерживает языки C# и Java – мы планируем запустить анализ кода на этих языках, как только они там появятся :)

    Compiler Explorer имеет весьма умную систему окон, поэтому вы можете двигать их или, например, накладывать друг на друга. Если сейчас вас не интересует вывод компилятора, его можно "спрятать". Вот так:

    image4.gif

    Вы можете как сразу писать код в окне Compiler Explorer, так и загружать отдельные файлы. Для этого нужно нажать "Save/Load" и в открывшейся вкладке выбрать "File system". Также можно "скачать" написанный вами код на компьютер, нажав Ctrl + S.

    image5.gif

    На сайте нельзя анализировать проекты целиком – можно только загружать файлы по отдельности.

    Если вам хочется увидеть вывод вашей программы, то можно открыть окно выполнения, нажав "Add new… –> Execution only" в окне для написания кода (не в окне с компилятором). На гифке ниже вы можете увидеть вывод лабораторной работы, взятой из нашей страницы про бесплатное использование PVS-Studio студентами и преподавателями.

    image6.gif

    Кстати, вы заметили, что при переходе по ссылкам на godbolt у вас открывается уже заранее вписанный код в заранее расставленных окнах? Да, вы можете генерировать постоянные ссылки, полностью сохраняющие состояние страницы в момент генерации! Для этого вам нужно нажать на кнопку "Share" в правом верхнем углу экрана.

    image7.gif

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

    Мы планируем использовать эту возможность для работы с клиентами в техподдержке: зачастую использование Compiler Explorer является очень удобным для составления минимально воспроизводимых примеров, которые можно быстро взять и отправить по почте.

    Также в выпадающей вкладке "Share" есть пункт создания Embedded-ссылки, с помощью которой можно встроить окно с Compiler Explorer на какой-нибудь другой сайт.

    В Compiler Explorer всегда находится актуальная версия PVS-Studio, поэтому после каждого нашего релиза на сайте можно будет найти всё больше и больше ошибок. Тем не менее, использование PVS-Studio на godbolt.org не дает полного представления о его возможностях, ведь PVS-Studio – это не только диагностики, но и развитая инфраструктура:

    • Анализ кода на языках C, C++, C# и Java для куда большего количества платформ и компиляторов;
    • Плагины для Visual Studio 2010-2019, JetBrains Rider, IntelliJ IDEA;
    • Возможность интеграции в TeamCity, PlatformIO, Azure DevOps, Travis CI, CircleCI, GitLab CI/CD, Jenkins, SonarQube и т.д.
    • Утилита мониторинга компиляции для проведения анализа независимо от IDE или сборочной системы;
    • И многое, многое другое.

    В конце концов, только скачав анализатор вы сможете полноценно проанализировать проект, состоящий из нескольких файлов. Поэтому самый лучший способ получить правильное представление о PVS-Studio – скачать анализатор и попробовать его на своём проекте.

    Чтобы всегда быть в курсе, следите за нашими новостями. Также читайте наш блог: там мы публикуем не только новости и статьи о поиске багов в реальных проектах, но и различные интересные моменты, связанные с C, C++, C# и Java.

    Наши соцсети:



    Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: George Gribkov. PVS-Studio is now in Compiler Explorer!.
    PVS-Studio
    Static Code Analysis for C, C++, C# and Java

    Комментарии 5

      0
      Не совсем понятно как анализировать два файла для C++: хидер и реализацию, если CompileExplorer анализирует только один файл.
        +2

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

          0
          Пускай это далеко и не элегантный метод, но есть возможность подключить заголовочный файл по url. Это, может быть, хоть какая-то альтернатива ручной вставке контента заголовка. В моём небольшом примере проблем не возникло, хотя я и не уверен, насколько корректно компилятор, PVS или другой инструментарий обработает такой исходный файл в более сложных случаях
          +4
          Молодцы! Хоть сам по себе кейс анализа небольшоо курса не очень жизненный, но развитие проекта радует.
          P.S. Интересно, найдутся ли умельцы, кто сможет эксплуатировать бесплатность функционала :)
            +2
            Спасибо за статью, все понятно в целом

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

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