Встраиваем PVS-Studio в Eclipse CDT (Linux)

Новость о возможности бесплатной проверки исходников с помощью PVS-Studio наконец-то простимулировала меня внедрить проверку исходников в Eclipse CDT. А то для CLion/QtCreator/etc написано как, а фиолетовых обошли :) Для экспериментов использовались: Eclipse IDE for C/C++ Developers, Version: Neon.1a Release (4.6.1), Build id: 20161007-1200 и PVS-Studio 6.11.20138.1. И вот что получилось.

Для начала обернём вызов анализатора в скрипт (о нём позже) и будем вызывать его как внешнюю утилиту. В конфигурации укажем рабочий каталог:

External Tools Configurations / Main


И включим галочку «Allocate console»:

External Tools Configurations / Common


Недостаток этого способа в том, что вывод не будет разбираться эклипсовским парсером, и его можно будет увидеть только в консоли:

Run as External Tool


Если такой способ не устраивает, можно встроить проверку во внешнюю утилиту для сборки. Способ годится не для всех проектов, но если он устраивает, то идём в свойства проекта и настраиваем параметры External Builder для текущей конфигурации:

  1. Выбираем External builder в качестве Build type
  2. Снимаем галочку с «Use default build command»
  3. В поле «Build command» вводим наш скрипт
  4. Отмечаем «Generate Makefiles automatically»

C/C++ Build


Ключ "-k" Eclipse добавляет сам. Соответственно, при построении проекта наш скрипт будет вызван с ключами "-k all", при очистке — с "-k clean".

В итоге мы получим автоматическую проверку проекта при сборке, плюс вывод, который разбирается Eclipse и, как следствие, навигацию по исходникам в окне «Problems»:

Run as Builder


Ну а теперь сам скрипт:

#!/bin/sh

# без аргументов скрипт вызывается как External Tool, принудительно вызываем `make clean`:
if [ -z "$1" ]; then
    make -f makefile clean
fi

# вызов из билдера, проверяем цели:
if [ "$2" = "clean" ]; then
    make -f makefile clean
   # здесь больше ничего делать не надо:
    exit
fi

# не clean или вызвали как External Tool - анализируем проект:
TEMPLOG=$(tempfile)

# удаляем ошмётки `strace`, которые могут появиться в некоторых случаях:
pvs-studio-analyzer trace -- make -f makefile all 2>&1 | sed '/strace: umovestr:/d' -
pvs-studio-analyzer analyze -o "$TEMPLOG"

# удаляем непонятную строку, которая у меня появляется в выводе конвертера:
RC=$(plog-converter -t errorfile "$TEMPLOG" | sed '/The documentation for all/d' -)
rm -f "$TEMPLOG"
echo "$RC"

Пока всё. На реальных проектах ещё ничего не гонялось, может там и вылезут какие-то недоделки. Но общая схема в принципе понятна.
Поделиться публикацией
Комментарии 16
    0

    То есть теперь отслеживание запуском компилятора называется "встроили в билд"? А ведь еще кто-то возмущался, зачем оно вообще сделано, неудобно же пользоваться…

      0
      Сначала у нас так было для QMake. Позже мы сделали полноценную интеграцию анализатора в проектные файлы QMake и CMake без отслеживания. Думаю, это вопрос времени, разберёмся.
      0
      а под windows поддержка gcc будет работать в таком режиме?
        +1
        GCC в Windows поддерживается. Инструмента из туториала прям в таком виде в Windows нету.

        Но есть 2 возможных варианта завести анализатор:

        1. Интегрировать в сборку ядро анализатора.
        2. Пользоваться специальной для таких случаев утилитой — Standalone. Отчёт можно просматривать прям там. В Linux такого инструмента пока нет, поэтому результатам анализа важно попасть в IDE.
        –3
        Лично мне уже надоели статьи про PVS-Studio.
          +1
          В ноябре — в среднем раз в 2.5 дней статья. Никаких проблем игнорить статьи нет.
          Что вы предлагаете? Убрать с хабра все статьи, которые кому то надоели? Хабра не будет вообще.
            –3
            Можно, например, делать обзор всех изменений раз в месяц в обзорной статье.
              +2
              Так с этим призывом не ко мне, а к PVS-Studio обращаться надо.
                0
                AllexIn правильно говорит. Неинтересные статьи надо просто игнорировать.

                Я, например, за много лет не открыл ни одну статью про базы данных т.к. не интересуюсь. Следовательно, на этой почве не возникло ни одного конфликта с авторами и их публикациями.
                  0
                  А если бы Вы встречали через 2.5 дня статью, например, про MySql (одну из многих баз данных), вам бы не показалось это странным?
                    +2
                    А чего в это этом странного? Интересует людей mysql — люди пишут про mysql, да хоть по 10 раз в день, имеют право. Не интересует тебя mysql — не читай, тем более что тут есть возможность выбирать что именно показывать в новостной ленте. А ещё лучше — пиши свои статьи, на интересные тебе темы.
                      +3
                      Думаю нет. Точно также вижу каждый день Java где-нибудь, например. Я просто с уважением отношусь к людям из других сообществ и прокручиваю ленту дальше.

                      Вообще я давно перешёл на просмотр «Всё подряд», потому что материала на хабре и гиктаймс действительно поубавилось в последнее время. Может по этой причине мы стали встречать что-то чаще обычного.
              0
              Кому-то будет интересна подобная статья про Anjuta IDE?

              Себе настроил, могу рассказать.
                +1
                Было бы здорово иметь такую статью. Предусмотреть в документации всё сложно. Тем более статью не минусуют, т.к. сделана пользователями для пользователей.

                На крайний случай я хотел бы сам увидеть мануал в личке/почте для изучения и обновления документации. Но не вижу ничего плохого в статье.
                  0
                  Прикольно. А для sublime?
                    0
                    Первый способ должен работать в любых редакторах/IDE, которые поддерживают запуск внешних утилит с передачей им каких-то аргументов (то есть если внутри утилиты можно понять что именно собирать и проверять).

                    Можно ли встроить так, чтобы работала навигация по предупреждениям — надо брать sublime и разбираться. Может придётся подправить формат вывода, может что-то ещё докрутить, не знаю.

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

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