当前位置: 首页 > news >正文

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

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

相关文章:

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

C(Qt)软件调试—静态分析工具clang-tidy(18) 文章目录 C(Qt)软件调试---静态分析工具clang-tidy(18)1、概述2、clang-tidy基本用法3、目前已有检查项4、Qt Creator中安装clang-tidy5、Qt Creator中使用clang-tidy6、Clang-Tidy配置…...

2401llvm,clang的重构引擎

Clang的重构引擎 展示如何使用重构API中的各种原语来实现不同的重构. LibTooling库提供了几个在开发重构操作时,使用的其他API. 可用重构引擎来实现,用编辑器或IDE中的选择启动的本地重构.可结合AST匹配器和重构引擎,以实现不适合源选择和/或必须查询某些指定节点的AST的重构…...

【C语言深度剖析——第四节(关键字4)】《C语言深度解剖》+蛋哥分析+个人理解

追求本质,不断进步 本文由睡觉待开机原创,转载请注明出处。 本内容在csdn网站首发 欢迎各位点赞—评论—收藏 如果存在不足之处请评论留言,共同进步! 这里写目录标题 一、空间的申请1.变量定义1.1变量定义的概念:1.2变…...

鸿蒙开发系列教程(五)--ArkTS语言:组件开发

1、基础组件 组件API文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V2/84_u58f0_u660e_u5f0f_u5f00_u53d1_u8303_u5f0f_uff09-0000001427744776-V2 查看组件API 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 容…...

Java:正则表达式讲解加举例,简洁易懂

正则表达式定义: 由一些特定的字符组成,代表的是一个规则。 作用:1.校验数据是否合法。2.可以在一段文本中查找满足要求的内容。 先自己写一个方法去校验qq号,比较与正则表达式的区别: 正则表达式的代码暂时可以不…...

2.机器学习-K最近邻(k-Nearest Neighbor,KNN)分类算法原理讲解

2️⃣机器学习-K最近邻(k-Nearest Neighbor,KNN)分类算法原理讲解 个人简介一算法概述二算法思想2.1 KNN的优缺点 三实例演示3.1电影分类3.2使用KNN算法预测 鸢(yuan)尾花 的种类3.3 预测年收入是否大于50K美元 个人简介 🏘️&…...

​WordPress顶部管理工具栏怎么添加一二级自定义菜单?

默认情况下,WordPress前端和后台页面顶部都有一个“管理工具栏”,左侧一般就是站点名称、评论、新建,右侧就是您好,用户名称和头像。那么我们是否可以在这个管理工具栏中添加一些一二级自定义菜单呢? 其实&#xff0c…...

Linux安装ossutil工具且在Jenkins中执行shell脚本下载文件

测试中遇到想通过Jenkins下载OSS桶上的文件,要先在linux上安装ossutil工具,记录安装过程如下: 一、下载安装ossutil,使用命令 1.下载:wget https://gosspublic.alicdn.com/ossutil/1.7.13/ossutil64 2.一定要赋权限…...

Docker命令---搜索镜像

介绍 使用docker命令搜索镜像。 命令 docker search 镜像命令:版本号示例 以搜索ElasticSearch镜像为例 docker search ElasticSearch...

docker使用http_proxy配置代理

钢铁知识库,一个学习python爬虫、数据分析的知识库。人生苦短,快用python。 在内网服务器中,docker经常需要下载拉取镜像,但由于没有网络要么只能手动导入镜像包,又或者通过http_proxy代理到其它服务器下载。 解决方法…...

综述:自动驾驶中的 4D 毫米波雷达

论文链接:《4D Millimeter-Wave Radar in Autonomous Driving: A Survey》 摘要 4D 毫米波 (mmWave) 雷达能够测量目标的距离、方位角、仰角和速度,引起了自动驾驶领域的极大兴趣。这归因于其在极端环境下的稳健性以及出色的速度和高度测量能力。 然而…...

蓝桥杯:1.特殊日期(Java)

题目描述 对于一个日期,我们可以计算出年份的各个数位上的数字之和,也可以分别计算月和日的各位数字之和。 请问从1900年1月1日至9999年12月31日,总共有多少天,年份的数位数字之和等于月的数位数字之和加日的数位数字之和。 例如&…...

服务异步通讯之 SpringAMQP【微服务】

文章目录 一、初识 MQ1. 同步通讯2. 异步通讯3. MQ 常见框架 二、RabbitMQ 入门1. 概述和安装2. 常见消息模型3. 基础模型练习 三、SpringAMQP1. 简单队列模型2. 工作队列模型3. 发布订阅模型3.1 Fanout Exchange3.2 Direct Exchange3.3 Topic Exchange 一、初识 MQ 1. 同步通…...

LED闪烁

这段代码是用于STM32F10x系列微控制器的程序,主要目的是初始化GPIOA的Pin 0并使其按照特定的模式进行闪烁。下面是对这段代码的逐行解释: #include "stm32f10x.h":这一行包含了STM32F10x系列微控制器的设备头文件。这个头文件包含…...

php array_diff 比较两个数组bug避坑 深入了解

今天实用array_diff出现的异常问题,预想的结果应该是返回 "integral_initiate">"0",实际没有 先看测试代码: $a ["user_name">"测","see_num">0,"integral_initiate&quo…...

c++中STL的vector简单实现

文章目录 vector构造函数 vector()拷贝构造 vector()析构函数 ~vector()iterator 的定义begin()与const版本end()与const版本增删改查尾插push_back()尾删pop_back()指定位置插入insert()指定位置删除 erase() operator[]与const版本容量增容reserve()设置容量 resize() 成员函…...

C# 更改Bitmap图像色彩模式

方法一:直接修改RGB的值 首先将BitmapData扫描线上的所有像素复制到字节数组中,然后遍历数组并对每个像素的RGB值进行修改,最后将修改后的像素值复制回BitmapData。这个过程不会影响原始的Bitmap对象,但会改变锁定的位图区域的数…...

5.2 基于深度学习和先验状态的实时指纹室内定位

文献来源 Nabati M, Ghorashi S A. A real-time fingerprint-based indoor positioning using deep learning and preceding states[J]. Expert Systems with Applications, 2023, 213: 118889.(5.2_基于指纹的实时室内定位,使用深度学习和前一状态&…...

AIGC时代高效阅读论文实操

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…...

对网站进行打点(不要有主动扫描行为)

什么是打点? 简单来说就是获取一个演习方服务器的控制权限。 目的: 1. 上传一个一句话木马 2. 挖到命令执行 3. 挖到反序列化漏洞 4. 钓鱼 假设对“千峰”网站进行打点: 1. 利用平台 1. 利用各类平台: 天眼查-商业查询平…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

Python训练营-Day26-函数专题1:函数定义与参数

题目1:计算圆的面积 任务: 编写一个名为 calculate_circle_area 的函数,该函数接收圆的半径 radius 作为参数,并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求:函数接收一个位置参数 radi…...

在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例

目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码:冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...

鸿蒙HarmonyOS 5军旗小游戏实现指南

1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发,采用DevEco Studio实现,包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...

__VUE_PROD_HYDRATION_MISMATCH_DETAILS__ is not explicitly defined.

这个警告表明您在使用Vue的esm-bundler构建版本时,未明确定义编译时特性标志。以下是详细解释和解决方案: ‌问题原因‌: 该标志是Vue 3.4引入的编译时特性标志,用于控制生产环境下SSR水合不匹配错误的详细报告1使用esm-bundler…...