Новость о возможности бесплатной проверки исходников с помощью 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)


  1. mayorovp
    02.12.2016 09:37

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


    1. SvyatoslavMC
      02.12.2016 09:41

      Сначала у нас так было для QMake. Позже мы сделали полноценную интеграцию анализатора в проектные файлы QMake и CMake без отслеживания. Думаю, это вопрос времени, разберёмся.


  1. ctapmex
    02.12.2016 11:04

    а под windows поддержка gcc будет работать в таком режиме?


    1. SvyatoslavMC
      02.12.2016 12:23
      +1

      GCC в Windows поддерживается. Инструмента из туториала прям в таком виде в Windows нету.

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

      1. Интегрировать в сборку ядро анализатора.
      2. Пользоваться специальной для таких случаев утилитой — Standalone. Отчёт можно просматривать прям там. В Linux такого инструмента пока нет, поэтому результатам анализа важно попасть в IDE.


  1. mrturkisk
    02.12.2016 12:41
    -3

    Лично мне уже надоели статьи про PVS-Studio.


    1. AllexIn
      02.12.2016 12:46
      +1

      В ноябре — в среднем раз в 2.5 дней статья. Никаких проблем игнорить статьи нет.
      Что вы предлагаете? Убрать с хабра все статьи, которые кому то надоели? Хабра не будет вообще.


      1. mrturkisk
        02.12.2016 12:49
        -3

        Можно, например, делать обзор всех изменений раз в месяц в обзорной статье.


        1. kloppspb
          02.12.2016 13:09
          +2

          Так с этим призывом не ко мне, а к PVS-Studio обращаться надо.


        1. SvyatoslavMC
          02.12.2016 13:39

          AllexIn правильно говорит. Неинтересные статьи надо просто игнорировать.

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


          1. mrturkisk
            02.12.2016 13:45

            А если бы Вы встречали через 2.5 дня статью, например, про MySql (одну из многих баз данных), вам бы не показалось это странным?


            1. kloppspb
              02.12.2016 13:54
              +2

              А чего в это этом странного? Интересует людей mysql — люди пишут про mysql, да хоть по 10 раз в день, имеют право. Не интересует тебя mysql — не читай, тем более что тут есть возможность выбирать что именно показывать в новостной ленте. А ещё лучше — пиши свои статьи, на интересные тебе темы.


            1. SvyatoslavMC
              02.12.2016 13:57
              +3

              Думаю нет. Точно также вижу каждый день Java где-нибудь, например. Я просто с уважением отношусь к людям из других сообществ и прокручиваю ленту дальше.

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


  1. Andrew_Crew_Kuznetsov
    02.12.2016 13:13

    Кому-то будет интересна подобная статья про Anjuta IDE?

    Себе настроил, могу рассказать.


    1. SvyatoslavMC
      02.12.2016 13:33
      +1

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

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


    1. icoz
      04.12.2016 11:42

      Прикольно. А для sublime?


      1. kloppspb
        04.12.2016 15:54

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

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