Codechecker -это статическая инфраструктура анализа, основанная на инструментальном обороте LLVM/Clang Static Analyzer, заменяя scan-build в среде разработки Linux или MacOS (OS X).

Проверьте нашу демонстрацию, показывающую некоторые результаты анализа проектов с открытым исходным кодом!
Выполняет Clang-Tidy , статический анализатор Clang с анализом перекрестного транслирования, статистический анализ (когда доступны шашки), CPPCHECK , статический анализатор GCC и анализатор вывода Facebook .
Создает базу данных компиляции JSON, путем прослушивания любого процесса сборки (например, CodeChecker log -b "make" ).
Автоматически анализируется перекрестные проекты GCC: обнаружение конфигурации компилятора GCC или Clang и формирование соответствующих вызовов анализатора Clang.
Впременный анализ: необходимо повторно проанализировать только измененные файлы и его зависимости.
Неверное положительное подавление с возможностью добавить комментарии обзора.
Визуализация результатов в командной строке или в статическом HTML.
Вы можете хранить и визуализировать тысячи отчетов по анализу многих анализаторов, таких как Clang Static Analyzer (C/C ++), Clang Tidy (C/C ++), вывод Facebook (C/C ++, Java), дезинения Clang (C/C ++), Spotbugs (Java), Pylint (Python), Eslint (Javascript) ...
Полный список см. Поддерживаемые анализаторы
Веб -приложение для просмотра обнаруженных дефектов кода с помощью оптимизированного, простого опыта (с бэкэнд PostgreSQL или SQLite).
Интеграция Gerrit и Gitlab показывает результаты анализа как обзоры Gitlab или Gerrit.
Отфильтруемое (имя проверки дефектов, серьезность, пути источника, ...) и сопоставимые (вычисляет разницу между двумя анализами проекта, показывая, какие ошибки были исправлены, а какие вновь введены) просмотр результатов.
Режим DIFF: в нем показан список ошибок, которые были введены с момента вашего последнего выполнения анализатора.
Результаты могут быть переданы коллегам -разработчикам, комментарии и проверки система помогает передаче дефектов кода.
Легко реализуемая коммуникация сервера-клиента на основе благосостояния, используемая для хранения и запроса обнаруженных дефектов.
Поддержка множества фронтаризации ошибок, таких как веб-приложение, инструмент командной строки и плагин Eclipse.
Команда CodeChecker имеет много подкомандов, которые можно использовать, например, для регистрации и анализа ваших проектов, распечатки результатов или запуска веб -сервера. Полный список см. Следующую таблицу или проверьте сообщение справки этой команды ( CodeChecker --help ):
CodeChecker подкоманда | Описание |
|---|---|
analyze | Выполните поддерживаемые анализаторы кода для файлов, записанных в базе данных компиляции JSON. |
analyzer-version | Распечатайте версию пакета анализатора Codechecker, который используется. |
analyzers | Список поддерживаемых и доступных анализаторов. |
check | Выполните анализ проекта и результатов печати для стандартного вывода. |
checkers | Перечислите шашки, доступные для анализа кода. |
cmd | Просмотреть результаты анализа на работающем сервере с командной строки. |
fixit | Примените автоматические исправления на основе предложений анализаторов. |
log | Запустите команду сборки, соберите выполненные команды компиляции и сохраните их в файле JSON. |
parse | Сводка анализа печати и приводит к читаемому человеку формату. |
server | Запустить и управлять веб -сервером Codechecker. |
store | Сохранить результаты анализа в базе данных. |
version | Распечатайте версию пакета Codechecker, которая используется. |
web-version | Распечатайте версию пакета Server Codechecker, который используется. |
CodeChecker cmd Subcommand также имеет много других подкомандов, которые можно использовать для получения данных (продукты, выполнения, результаты, статистика) с работающего сервера Codechecker. Полный список см. В следующей таблице или проверьте сообщение справки этого подкоманда ( CodeChecker cmd --help ):
CodeChecker cmd Subcommand | Описание |
|---|---|
runs | Перечислите доступные анализы. |
history | Показать историю нескольких пробежек. |
results | Результат анализа списка (поиск) Сводка для данного прогона. |
diff | Сравните два прогона анализа и покажите разницу. |
sum | Показать статистику шашек. |
token | Подкоманды доступа, связанные с настройкой токенов личного доступа, управляемых сервером Codechecker. |
del | Удалить анализ пробега. |
update | Обновите анализ. |
suppress | Управление и импорт подавления отчетов на сервере Codechecker. |
products | Подкоманды доступа, связанные с настройкой продуктов, управляемых сервером Codechecker. |
components | Подкоманды доступа, связанные с настройкой источника, управляемых сервером Codechecker. |
login | Аутентификация на серверы CodeChecker, которые требуют привилегий. |
export | Экспортные комментарии и статусы обзора от Codechecker. |
import | Импортируйте комментарии и статусы просмотра в Codechecker. |

