Вбудовуємо 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. Знімаємо галочку з «Use default build command
  2. В полі «Build command» вводимо наш скрипт
  3. Відзначаємо «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"

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

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.