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应用程序。

开发者文档

会议论文、演讲

编辑推荐精选

TRAE编程

TRAE编程

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

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

热门AI工具生产力协作转型TraeAI IDE
蛙蛙写作

蛙蛙写作

AI小说写作助手,一站式润色、改写、扩写

蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。

AI助手AI工具AI写作工具AI辅助写作蛙蛙写作学术助手办公助手营销助手
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

聊天机器人AI助手热门AI工具AI对话
Transly

Transly

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

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

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

热门AI工具AI办公办公工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

模型训练热门AI工具内容创作智能问答AI开发讯飞星火大模型多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

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

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

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

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

下拉加载更多