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

news2024/11/24 10:51:44

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.coloradmin.cn/o/1404751.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

摄影后期照片编辑 -- Lightroom Classic 2024

Lightroom Classic 2024是一款强大的数字照片管理和编辑软件,适合摄影师、图片编辑或者任何需要处理大量照片的人使用。 首先,Lightroom Classic 2024具有直观且易于使用的界面,使得用户可以快速浏览、组织和编辑照片。它支持各种RAW格式的照…

【网络】传输层TCP协议

目录 一、概述 2.1 运输层的作用引出 2.2 传输控制协议TCP 简介 2.3 TCP最主要的特点 2.4 TCP连接 二、TCP报文段的首部格式 三、TCP的运输连接管理 3.1 TCP的连接建立(三次握手) 3.2 为什么是三次握手? 3.3 为何两次握手不可以呢? 3.4 TCP的…

附1:k8s服务器初始化

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 关联文章: 《RKE快速搭建离线k8s集群并用rancher管理界面》 1.创建普通用户sre并赋予sudo权限 # adduser sre # ec…

vue封装接口

目录 封装接口前缀 配置逻辑 接口存放文件 配置代理 获取数据方法 封装接口前缀 config.js const serverConfig {baseURL: "https://xxx.xxxxxxxx.com/api", // 请求基础地址,可根据环境自定义useTokenAuthorization: false, // 是否开启 token 认证};export …

JoyRL Actor-Critic算法

策略梯度算法的缺点 这里策略梯度算法特指蒙特卡洛策略梯度算法,即 REINFORCE 算法。 相比于 DQN 之类的基于价值的算法,策略梯度算法有以下优点。 适配连续动作空间。在将策略函数设计的时候我们已经展开过,这里不再赘述。适配随机策略。由…

你必须了解的羊奶知识,一文悉数为你揭晓

你必须了解的羊奶知识,一文悉数为你揭晓 羊奶,作为一种营养丰富的乳制品,近年来备受关注。许多人选择羊奶作为替代牛奶的选择,因为它被认为更易消化,并且具有许多健康益处。在本文中,小编羊大师将为大家介…

Mac 上网易云音乐 ncm 格式文件如何转换为 mp3 音频文件?嗨格式转换器

hello朋友们大家好,最近想着怎么把网易云的歌保存到U盘,然后放到车上去听,然后辛辛苦苦搞了一宿,第二天拿到车上发现播放不了,根本就不认识 ncm 格式,我百度了一下,发现 ncm 是网易云的专用加密…

推荐一一款小众黑科技工具,低调使用建议收藏

wireshark是个啥就不多说了,非常流行的网络封包分析软件。 可以截取各种网络封包,显示网络封包的详细信息。 软件功能十分强大,操作也不复杂。 很多小友都在后台问能不能出一期完整的抓包分析贴,今天给你们安排上了哈。 01 W…

Kafka(二)【文件存储机制 生产者】

目录 一、Kafka 文件存储机制 二、Kafka 生产者 1、生产者消息发送流程 1.1、发送原理 2、异步发送 API 2.1、普通异步发送 案例演示 2.2、带回调函数的异步发送 2.3、同步发送 API 3、生产者分区 3.1、分区的好处 3.2、生产者发送消息的分区策略 (1&am…

【Java数据结构 -- 队列:队列有关面试oj算法题】

队列、循环队列、用队列模拟栈、用栈模拟队列 1.队列1.1 什么是队列1.2 创建队列1.3 队列是否为空和获取队头元素 empty()peek()1.4 入队offer()1.5 出队(头删)poll() 2. 循环队列2.1 创建循环队列2.2 判断是否为空isEmpty()和满isFull()2.3 入队enQueue…

深入理解Linux中的动态库与静态库

🎬慕斯主页:修仙—别有洞天 ♈️今日夜电波:I Wish My Mind Would Shut Up—Ivoris 0:21━━━━━━️💟──────── 2:04 🔄 ◀️ …

基于SpringBoot的手机商城

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式 🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 &…

苏州渭塘镇应用无人机“智慧执法”

苏州渭塘镇应用无人机“智慧执法” 在今年以来,渭塘镇综合行政执法局采用了“空中地面”的立体监督模式,以实现对“互联网执法”工作的深入推进。在这一模式下,无人机巡查作为技术手段得到广泛应用,而安全生产监管信息系统和综合…

MySQL-函数-数值函数

常见的数值函数 案例

【一文秒懂】Ftrace系统调试工具使用终极指南

我的圈子: 高级工程师聚集地 我是董哥,高级嵌入式软件开发工程师,从事嵌入式Linux驱动开发和系统开发,曾就职于世界500强公司! 创作理念:专注分享高质量嵌入式文章,让大家读有所得! …

Armv8-M的TrustZone技术之内存属性单元

如果处理器包含Armv8-M安全扩展,则内存区域的安全状态由内部安全属性单元(SAU,Secure Attribution Unit)或外部实现定义的属性单元(IDAU,Implementation Defined Attribution Unit)的组合控制。…

【WinForm.NET开发】ToolStrip 控件体系结构

本文内容 ToolStripToolStripItem附件类 ToolStrip 和 ToolStripItem 类提供了一种灵活的可扩展系统,用于显示工具栏、状态和菜单项。 这些类都包含在 System.Windows.Forms 命名空间中 ,它们的名称通常都带有“ToolStrip”前缀(如 ToolStr…

yolov8 opencv dnn部署自己的模型

源码地址 本人使用的opencv c github代码,代码作者非本人 使用github源码结合自己导出的onnx模型推理自己的视频 推理条件 windows 10 Visual Studio 2019 Nvidia GeForce GTX 1070 opencv4.7.0 (opencv4.5.5在别的地方看到不支持yolov8的推理,所以只使用opencv…

HDMI、VGA、DVI、DB接口的区别

HDMI、VGA、DVI和DB(也称为DisplayPort)是不同类型的视频接口标准,它们用于连接计算机、显示器、电视和其他视频设备。 HDMI(High-Definition Multimedia Interface,高清晰度多媒体接口):HDMI支…

C语言——静态通讯录的实现

今天我们来实现一下一个静态的通讯录: 我就先展示一下几个功能: 实现一个通讯录; 通讯录可以用来存储100个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址 提供方法: 添加联系人信息删除指定…