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:\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-*

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

{__/}
(̷ ̷´̷ ̷^̷ ̷`̷)̷◞~❤
| ⫘ |

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/422937.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

抖音跳个人微信,有哪些解决办法?

抖音作为一个备受欢迎的短视频平台,为品牌和个人提供了广泛的推广机会。要有效地吸引和引导用户到微信端,需要掌握一些关键的引流方法。以下是抖音引流到微信的几种方法和技巧: 1.创建优质内容:确保发布的视频内容独特、有趣并富有…

java数组ArrayList(存对象)

1、dade文件 package model;public class dade {private int id;private String name;public dade() {}public dade(int id, String name) {this.id id;this.name name;}public int getId() {return id;}public void setId(int id) {this.id id;}public String getName() {…

0基础如何使用全功能的Python测试框架?

如何使用pytest? 大纲 安装和简单使用 配置文件 断言 一. 第一步 —— 安装和简单使用 pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点: • 1、简单灵活,容易上手,文档丰富; • 2、…

miniconda安装

Miniconda是一个小型版的Anaconda,它包含了一个包管理工具conda和Python。Miniconda适用于那些只需要管理Python包和环境,而不需要Anaconda中包含的大部分科学计算工具的用户。 Miniconda的安装过程相对简单。你可以从清华大学开源软件镜像站下载Minico…

Maven下载及安装,集成eclipse中,配置环境变量,创建maven项目等

这里写目录标题 Maven环境配置环境变量&#xff1a;eclipse中配置maveneclipse创建maven项目 Maven环境 解压 配置&#xff1a; 本地仓库的位置&#xff1a; <!-- 配置maven本地仓库 --> <!-- 目录可以提前创建&#xff0c;也可以后期生成 --><localReposito…

c语言-实现动态内存管理的库函数

文章目录 前言一、什么是动态内存分配&#xff1f;二、malloc()和free()2.1 malloc()介绍2.2 malloc()的使用2.3 free()介绍 三、calloc()3.1 calloc()介绍3.2 calloc()使用 四、realloc()4.1 realloc()介绍4.2 realloc()使用 总结 前言 本篇文章介绍c语言中实现动态内存管理的…

【Python从入门到进阶】47、Scrapy Shell的了解与应用

接上篇《46、58同城Scrapy项目案例介绍》 上一篇我们学习了58同城的Scrapy项目案例&#xff0c;并结合实际再次了项目结构以及代码逻辑的用法。本篇我们来学习Scrapy的一个终端命令行工具Scrapy Shell&#xff0c;并了解它是如何帮助我们更好的调试爬虫程序的。 一、Scrapy Sh…

MyBatis关联查询实战:一对一与一对多详细解析

MyBatis关联查询实战&#xff1a;一对一与一对多详细解析 MyBatis是一款强大的持久层框架&#xff0c;提供了多种方式来处理关联查询&#xff0c;其中包括一对一和一对多的情况。在本文中&#xff0c;我们将深入探讨这两种关联查询的实现方式&#xff0c;并通过具体的示例代码进…

poi-tl模板引擎根据树形结构输出word文档(文档模板)

最近在做一个需求&#xff0c;就是根据当前的树形结构&#xff0c;输出到word文档中。下面展示一下小demo 目录 1、输入&#xff1a; 2、输出&#xff1a;文档.docx 3、代码展示 4、测试结果 4.1、模板文档内容 4.2、输出文档 5、总结 1、输入&#xff1a; root---树节…

Unity New Input System 及其系统结构和源码浅析【Unity学习笔记·第十二】

转载请注明出处&#xff1a;&#x1f517;https://blog.csdn.net/weixin_44013533/article/details/132534422 作者&#xff1a;CSDN|Ringleader| 主要参考&#xff1a; 官方文档&#xff1a;Unity官方Input System手册与API官方测试用例&#xff1a;Unity-Technologies/InputS…

Aria2 WebUI控制台 任意文件读取漏洞复现(CVE-2023-39141)

0x01 产品简介 Aria2 WebUI控制台是用于下载文件的实用程序。它支持 HTTP(S)/FTP/SFTP/BitTorrent 和 Metalink 协议。aria2可以从多个来源/协议下载文件,并尝试利用您的最大下载带宽。它支持同时从HTTP(S)/FTP/SFTP和BitTorrent下载文件,而从HTTP(S)/FTP/SFTP下载的数据上…

算法之【前缀和】讲解

前言&#xff1a; 我们首先要明白何前缀和&#xff1f; 前缀和就是快速求出数组中某一个连续区间的和。算法的时间复杂度会将一个等级&#xff01; 本文章主要讲解前缀和模板&#xff0c;分别为一维前缀和和二维前缀和。 一维前缀和&#xff1a; 第一步&#xff1a;预处理…