Встраиваем 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. И вот что получилось.

Примечание. Статья впервые была опубликована на русском языке на сайте habrahabr.ru. Статья и её перевод размещаются на нашем сайте с согласия автора.

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

Рисунок 1 - External Tools Configurations / Main

Рисунок 1 - External Tools Configurations / Main

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

Рисунок 2 - External Tools Configurations / Main

Рисунок 2 - External Tools Configurations / Main

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

Рисунок 3 - Run as External Tool

Рисунок 3 - Run as External Tool

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

  • Выбираем External builder в качестве Build type
  • Снимаем галочку с "Use default build command"
  • В поле "Build command" вводим наш скрипт
  • Отмечаем "Generate Makefiles automatically"
Рисунок 4 - C/C++ Build

Рисунок 4 - C/C++ Build

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

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

Рисунок 5 - Run as Builder

Рисунок 5 - 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" 

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



Найдите ошибки в своем C, C++, C# и Java коде

Предлагаем попробовать проверить код вашего проекта с помощью анализатора кода PVS-Studio. Одна найденная в нём ошибка скажет вам о пользе методологии статического анализа кода больше, чем десяток статей.

goto PVS-Studio;


Найденные ошибки

Проверено проектов
346
Собрано ошибок
13 188

А ты совершаешь ошибки в коде?

Проверь с помощью
PVS-Studio

Статический анализ
кода для C, C++, C#
и Java

goto PVS-Studio;