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

这篇具有很好参考价值的文章主要介绍了C++(Qt)软件调试---静态分析工具clang-tidy(18)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

更多精彩内容
👉个人内容分类汇总 👈
👉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:查看帮助信息;

    C++(Qt)软件调试---静态分析工具clang-tidy(18),# C++软件调试,c++,qt,开发语言

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

    C++(Qt)软件调试---静态分析工具clang-tidy(18),# C++软件调试,c++,qt,开发语言

4、Qt Creator中安装clang-tidy

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

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

    C++(Qt)软件调试---静态分析工具clang-tidy(18),# C++软件调试,c++,qt,开发语言

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

    C++(Qt)软件调试---静态分析工具clang-tidy(18),# C++软件调试,c++,qt,开发语言

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

    C++(Qt)软件调试---静态分析工具clang-tidy(18),# C++软件调试,c++,qt,开发语言

  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下方会列出所有检查出的问题,双击列出的问题会定位到出现问题的行,鼠标移动到黄色三角形上会出现问题的详细说明。

    C++(Qt)软件调试---静态分析工具clang-tidy(18),# C++软件调试,c++,qt,开发语言

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

    C++(Qt)软件调试---静态分析工具clang-tidy(18),# C++软件调试,c++,qt,开发语言

    C++(Qt)软件调试---静态分析工具clang-tidy(18),# C++软件调试,c++,qt,开发语言

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

    C++(Qt)软件调试---静态分析工具clang-tidy(18),# C++软件调试,c++,qt,开发语言

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

      C++(Qt)软件调试---静态分析工具clang-tidy(18),# C++软件调试,c++,qt,开发语言

    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配置窗口。

    C++(Qt)软件调试---静态分析工具clang-tidy(18),# C++软件调试,c++,qt,开发语言

6、Clang-Tidy配置界面说明

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

    C++(Qt)软件调试---静态分析工具clang-tidy(18),# C++软件调试,c++,qt,开发语言

    1. diagnostic configuration:配置检查项;

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

      C++(Qt)软件调试---静态分析工具clang-tidy(18),# C++软件调试,c++,qt,开发语言

    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】,打开窗口如下所示;

    C++(Qt)软件调试---静态分析工具clang-tidy(18),# C++软件调试,c++,qt,开发语言

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

    C++(Qt)软件调试---静态分析工具clang-tidy(18),# C++软件调试,c++,qt,开发语言

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

    C++(Qt)软件调试---静态分析工具clang-tidy(18),# C++软件调试,c++,qt,开发语言

8、VS中使用Clang-tidy

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

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

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

    C++(Qt)软件调试---静态分析工具clang-tidy(18),# C++软件调试,c++,qt,开发语言

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

    C++(Qt)软件调试---静态分析工具clang-tidy(18),# C++软件调试,c++,qt,开发语言

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

    C++(Qt)软件调试---静态分析工具clang-tidy(18),# C++软件调试,c++,qt,开发语言

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

    C++(Qt)软件调试---静态分析工具clang-tidy(18),# C++软件调试,c++,qt,开发语言

9、参考文章

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

