[recovery mode] Встраиваем 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. И вот что получилось.
Для начала обернём вызов анализатора в скрипт (о нём позже) и будем вызывать его как внешнюю утилиту. В конфигурации укажем рабочий каталог:
И включим галочку «Allocate console»:
Недостаток этого способа в том, что вывод не будет разбираться эклипсовским парсером, и его можно будет увидеть только в консоли:
Если такой способ не устраивает, можно встроить проверку во внешнюю утилиту для сборки. Способ годится не для всех проектов, но если он устраивает, то идём в свойства проекта и настраиваем параметры External Builder:
Ключ »-k» Eclipse добавляет сам. Соответственно, при построении проекта наш скрипт будет вызван с ключами »-k all», при очистке — с »-k clean».
Ну, а теперь сам скрипт:
Пока всё. На реальных проектах ещё ничего не гонялось, может там и вылезут какие-то недоделки. Но общая схема в принципе понятна.
Для начала обернём вызов анализатора в скрипт (о нём позже) и будем вызывать его как внешнюю утилиту. В конфигурации укажем рабочий каталог:
External Tools Configurations / Main
И включим галочку «Allocate console»:
External Tools Configurations / Common
Недостаток этого способа в том, что вывод не будет разбираться эклипсовским парсером, и его можно будет увидеть только в консоли:
Run as External Tool
Если такой способ не устраивает, можно встроить проверку во внешнюю утилиту для сборки. Способ годится не для всех проектов, но если он устраивает, то идём в свойства проекта и настраиваем параметры External Builder:
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"
Пока всё. На реальных проектах ещё ничего не гонялось, может там и вылезут какие-то недоделки. Но общая схема в принципе понятна.