codechecker

codechecker

基于LLVM/Clang的多功能静态代码分析工具

CodeChecker是基于LLVM/Clang的静态代码分析工具,提供命令行C/C++分析和Web报告管理功能。它支持多种分析器,可自动分析GCC交叉编译项目,并支持增量分析。其Web应用可视化代码缺陷,支持结果过滤和比较,集成Gerrit和GitLab。CodeChecker还能可视化多种编程语言的分析结果,是一款通用的代码质量保证工具。

CodeChecker静态分析代码检查C/C++开源工具Github开源项目
<h1 align="center"> <br> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/8686cba7-0712-4692-8eb6-23ca46344cf4.png" alt="CodeChecker" width="200"> <br> CodeChecker <br> </h1> <p align="center"> <a href="https://github.com/Ericsson/codechecker/actions"> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/5e267e10-dc61-4d35-bb35-a10aad69bfe3.svg" alt="Github Action"> </a> <a href="https://gitter.im/codecheckerHQ/Lobby?utm_source=share-link&utm_medium=link&utm_campaign=share-link"> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/bce5b29e-2f9a-4c5d-82ea-d11a79ee2915.svg" alt="Gitter"> </a> <a href="https://codechecker.readthedocs.io/en/latest/?badge=latest"> <img src="https://readthedocs.org/projects/codechecker/badge/?version=latest" alt="Documentation Status"> </a> <a href="https://securityscorecards.dev/viewer/?uri=github.com/Ericsson/codechecker"> <img src="https://api.securityscorecards.dev/projects/github.com/Ericsson/codechecker/badge" alt="OpenSSF Scorecard Score"> </a> </p>

CodeChecker是一个基于LLVM/Clang静态分析器工具链构建的静态分析基础设施,在Linux或macOS(OS X)开发环境中替代scan-build

Web界面显示已分析项目和bug列表

:bulb: 查看我们的演示,展示了一些开源项目的分析结果!

主要特性

命令行C/C++分析

  • 执行Clang-TidyClang静态分析器(具有跨翻译单元分析功能)、统计分析(当有检查器可用时)、CppcheckGCC静态分析器
  • 通过监听任何构建过程(例如,CodeChecker log -b "make")创建JSON编译数据库。
  • 自动分析GCC交叉编译项目:检测GCC或Clang编译器配置并形成相应的clang分析器调用。
  • 增量分析:只需要重新分析已更改的文件及其依赖项。
  • 误报抑制,并可添加审查评论。
  • 在命令行或静态HTML中可视化结果。

基于Web的报告存储

  • 您可以存储和可视化数千个分析报告,包括多种分析器,如Clang静态分析器(C/C++)、Clang Tidy(C/C++)、Facebook Infer(C/C++、Java)、Clang Sanitizers(C/C++)、Spotbugs(Java)、Pylint(Python)、Eslint(Javascript)等。
    完整列表请参见支持的分析器
  • Web应用程序用于查看发现的代码缺陷,体验流畅简便(使用PostgreSQL或SQLite后端)。
  • Gerrit和GitLab集成 将分析结果显示为GitLabGerrit评审。
  • 可过滤(缺陷检查器名称、严重程度、源路径等)和可比较(计算项目两次分析之间的差异,显示哪些bug已修复,哪些是新引入的)的结果查看。
  • **差异模式:**显示自上次分析执行以来引入的bug列表。
  • 结果可与其他开发人员共享,评论审查系统有助于沟通代码缺陷。
  • 易于实现的基于Thrift的服务器-客户端通信,用于存储和查询发现的缺陷。
  • 支持多种bug可视化前端,如Web应用程序、命令行工具Eclipse插件

命令行功能

CodeChecker命令有许多子命令,可用于记录和分析项目、打印结果或启动Web服务器等。完整列表请参见下表或查看此命令的帮助信息(CodeChecker --help):

CodeChecker子命令描述
analyze对JSON编译数据库中记录的文件执行支持的代码分析器。
analyzer-version打印正在使用的CodeChecker分析器包的版本。
analyzers列出支持的和可用的分析器。
check对项目进行分析并将结果打印到标准输出。
checkers列出可用于代码分析的检查器。
cmd从命令行查看正在运行的服务器上的分析结果。
fixit根据分析器的建议应用自动修复。
log运行构建命令,收集执行的编译命令并将其存储在JSON文件中。
parse以人类可读的格式打印分析摘要和结果。
server启动和管理CodeChecker Web服务器。
store将分析结果保存到数据库。
version打印正在使用的CodeChecker包的版本。
web-version打印正在使用的CodeChecker服务器包的版本。
CodeChecker cmd 子命令还有许多其他子命令,可用于从运行中的CodeChecker服务器获取数据(产品、运行、结果、统计信息)。完整列表请参见下表或查看此子命令的帮助信息(CodeChecker cmd --help):
CodeChecker cmd 子命令描述
runs列出可用的分析运行。
history显示多个运行的历史记录。
results列出给定运行的分析结果(发现)摘要。
diff比较两次分析运行并显示差异。
sum显示检查器的统计信息。
token访问与配置CodeChecker服务器管理的个人访问令牌相关的子命令。
del删除分析运行。
update更新分析运行。
suppress管理和导入CodeChecker服务器上的报告抑制。
products访问与配置CodeChecker服务器管理的产品相关的子命令。
components访问与配置CodeChecker服务器管理的源组件相关的子命令。
login认证需要权限的CodeChecker服务器。
export从CodeChecker导出评论和审查状态。
import将评论和审查状态导入CodeChecker。