{__/}
(̷ ̷´̷ ̷^̷ ̷`̷)̷◞~❤
| ⫘ |文章来源地址https://www.toymoban.com/news/detail-817311.html

到了这里,关于C++(Qt)软件调试---静态分析工具clang-tidy(18)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [系统安全] 四十五.恶意软件分析 (1)静态分析Capa经典工具的基本用法万字详解

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列。因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全、逆向分析和恶意代码检测,“系统安全”系列文章会更

    2023年04月16日
    浏览(42)
  • C++软件分析工具案例分析集锦汇总

    本文是 C++常用软件分析工具从入门到精通案例集锦 专栏的导航贴( 点击链接,跳转到专栏主页,欢迎订阅,持续更新… )。 专栏介绍 :根据近几年C++软件异常排查的项目实践,详细地讲述如何使用PE工具、Dependency Walker、GDIView、Process Explorer、Process Monitor、API Monitor、Clum

    2024年02月11日
    浏览(50)
  • C++常用软件分析工具案例分析集锦汇总

    本文是 C++常用软件分析工具从入门到精通案例集锦 专栏的导航贴( 点击链接,跳转到专栏主页,欢迎订阅,持续更新… )。 专栏介绍 :根据近几年C++软件异常排查的项目实践,详细地讲述如何使用PE工具、Dependency Walker、GDIView、Process Explorer、Process Monitor、API Monitor、Clum

    2024年02月11日
    浏览(42)
  • C++ 软件常用分析工具及项目实战问题分析案例集锦

    目录 1、库依赖关系查看工具Dependency Walker 2、GDI对象查看工具GDIview 3、PE信息查看工具PeViewer/MiTeC EXE Explorer 4、进程信息查看工具Process Explorer 5、进程监控工具Process Monitor 6、API函数调用监测工具API Monitor C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续

    2024年02月03日
    浏览(47)
  • C++常用软件分析工具从入门到精通案例集锦汇总

    本文是 C++常用软件分析工具从入门到精通案例集锦 专栏的导航贴( 点击链接,跳转到专栏主页,欢迎订阅,持续更新… )。 专栏介绍 :根据近几年C++软件异常排查的项目实践,详细地讲述如何使用PE工具、Dependency Walker、GDIView、Process Explorer、Process Monitor、API Monitor、Clum

    2024年02月14日
    浏览(44)
  • clang+llvm多进程gdb调试

    在学习新增llvm的优化pass时,需要跟踪clang及llvm的调用栈。然而llvm通过 posix_spawn() 创建了新进程,这使得gdb调试必须有一定的技巧了。 以下命令通过clang调用新增优化pass(指令替换),将simple.c文件中的sum函数替换掉: 单步调试的命令为: 实际上,在我的ubuntu下clang指向cl

    2024年02月05日
    浏览(38)
  • 小程序应用&解包反编译&动态调试&抓包&静态分析&源码架构

    直接在微信小程序上搜就完了 参考地址:https://blog.csdn.net/m0_60571842/article/details/132564881 反编译之后就会得到源码,然后对源码架构进行分析以下4个方面 1.更多的资产信息 2.敏感的配置信息 3.未授权访问测试 4.源码中的安全问题 小程序多功能组手 简单工具:http://xcx.

    2024年02月05日
    浏览(32)
  • socket调试工具、socket调试软件、tcp调试工具、tcp调试软件(sokit),C#sokit工具包及其sokit使用说明

    sokit真的非常好用,可做服务端,可做客户端 sokit是一款非常简单易用的tcp、udp调试工具,主要适用于专业的网络管理使用,它可以轻松查看网内的数据情况,能够有效地接收、发送、转发TCP或UDP数据包。   先创建服务端,再创建客户端 服务端 打开sokit,操作如下所示: 共

    2024年02月10日
    浏览(67)
  • 【静态分析】软件分析课程实验-前置准备

    课程:南京大学的《软件分析》课程 平台:Tai-e(太阿)实验作业平台 Tai-e 是一个分析 Java 程序的静态程序分析框架 ,相比于已有的知名静态程序分析框架(如 Soot、Wala 等), Tai-e 要易学易用很多 。Tai-e 提供精炼的 IR,明晰且易拓展的接口,丰富的程序分析算法,直观易

    2024年04月17日
    浏览(36)
  • 【软件分析/静态分析】学习笔记01——Introduction

    🔗 课程链接:李樾老师和谭天老师的:南京大学《软件分析》课程01(Introduction)_哔哩哔哩_bilibili 目录 一、静态程序分析介绍 1.1 PL and Static Analysis 程序语言和静态分析 1.2 为什么要学 Static Analysis? 1.3 什么是静态分析 ? 1.4 静态分析的特征和例子 1.4.1 sound and complete (no p

    2024年02月06日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包