更多精彩内容 |
---|
👉个人内容分类汇总 👈 |
👉C++软件调试、异常定位 👈 |
现在很多人在开发中完全忽略了编译器、IDE的警告提示,这怎么可能写出稳定的程序。
clang-tidy是一个由LLVM项目提供的开源工具,是一个静态分析工具,用于进行静态代码分析和代码质量改进。
支持C++/C/Objective-C。
clang-tidy提供了一种基于AST(抽象语法树)的检查方法,能够检测出代码中的多种潜在问题,包括内存泄漏、未使用的变量、类型不一致等。它还支持自定义检查器的创建,使得用户可以针对特定项目或代码库进行定制检查。
clang-tidy可以与Clang编译器无缝集成,这意味着开发者可以在编译过程中同时运行静态分析,以便及时发现和修复问题。此外,clang-tidy还支持与其他工具链和IDE集成,如Visual Studio、CLion、Qt等,为开发者提供便利的使用体验。
在本文中主要讲解如何在Qt、Visual Studio中使用clang-tidy。
演示环境
clang-tidy.exe --help
:查看帮助信息;
clang-tidy.exe -list-checks
:列出所有已启用的检查并退出;
clang-tidy.exe -list-checks -checks=*
:列出所有可用选项。
clang-tidy.exe [代码文件] -checks=[检查项]
:设置要运行的检查项,以逗号分隔,负号为删除检查项,没有负号为添加检查项,例如:
clang-tidy.exe E:\test\untitled2\main.cpp -checks=-*,clang-*
表示关闭所有检查项,添加clang-组所有的检查项,检查main.cpp文件。--warnings-as-errors=[检查项]
:可将设置的检查项由警告升级为错误,使用如下所示
clang-tidy.exe E:\test\untitled2\main.cpp -checks=-*,cppcoreguidelines-* --warnings-as-errors=cppcoreguidelines-*
名称前缀 | 描述 |
---|---|
abseil- | 与 Abseil 库相关的检查。` |
altera- | 与 FPGA 的 OpenCL 编程相关的检查。 |
android- | 与 Android 相关的检查。 |
boost- | 检查与 Boost 库相关的内容。 |
bugprone- | 检查是否以容易出错的代码构造为目标。 |
cert- | 与 CERT 安全编码指南相关的检查。 |
clang-analyzer- | Clang Static Analyzer 检查。 |
concurrency- | 与并发编程相关的检查(包括 线、纤维、协程等)。 |
cppcoreguidelines- | 与 C++ 核心指南相关的检查。 |
darwin- | 与达尔文编码约定相关的检查。 |
fuchsia- | 与 Fuchsia 编码约定相关的检查。 |
google- | 与 Google 编码约定相关的检查。 |
hicpp- | 与高完整性 C++ 编码标准相关的检查。 |
linuxkernel- | 与 Linux 内核编码约定相关的检查。 |
llvm- | 与 LLVM 编码约定相关的检查。 |
llvmlibc- | 与 LLVM-libc 编码标准相关的检查。 |
misc- | 我们没有更好的类别的检查。 |
modernize- | 提倡使用现代(当前为“现代”)的检查 表示“C++11”)语言结构。 |
mpi- | 与 MPI(消息传递接口)相关的检查。 |
objc- | 检查与 Objective-C 编码约定相关的内容。 |
openmp- | 与 OpenMP API 相关的检查。 |
performance- | 检查是否针对与性能相关的问题。 |
portability- | 检查是否针对不针对可移植性相关问题 与任何特定的编码风格相关。 |
readability- | 检查是否针对与可读性相关的问题,但不针对 与任何特定的编码风格相关。 |
zircon- | 与 Zircon 内核编码约定相关的检查。 |
列出详细检查项如下所示(未显示完全)
Qt Creator默认是安装了clang的,如果没有可以按照后面步骤进行安装。
打开Qt Creator,点击【帮助】->【关于插件】;
找到【Code Analyzer】,勾选【ClangTools】,然后点击【确认】重启;
打开【首选项】->【分析器】,如果出现【Clang Tools】就安装成功了。
Qt Creator集成了以下Clang工具,用于通过静态分析在C、C++和Objective-C源代码中发现问题:
Clang Tidy
:它对典型的编程错误进行诊断和修复,如风格违规或接口滥用。Clazy
:有助于Clang理解Qt语义。它显示与Qt相关的编译器警告,从不必要的内存分配到API的误用,并具有修复某些问题的重构操作。选择【工具】->【C++】->【Analyze Current File with Clang-Tidy】可使用clang-tidy分析当前打开的文件;
选择【工具】->【C++】->【Analyze Current File with Clazy】可使用Clazy分析当前打开的文件;
如下图所示,在打开的文件左侧行号位置会出现黄色三角形,说明这一行代码可能存在问题,在IDE下方会列出所有检查出的问题,双击列出的问题会定位到出现问题的行,鼠标移动到黄色三角形上会出现问题的详细说明。
选择【分析】->【Clang-Tidy】/【Clazy】可以打开【Files to Analyze】窗口,可以在这个窗口中选择使用分析检查项目工程的所有文件。
在Clang-Tidy问题视图中如下图所示,框选出的几个按键从左到右功能如下;
点击下拉框可弹出分析工具选项,选择使用哪个分析工具;
使用Clang-tidy分析工程所有文件;
使用Clang-tidy分析当前打开文件;
Clang-tidy在项目中的设置;
清除所有检查结果;
展开/关闭检测结果;
如下图所示,鼠标移动到黄色三角形图标上后会显示提示弹窗,右上角4个按钮功能从左到右分别是;
prefer .clang-tidy file, if present
则这个功能不会生效)打开【首选项】设置,进入【分析器】->【Clang tools】或者直接点击提示信息右上角的设置按钮;
diagnostic configuration
:配置检查项;
prefer .clang-tidy file, if present
:如果工程目录下有.clang-tidy
文件则优先使用.clang-tidy文件中的规则进行检查;如下图所示,在.clang-tidy文件中添加规则,然后放到工程目录下,重新运行clang-tidy检查就可以了。
build the project before analysis
:在进行代码分析之前先构建编译,以确保要分析的代码是有效的,可以检测出更多问题。
analyze open files
:在打开一个文件时自动启动clang-tidy对打开的文件进行检查。
parallel jobs
:多线程并行启动clang-tidy检查,可以提升检查速度。
在【Clang Tools】中点击【Default Clang-Tidy and Clazy checks】,打开窗口如下所示;
这时Default Clang-Tidy and Clazy checks
配置是内置配置,无法进行修改,点击【复制】重新创建一份配置就可以修改了,选择【Clang-tidy Checks】,勾选需要的检查项就可以了。
选择【Clazy Checks】可配置clazy的检查级别,Clazy 检查分为从 0 到 3 的级别。级别 0 的检查非常稳定,几乎没有显示任何误报,而级别 3 的检查是实验性的。
从 Visual Studio 2019 版本 16.4 开始,已提供 Clang-Tidy 支持。 在 Visual Studio 安装程序中选择 C++ 工作负载时,会自动包含它。
VS中同时支持另一种代码静态检查工具【 Microsoft 代码分析】,可通过【项目】->【属性】->【Code Analysis】->【启用Microsoft Code Analysis】开启使用。
选择【项目】->【属性】;
如下图所示,选择【Code Analysis】,将【生成时启用Code Analysis】设置为是,将【启用Clang-tidy】设置为是就可以在VS中启用Clang-tidy了,但是还需要配置检查项。
如下图所示,选择【Clang-Tidy】,输入检查项,然后确认。
然后就可以在文件修改后、编译后或者选择【分析】->【运行Code Analysis】对代码进行检查。
{__/}
(? ?′? ?^? ?`?)??~?
| ? |