使用流程

使用流程图

  • 步骤1CodeChecker log 运行给定的构建命令并记录执行的编译步骤。这些步骤以JSON格式写入输出文件(编译数据库)。
  • 步骤2CodeChecker analyze 使用先前创建的JSON编译数据库对项目进行分析,输出机器可读(plist)格式的分析结果。
  • 步骤3:在这一步,你可以执行多项操作:
    • 解析并美化打印分析结果文件的摘要和结果(CodeChecker parse)。
    • 将结果存储到运行中的CodeChecker服务器(CodeChecker store)。
    • 比较两个分析结果/运行,显示两者之间的差异(CodeChecker cmd diff)。
    • 等等。

有关如何使用CodeChecker的更多信息,请参阅我们的用户指南

用户文档

C/C++分析

基于Web的报告管理

存储分析器工具的报告

CodeChecker可以用作可视化分析器结果的通用工具。

支持以下工具:

语言分析器
C/C++Clang 静态分析器
Clang Tidy
[Clang sanitizer](https://github.com/Ericsson/codechecker/blob/master/supported_code_analyzers.md#clang-sanitizers
Cppcheck
Facebook Infer
Coccinelle
Smatch
Kernel-Doc
Sparse
cpplint
C#Roslynator.DotNet.Cli
JavaSpotBugs
Facebook Infer
PythonPylint
Pyflakes
JavaScriptESLint
TypeScriptTSLint
GoGolint
MarkdownMarkdownlint
Sphinx

详情请参见 支持的代码分析器文档和 报告转换工具

常用工具

这些实用工具也可以在 CodeChecker 之外使用。

辅助脚本

安装指南

通过 pip 安装 CodeChecker

CodeChecker 可在 pypi 上获取, 可以使用以下命令安装:

pip3 install codechecker

注意: 此软件包可以安装在具有 pip3 命令的 LinuxOSXWindows 系统上。在 OSX 上,必须安装 intercept-build 以进行日志记录(CodeChecker log)。在 Windows 上, 日志记录功能不可用。

通过 snap 包管理器安装 CodeChecker

CodeChecker 可在 Snap Store 上获取, 可以使用以下命令安装:

sudo snap install codechecker --classic

注意: 不幸的是,snap 包只支持小写命令名。 因此,你需要在所有地方使用 codechecker 命令而不是 CodeChecker。 要查看 codechecker snap 包中可用命令的完整列表,请运行 snap info codechecker

Linux

有关详细的依赖列表以及如何安装更新版本的 Clang 和 Clang-Tidy 的说明, 请参阅 需求。 以下命令用于在 Ubuntu 20.04 LTS 上引导 CodeChecker:

# 安装开发和分析环境所需的必要依赖。 # 注意:clang 或 clang-tidy 可以是任何足够新的版本,不必来自包管理器! # 对于 Cppcheck,最低支持版本为 1.80。 # 对于 gcc,最低支持版本为 13.0.0。 sudo apt-get install clang clang-tidy cppcheck g++ build-essential curl \ gcc-multilib git python3-dev python3-venv python3-setuptools # 安装 web 所需的 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 clone https://github.com/Ericsson/CodeChecker.git --depth 1 ~/codechecker cd ~/codechecker # 创建 Python 虚拟环境并将其设置为你的环境。 # 注意:如果你想开发 CodeChecker,请使用 `venv_dev` 目标而不是 `venv`。 make venv source $PWD/venv/bin/activate # [可选] 如果你想使用外部身份验证方法(LDAP / PAM), # 请按照以下说明进行操作 # docs/web/authentication.md#external-authentication-methods # 构建并安装 CodeChecker 包。 make package # 为了便于访问,将构建目录添加到 PATH。 export PATH="$PWD/build/CodeChecker/bin:$PATH" cd ..

注意:

  • 默认情况下,make package将同时构建32位和64位的ldlogger共享对象。如果您只想构建和打包64位共享对象和ldlogger二进制文件,可以在构建包之前设置BUILD_LOGGER_64_BIT_ONLY环境变量为YES: BUILD_LOGGER_64_BIT_ONLY=YES make package
  • 默认情况下,如果UI代码尚未构建或发生变更,make package将构建UI代码。如果不想构建UI代码,可以在构建包之前设置BUILD_UI_DIST环境变量为NO: BUILD_UI_DIST=NO make package
  • 使用make standalone_package代替make package可以避免在运行CodeChecker之前手动激活环境。

系统或Python升级后更新环境

如果您已将系统的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的安装说明,请参阅Mac OS X安装指南文档。

Docker

要在Docker中运行CodeChecker服务器,请参阅Docker文档。 您可以在Docker Hub找到CodeChecker web服务器容器。

<img src="https://yellow-cdn.veclightyear.com/0a4dffa0/8879d2cd-a159-4444-88a5-f97dabb0f9ec.jpg" width="100">

Visual Studio Code插件

<img src="https://yellow-cdn.veclightyear.com/0a4dffa0/557dba7c-978d-4915-b588-28fb26bf5994.png" width="100">

您可以从Visual Studio MarketplaceOpen VSX安装并使用CodeChecker VSCode扩展。

主要功能:

  • 从编辑器运行CodeChecker分析并自动查看结果。
  • 保存文件时重新分析当前文件。
  • 提供命令和构建任务,可将CodeChecker作为构建系统的一部分运行。
  • 浏览发现的报告并直接在代码中显示复现步骤。
  • 在复现步骤之间导航。

VSCode插件

有关如何安装和使用此插件的更多信息,请参阅此扩展的仓库

GitHub Actions CI

在GitHub Actions中执行CodeChecker

CodeChecker可以通过可重用的GitHub action为您的项目执行! 您只需指定构建命令,就像在本地运行分析一样。

更多信息,请查看GitHub Actions Marketplace上的 CodeChecker静态分析 action。

分析您的第一个项目

在终端中设置环境

每次在新的命令提示符中执行分析时,都必须执行这些步骤。

source ~/codechecker/venv/bin/activate # CodeChecker包的路径 # 注意: 如果您想始终指定CodeChecker的完整路径,请跳过此行。 export PATH=~/codechecker/build/CodeChecker/bin:$PATH # 已构建的LLVM/Clang的路径 # 注意: 如果clang作为已安装的Linux包可在您的PATH中使用,请跳过此行。 export PATH=~/<用户路径>/build/bin:$PATH

执行分析

使用check命令分析您的项目:

CodeChecker check -b "cd ~/your-project && make clean && make" -o ./results

check将打印分析器在您项目中发现的问题概览。报告将以plist XML格式存储在./results目录中。

将报告导出为静态HTML文件

您可以通过执行以下命令将结果可视化为静态HTML:

CodeChecker parse -e html ./results -o ./reports_html

将在./reports_html/index.html中生成一个包含所有报告列表的索引页面。

可选: 将结果存储在Web服务器上并查看结果

如果您有数百个结果,您可能希望将它们存储在带有数据库后端的web服务器上。

在另一个终端或作为后台进程启动CodeChecker web和存储服务器。默认情况下,它将监听localhost:8001

包含报告的SQLite数据库将放置在您的工作空间目录中(默认为~/.codechecker),可以通过-w标志提供。

CodeChecker server

将您的分析报告存储到服务器上,以便能够使用Web查看器。

CodeChecker store ./results -n my-project

在浏览器中打开CodeChecker Web查看器,您将看到一个显示分析结果的web应用程序。

开发者文档

会议论文、演讲

编辑推荐精选

iTerms

iTerms

企业专属的AI法律顾问

iTerms是法大大集团旗下法律子品牌,基于最先进的大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企业专属的AI法律顾问。

SimilarWeb流量提升

SimilarWeb流量提升

稳定高效的流量提升解决方案,助力品牌曝光

稳定高效的流量提升解决方案,助力品牌曝光

Sora2视频免费生成

Sora2视频免费生成

最新版Sora2模型免费使用,一键生成无水印视频

最新版Sora2模型免费使用,一键生成无水印视频

Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
商汤小浣熊

商汤小浣熊

最强AI数据分析助手

小浣熊家族Raccoon,您的AI智能助手,致力于通过先进的人工智能技术,为用户提供高效、便捷的智能服务。无论是日常咨询还是专业问题解答,小浣熊都能以快速、准确的响应满足您的需求,让您的生活更加智能便捷。

imini AI

imini AI

像人一样思考的AI智能体

imini 是一款超级AI智能体,能根据人类指令,自主思考、自主完成、并且交付结果的AI智能体。

Keevx

Keevx

AI数字人视频创作平台

Keevx 一款开箱即用的AI数字人视频创作平台,广泛适用于电商广告、企业培训与社媒宣传,让全球企业与个人创作者无需拍摄剪辑,就能快速生成多语言、高质量的专业视频。

即梦AI

即梦AI

一站式AI创作平台

提供 AI 驱动的图片、视频生成及数字人等功能,助力创意创作

下拉加载更多