Шаг 1 : CodeChecker log запускает данную команду сборки и записывает выполненные шаги компиляции. Эти шаги записываются в выходной файл (база данных компиляции) в формате JSON.
Шаг 2 : CodeChecker analyze использует ранее созданную базу данных компиляции JSON для выполнения анализа проекта, вывод анализа приводит к машино читаемому (PLIST) формату.
Шаг 3 : На этом шаге вы можете сделать несколько вещей:
Parse и Pretty Print Сводка и результаты файлов результатов анализа ( CodeChecker parse ).
Сохраните результаты на запущенном сервере Codechecker ( CodeChecker store ).
Сравните два результата анализа/прогоны, чтобы показать результаты, которые различаются между двумя ( CodeChecker cmd diff ).
и т. д.
Для получения дополнительной информации, как использовать Codechecker, см. Наше руководство пользователя.
Начало работы (как нужно с примерами)
Руководство пользователя анализатора
Избегание или подавление ложных срабатываний
Конфигурация проверки и статического анализатора
Несовместимости GCC
Подавление ложных срабатываний
Руководство пользователя WebServer
Руководство пользователя веб -графического интерфейса
Обзор функций командной строки и веб -пользовательского интерфейса
Конфигурация безопасности
Настройка аутентификации
Настройка авторизации
Развертывание
Развернуть сервер с помощью Docker
Конфигурация сервера
Настройка журнала сервера
Настройка нескольких репозитории CodeChecker на одном сервере
Непрерывная интеграция (CI)
Codechecker как действие GitHub
Настройка Ci Gating с Gerrit и Jenkins
Конфигурация базы данных
Руководство по настройке базы данных PostgreSQL
Руководство по обновлению сервера и базы данных Codechecker
Codechecker можно использовать в качестве общего инструмента для визуализации результатов анализатора.
Поддерживаются следующие инструменты:
| Язык | Анализатор |
|---|---|
| C/C ++ | Clang Static Analyzer |
| Clang Quicey | |
| Случайные дезинтеры | |
| Cppcheck | |
| Facebook вывод | |
| Coccinelle | |
| Смазывать | |
| Ядро-док | |
| Редкий | |
| Cpplint | |
| C# | Roslynator.dotnet.cli |
| Ява | Spotbugs |
| Facebook вывод | |
| Питон | Пинтинт |
| Пифэкса | |
| JavaScript | Эслинт |
| Машинопись | Tslint |
| Идти | Голинт |
| Отметка | Markdownlint |
| Сфинкс |
Подробнее см. Вспомогательную документацию «Анализеры кода» и инструмент преобразователя отчетов.
Полезные инструменты, которые также могут быть использованы вне CodeChecker.
Строите регистратор (для создания базы данных компиляции JSON из ваших сборки)
PLIST/SARIF TO HTML Converter (для генерации HTML -файлов из данных файлов PLIST или SARIF)
Инструмент преобразователя отчета (для преобразования результатов анализа других анализаторов в формат каталога отчетов Codechecker)))
Коллекционер блок перевода (для сбора исходных файлов блока перевода или получения исходных файлов, которые зависят от заданных файлов заголовка)
Отчет Хэш Генератор (для создания уникальных идентификаторов хэша для отчетов)
Помощные сценарии для ежедневного анализа
pipCodechecker доступен на PYPI и может быть установлен со следующей командой:
PIP3 Установите Codechecker
Примечание. Этот пакет может быть установлен в системах Linux , OSX и Windows , где доступна команда pip3 . На OSX для CodeChecker log ) должна быть установлена intercept-build . В Windows журналирование недоступно.
snapCodechecker доступен в магазине Snap и может быть установлен со следующей командой:
Sudo Snap Install Codechecker -классический
Примечание. К сожалению, пакет Snap поддерживает только имена команд с низким содержанием. По этой причине вам нужно использовать команду codechecker вместо CodeChecker везде. Для полного списка доступных команд в пакете Snap Codechecker запустите snap info codechecker .
Для получения подробного списка зависимостей и для инструкций о том, как установить более новые версии Clang и Clang-Tidy, см. Требования. Следующие команды используются для начальной загрузки Codechecker на Ubuntu 20.04 LTS:
# Установить обязательные зависимости для среды разработки и анализа.# Примечание: Clang или Clang-Tidy могут быть любой достаточно свежей версией, и не нужно# из менеджера пакетов!# В случае CPPCHECK минимальная версия для поддерживаемой поддерживаемой. Clang Clang-Tidy cppcheck G ++ Buld-Essessent Curl
GCC-Multilib git python3-dev python3-venv python3-setuptools# В случае Venv_dev Target и Ubuntu 23 Linux, установите дополнительную библиотеку: sudo apt-get Установить Libpq-Dev# Установить зависимость Nodejs для веб-сайта. В случае Debian/Ubuntu вы можете использовать следующие команды. Для получения дополнительной информации см. Официальные документы:# https://nodejs.org/en/download/package-manager/curl -sl https://deb.nodesource.com/setup_16.x | sudo -e bash -
Sudo apt -get install -y nodejs# Проверьте исходный код CodeChecker.git клон https://github.com/ericsson/codechecker.git -depth 1 ~/codecheckercd ~/codechecker# Создайте python virtualenv и установить его в качестве среды. `venv`.make venvsource $ pwd/venv/bin/articate# [необязательно] Если вы хотите использовать методы внешней аутентификации (LDAP/PAM)# Следуйте инструкциям в# Docs/Web/Authentication.md# Внешний допуск. Добавить на строительные methods# export. Path = "$ pwd/build/codechecker/bin: $ path" cd ..Примечания :
По умолчанию make package будет построить общие объекты LDLogger для 32bit и 64bit . Если вы хотите построить и упаковать 64 bit only общие объекты и двоичный LDLogger, вы можете установить BUILD_LOGGER_64_BIT_ONLY varible среды на YES , прежде чем пакет сборка: BUILD_LOGGER_64_BIT_ONLY=YES make package .
По умолчанию make package создаст код пользовательского интерфейса, если он еще не построен или код пользовательского интерфейса изменяется. Если вы не хотите создать код пользовательского интерфейса, вы можете установить переменную среды BUILD_UI_DIST для NO , прежде чем пакет сборка: BUILD_UI_DIST=NO make package .
Используйте make standalone_package вместо того, чтобы make package , чтобы избежать необходимости вручную активировать среду перед запуском Codechecker.
Если вы обновили Python вашей системы до более новой версии (например, с 3.8 до 3.11 -это тот случай при модернизации Ubuntu с 20,04 LTS до 22,04 LTS), установленная среда не будет работать без коробки. Чтобы исправить эту проблему, запустите следующую команду, чтобы обновить вашу checker_env :
CD ~/Codechecker/Venv Python3 -m Venv.
Инструкции по установке для Mac OS X см. В Руководстве по установке Mac OS X документация.
Чтобы запустить сервер Codechecker в Docker, см. Документацию Docker. Вы можете найти контейнер для веб-сервер Codechecker в концентраторе Docker.
Вы можете установить и использовать расширение VSCODE Codechecker с рынка Visual Studio или от Open VSX.
Основные особенности:
Запустите анализ Codechecker от редактора и автоматически смотрите результаты.
Повторно анализируйте текущий файл при сохранении.
Команды и создание задач для запуска Codechecker как часть системы сборки.
Просмотрите найденные отчеты и покажите шаги воспроизведения непосредственно в коде.
Перейдите между этапами размножения.

