C++(Qt)软件调试—静态分析工具clang-tidy(18)

C++(Qt)软件调试—静态分析工具clang-tidy(18)

文章目录

  • C++(Qt)软件调试---静态分析工具clang-tidy(18)
    • 1、概述
    • 2、clang-tidy基本用法
    • 3、目前已有检查项
    • 4、Qt Creator中安装clang-tidy
    • 5、Qt Creator中使用clang-tidy
    • 6、Clang-Tidy配置界面说明
    • 7、Clang-Tidy配置
    • 8、VS中使用Clang-tidy
    • 9、参考文章
更多精彩内容
??个人内容分类汇总 ??
??C++软件调试、异常定位 ??

1、概述

现在很多人在开发中完全忽略了编译器、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。

演示环境

  • Windows11
  • Qt 6.5.3
  • Qt Creator 11.03
  • VS 2022

2、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: estuntitled2main.cpp -checks=-*,clang-*表示关闭所有检查项,添加clang-组所有的检查项,检查main.cpp文件。
  • --warnings-as-errors=[检查项]:可将设置的检查项由警告升级为错误,使用如下所示

    • clang-tidy.exe E: estuntitled2main.cpp -checks=-*,cppcoreguidelines-* --warnings-as-errors=cppcoreguidelines-*

3、目前已有检查项

名称前缀 描述
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 内核编码约定相关的检查。
  • 列出详细检查项如下所示(未显示完全)

    在这里插入图片描述

4、Qt Creator中安装clang-tidy

  1. Qt Creator默认是安装了clang的,如果没有可以按照后面步骤进行安装。

  2. 打开Qt Creator,点击【帮助】->【关于插件】;

    在这里插入图片描述

  3. 找到【Code Analyzer】,勾选【ClangTools】,然后点击【确认】重启;

    在这里插入图片描述

  4. 打开【首选项】->【分析器】,如果出现【Clang Tools】就安装成功了。

    在这里插入图片描述

  5. Qt Creator集成了以下Clang工具,用于通过静态分析在C、C++和Objective-C源代码中发现问题:

    • Clang Tidy:它对典型的编程错误进行诊断和修复,如风格违规或接口滥用。
    • Clazy:有助于Clang理解Qt语义。它显示与Qt相关的编译器警告,从不必要的内存分配到API的误用,并具有修复某些问题的重构操作。

5、Qt Creator中使用clang-tidy

  1. 选择【工具】->【C++】->【Analyze Current File with Clang-Tidy】可使用clang-tidy分析当前打开的文件

  2. 选择【工具】->【C++】->【Analyze Current File with Clazy】可使用Clazy分析当前打开的文件;

  3. 如下图所示,在打开的文件左侧行号位置会出现黄色三角形,说明这一行代码可能存在问题,在IDE下方会列出所有检查出的问题,双击列出的问题会定位到出现问题的行,鼠标移动到黄色三角形上会出现问题的详细说明。

    在这里插入图片描述

  4. 选择【分析】->【Clang-Tidy】/【Clazy】可以打开【Files to Analyze】窗口,可以在这个窗口中选择使用分析检查项目工程的所有文件

    在这里插入图片描述

    在这里插入图片描述

  5. 在Clang-Tidy问题视图中如下图所示,框选出的几个按键从左到右功能如下;

    在这里插入图片描述

    1. 点击下拉框可弹出分析工具选项,选择使用哪个分析工具;

      在这里插入图片描述

    2. 使用Clang-tidy分析工程所有文件;

    3. 使用Clang-tidy分析当前打开文件;

    4. Clang-tidy在项目中的设置;

    5. 清除所有检查结果;

    6. 展开/关闭检测结果;

  6. 如下图所示,鼠标移动到黄色三角形图标上后会显示提示弹窗,右上角4个按钮功能从左到右分别是;

    1. 复制提示信息到剪贴板;
    2. 禁用检测项:clang-tidy静态分析时会出现误报情况或者某些问题不想检测时就可以点击右上角的红色×,然后点击【分析】->【clang-tidy】重新检查就可以了;(注意:如果勾选了prefer .clang-tidy file, if present则这个功能不会生效)
    3. 打开/关闭显示提示信息;
    4. 进入clang-tidy配置窗口。

    在这里插入图片描述

6、Clang-Tidy配置界面说明

  1. 打开【首选项】设置,进入【分析器】->【Clang tools】或者直接点击提示信息右上角的设置按钮;

    在这里插入图片描述

    1. diagnostic configuration:配置检查项;

    2. prefer .clang-tidy file, if present:如果工程目录下有.clang-tidy文件则优先使用.clang-tidy文件中的规则进行检查;如下图所示,在.clang-tidy文件中添加规则,然后放到工程目录下,重新运行clang-tidy检查就可以了。

      在这里插入图片描述

    3. build the project before analysis:在进行代码分析之前先构建编译,以确保要分析的代码是有效的,可以检测出更多问题。

    4. analyze open files:在打开一个文件时自动启动clang-tidy对打开的文件进行检查。

    5. parallel jobs:多线程并行启动clang-tidy检查,可以提升检查速度。

7、Clang-Tidy配置

  1. 在【Clang Tools】中点击【Default Clang-Tidy and Clazy checks】,打开窗口如下所示;

    在这里插入图片描述

  2. 这时Default Clang-Tidy and Clazy checks配置是内置配置,无法进行修改,点击【复制】重新创建一份配置就可以修改了,选择【Clang-tidy Checks】,勾选需要的检查项就可以了。

    在这里插入图片描述

  3. 选择【Clazy Checks】可配置clazy的检查级别,Clazy 检查分为从 0 到 3 的级别。级别 0 的检查非常稳定,几乎没有显示任何误报,而级别 3 的检查是实验性的。

    在这里插入图片描述

8、VS中使用Clang-tidy

从 Visual Studio 2019 版本 16.4 开始,已提供 Clang-Tidy 支持。 在 Visual Studio 安装程序中选择 C++ 工作负载时,会自动包含它。

VS中同时支持另一种代码静态检查工具【 Microsoft 代码分析】,可通过【项目】->【属性】->【Code Analysis】->【启用Microsoft Code Analysis】开启使用。

  1. 选择【项目】->【属性】;

    在这里插入图片描述

  2. 如下图所示,选择【Code Analysis】,将【生成时启用Code Analysis】设置为,将【启用Clang-tidy】设置为就可以在VS中启用Clang-tidy了,但是还需要配置检查项。

    在这里插入图片描述

  3. 如下图所示,选择【Clang-Tidy】,输入检查项,然后确认。

    在这里插入图片描述

  4. 然后就可以在文件修改后、编译后或者选择【分析】->【运行Code Analysis】对代码进行检查。

    在这里插入图片描述

9、参考文章

  • Clang-Tidy — Extra Clang Tools 18.0.0git documentation (llvm.org)
  • 使用 Clang 工具 |Qt Creator手册
  • 在 Visual Studio 中使用 Clang-Tidy | Microsoft Learn

{__/}
(? ?′? ?^? ?`?)??~?
| ? |