Страницы

Поиск по вопросам

понедельник, 16 декабря 2019 г.

Clang Static Analyzer и проект в Visual Studio

#cpp #visual_studio #clang


Возможно ли, и если возможно, то как (хотя бы в общих чертах) прикрутить Clang Static
Analyzer для проверки проекта студии. Провозился сегодня весь день, пытался искать
в интернете, собрал Clang по инструкции, но как запустить проверку с помощью scan-build
не очень понятно. Параллельно использую cppcheck, там можно ключом задать директорию
с исходниками, которые необходимо проверить. А как сделать что-то подобное с Clang
Static Analyzer?
    


Ответы

Ответ 1



Для начала можно зайти на официальный сайт со сборками LLVM и взять оттуда готовый установщик Clang for Windows. При установке оставить флажок Do not add LLVM to system PATH на месте. После установки (64-битного варианта) в папке C:\Program Files\LLVM\bin среди прочего будут лежать clang++.exe и clang-check.exe. Открываем студию. Создаем пустой консольный проект. Создаем файл main.cpp в котором с ходу простреливаем себе ногу (для целей демонстрации): int main() { int items[4]; int item{items[5]}; } Теперь попробуем прикрутить анализ к сборке. Анализатору необходимо знать, какие файлы и с какими параметрами должны собираться. К сожалению, параметры сборки из обычного студийного проекта он извлекать не умеет (даже при использовании в проекте тулсета llvm). Но их можно указать через файл compile_commands.json. Этот файл может быть сгенерирован cmake или его вполне можно написать и руками: [ { "directory": "D:/Projects/ConsoleApplication26/ConsoleApplication26/" , "command": "\"C:/Program Files/LLVM/bin/clang++.exe\" -c -O0 -g3 -Wall -Wextra -Wpedantic -fvisibility=hidden -fno-rtti -o main.o main.cpp" , "file": "main.cpp" } ] Формат файла достаточно простой - массив объектов с информацией для сборки каждого файла: directory - рабочая директория для запуска компилятора; тут указывается директория, где лежит main.cpp command - команда для компиляции main.cpp file - имя файла, который должен компилироваться, т.е. main.cpp Теперь научим студию вызывать анализатор используя этот файл. Выделяем в Solution Explorer файл compile_commands.json, вызываем контекстное меню, выбираем пункт Properties. В открывшимся окне свойств меняем тип файла на Custom Build Tool Нажимаем Применить и идем заполнять настройки в появившемся разделе Custom Build Tool: Запускаем clang-check с опцией analyze для проведения анализа и именем файла (который прописан в compile_commands.json). В качестве входящего файла указываем main.cpp чтобы анализ перезапускался при его изменении. В качестве выходящего будет xml файл с отчетом (бесполезный). Собираем файл compile_commands.json (или весь проект), получаем результат анализа:

Ответ 2



На текущий день существует расширение Clang Power Tools для Visual Studio, с помощью которого можно достаточно удобно выполнять различные проверки clang-tidy (при желании с автоисправлениями) или выполнять автоматическое форматирование исходников clang-format. Для проведения статического анализа кода нужно добавить проверку clang-analyzer* и запустить clang-tidy. Сделать это можно различными способами. Самый простой - написать clang-analyzer* в окне настроек Clang Power Tools → Tidy → Custom Checks. Задать режим "Use checks from: custom checks". После чего через контектное меню файла, проекта или даже всего решения запустить проверку: Результат проверки будет выведен в стандартной вкладке "Error List" Visual Studio, где выводятся предупреждения и ошибки при рядовой компиляции.

Комментариев нет:

Отправить комментарий