Для получения дополнительной информации, как установить и использовать этот плагин, см. Репозиторий этого расширения.

Codechecker может быть выполнен с помощью многократного действия GitHub для вашего проекта! Вам нужно только указать команду сборки, как если бы вы запустили анализ локально.
Для получения дополнительной информации ознакомьтесь с действием статического анализа Codechecker на рынке действий Github.
Эти шаги всегда должны быть предприняты в новой командной строке, в которой вы хотите выполнить анализ.
Source ~/codechecker/venv/bin/active# path of codechecker package# Примечание: пропустите эту строку, если вы хотите всегда указывать полный путь Codechecker. Путь>/build/bin: $ path
Проанализируйте свой проект с помощью команды check :
CodeChecker check -b "cd ~/your-project && make clean && make" -o ./results
check напечатает обзор проблем, найденных в вашем проекте анализаторами. Отчеты будут храниться в каталоге ./results в формате plist XML.
Вы можете визуализировать результаты как статический HTML, выполнив
CodeChecker parse -e html ./results -o ./reports_html
Страница индекса будет сгенерирована со списком всех репортаж в ./reports_html/index.html
Если у вас есть сотни результатов, вы можете сохранить их на веб -сервере с бэкэнд базы данных.
Запустите сервер Codechecker Web и Horesh в другом терминале или в качестве фонового процесса. По умолчанию он будет слушать на localhost:8001 .
База данных SQLite, содержащая отчеты, будет размещена в вашем каталоге рабочей области ( ~/.codechecker по умолчанию), который может быть предоставлен через флаг -w .
CodeChecker server
Храните отчеты о анализе на сервере, чтобы иметь возможность использовать веб -просмотр.
CodeChecker store ./results -n my-project
Откройте веб -просмотрщик Codechecker в вашем браузере, и вас следует встретить с помощью веб -приложения, показывающего результаты анализа.
Архитектура
Схема упаковки
Зависимости
Благотворительный интерфейс
Пакет и интеграционные тесты
Обзор инфраструктуры Codechecker был дан в PLDI 2020.
Márton, Gábor и Krupp, Dániel :
Tool Talk: Codechecker
Обзор высокого уровня об инфраструктуре доступен среди презентаций Euro LLVM 2015 года.
Krupp, Dániel и Orbán, György и Horváth, Gábor и Babati, Bence :
Промышленный опыт с набором инструментов Clang Static Analysis