В вышедшей на днях новой версии статического анализатора кода PVS-Studio 5.10 появилась маленькая незаметная утилита PVS-Studio Standalone. Как говорится, маленький шаг для человечества и большой шаг для PVS-Studio :).
Анализ на основе имеющихся препроцессированных файлов больше не поддерживается. Используйте режим отслеживания запусков компилятора, позволяющий автоматически генерировать и анализировать препроцессированные файлы в ходе сборки проекта.
Эта утилита уже сейчас позволяет делать (пока) две вещи:
При этом поддерживается полная навигация по коду, все настройки PVS-Studio, а также табличное представление результатов анализа, про которое я писал ранее. Это табличное представление позволяет использовать полный набор фильтров и сортировок диагностик с тем, чтобы максимально удобно работать с большим количеством сообщений.
В этой статье я покажу два сценария полезного использования этой утилиты.
Предположим, вы по какой-то причине не имеете на своей рабочей машине Visual Studio. Но при этом начитались статей про то, что PVS-Studio это очень круто и не прочь взглянуть на результаты анализа кода. Поскольку вы не имеете поддерживаемых PVS-Studio сред разработки на своей машине, то вы можете попросить коллегу проверить проект в Visual Studio на другой машине, сохранить результаты проверки в .plog файл и принести его на свою машину (желательно вместе с исходниками проекта, чтобы удобнее было разбираться с ошибками). Что нужно для этого?
1. Установить PVS-Studio Standalone (выбрать галочку во время инсталяции).
2. Запустить PVS-Studio Standalone из Windows-меню Start/Пуск.
3. В запустившейся программе открыть .plog файл.
4. Загрузился .plog:
5. Отчет уже можно просматривать, но если кликнуть по сообщению, то увидим просьбу указать папку с исходниками:
6. Сделаем это:
7. И теперь можно просматривать лог, работать над фильтрацией и сортировкой сообщений и даже править исходный код!
Конечно, отнеситесь с пониманием к этой нашей "среде" - она хоть и построена на Scientilla (как и Notepad++), но до IDE уровня Visual Studio ей как до Луны. Самое главное неудобство - отсутствие IntelliSence. Мы пытаемся его компенсировать диалогом поиска. Тем не менее:
Но наверняка многим будет интереснее второй сценарий использования, о котором далее.
Но самое крутое в PVS-Studio Standalone - это не работа с готовыми логами, а возможность проверки препроцессированных файлов. Вообще в чем сложность интеграции PVS-Studio в произвольный проект? Дело в том, что для своей работы анализатор должен выполнить препроцессирование файлов. И если у вас есть проектный файл .vcproj/.vcxproj (т.е. вы работаете в среде Visual Studio), то создание препроцессированных файлов для PVS-Studio происходит автоматически, когда вы нажимаете кнопку "Проверить". А вот если вы вдруг работаете в другом режиме (например, через Makefile), то вам надо интегрировать вызов PVS-Studio в сборочную систему, что не всегда бывает легко по разным причинам.
Смысл использования такого режима состоит прежде всего в его простоте. По нашему опыту, в большинстве сборочных систем проще добавить к параметрам компиляции всех файлов ещё один флажок, чем встраивать вызов анализатора "параллельно" с компилятором. И хотя прямая интеграция анализатора в сборочный процесс безусловно является "идеологически" более верным решением, такой вариант не всегда удобен, чтобы быстро "попробовать" анализ на своём проекте.
И тут наш новый инструмент PVS-Studio Standalone как раз в тему. Вы можете ему подсунуть препроцессированные файлы, и он их проверит, найдет ошибки, и даже сопоставит с исходниками. То есть сообщения об ошибках будут на исходные файлы с кодом, а не готовые препроцессированные файлы. Посмотрим как это делается на практике?
Тестировать PVS-Studio Standalone я буду на ... ну скажем zlib. Нет, нет, это не статья об ошибках, найденных в zlib. Не удивляйтесь, что почти не будет предупреждений. Там нет ошибок. Плюс PVS-Studio много раз проверял код zlib в других проектах и все ложные срабатывания на zlib мы давно победили. Эта статья должна показать, как использовать новый инструмент, а не какие ошибки мы нашли в каком-нибудь проекте. Поэтому я буду использовать относительно простой проект, чтобы все поняли, как такое повторить.
1. Открываем на редактирование файл Makefile.msc
2. Добавляем ключ /P генерировать препроцессированные файлы. То есть вместо строки
CFLAGS = -nologo -MD -W3 -O2 -Oy- -Zi -Fd"zlib" $(LOC)
получаем
CFLAGS = -nologo -MD -W3 -O2 -Oy- -Zi -Fd"zlib" /P $(LOC)
3. Генерируем препроцессированные файлы:
nmake -f Makefile.msc clean
nmake -f Makefile.msc
4. Убеждаемся, что в папке есть .i-файлы.
1. Запускаем PVS-Studio Standlone.
2. Открываем меню Tools, команду Verify Preprocessed Files...
3. Заполняем поля следующим образом:
Что здесь важно: пути до исходников и до .i-файлов (они у нас совпадают), пути до системных include-папок (чтобы не ругаться на сообщения в этих файлах), ну и некоторые дополнительные параметры.
Интерес представляет список поддерживаемых препроцессоров. Вот он более подробно:
Давний читатель наших статей тут же воскликнет: "Это что же, вы наконец-то gcc поддерживаете?" Отвечаем: "Поддерживаем!". Поддерживаем и в случае MinGW, и в Cygwin, и в случае (О Боже, они сделали это!) Linux.
То есть теперь вы можете даже проверять linux-проекты, хотя мы только начинаем тестировать эту функциональность честно говоря. У кого будет желание играться и экспериментировать - пишите о своих проблемах, будем оперативно править, если что-то у кого-то вылезет.
4. Заполнив диалоговое окошко, нажимаем кнопку Start. После некоторого времени, получаем окно с результатами и навигацией:
Можно проверять и ПРАВИТЬ код прямо в PVS-Studio Standalone!
Мы сделали очень крутую штуку, которая расширяет сферу применения PVS-Studio и делает это очень удобным для пользователя способом.
А дальше каждый, кто просил у нас проверку MinGW, Cygwin, gcc, а также по каким-то причинам просто не мог проверить свой код с помощью PVS-Studio, должен скачать новую версию и поиграться с PVS-Studio Standalone.
P.S. И да, это первая статья про PVS-Studio с таким большим количеством скриншотов :-).