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

C++(Qt)软件调试---静态分析工具cppcheck(22)

C++(Qt)软件调试—静态分析工具cppcheck(22)


文章目录

  • C++(Qt)软件调试---静态分析工具cppcheck(22)
    • @[toc]
    • 1、概述🐜
    • 2、安装Cppcheck🪲
    • 3、检测消息类型
    • 3、Qt Creator使用Cppcheck🦗
    • 4、vs中使用cppcheck
    • 5、参考地址

更多精彩内容
👉内容导航 👈
👉C++软件调试 👈

1、概述🐜

Cppcheck 是 C/C++ 代码的静态分析工具。它提供独特的代码分析来检测错误,并专注于检测未定义的行为和 危险的编码结构。目标是获得极少的误报。

它能够帮助开发者发现潜在的问题,如内存泄漏、数组越界、未初始化变量的使用等,从而提高代码的质量和安全性

免费: cppcheck有免费开源版本和收费版本,使用开源版本就开源满足绝大部分需求。

跨平台: Cppcheck 是跨平台的。有适用于 Windows、Linux、Mac、BSD 的安装包。它也在各种其他操作系统上编译和运行。

使用简单: 支持命令行和图形界面、集成到第三方IDE中。

易于集成: 该工具可轻松集成到许多不同的开发环境中。您可以在 Visual Studio、VScode、Eclipse、Clion、Qt Creator、C++ Builder 和许多其他 C/C++ IDE 中运行它。

可检测的未定义行为

  • 野指针、空指针
  • 除零异常
  • 整数溢出
  • 无效的移位操作数
  • 无效的转化
  • STL 的无效使用
  • 内存泄漏
  • 越界检查
  • 未初始化的变量
  • 写入 const 数据
  • 详细检查内容

注意:每种静态分析工具都有自己的优缺点,所以不必强调哪个最牛,多种工具混合检测会检查更加全面,但是静态分析工具会消耗电脑性能,所以使用一个还是多个需要自己权衡利弊。

演示环境:

  • 系统:
    • Windows11
  • 编辑器:
    • Visual Studio 2022
    • Qt Creator15

2、安装Cppcheck🪲

  • 下载安装

3、检测消息类型

  • error:错误检测,在执行代码时,会出现未定义的行为或其他错误,例如内存泄漏或资源泄漏;
  • warning:警告提示,执行代码时,可能存在未定义的行为;
  • style:代码风格检查,样式问题,例如未使用的函数、冗余代码、常量、运算符优先级、可能的错误;
  • performance:性能优化检查,基于常识的运行时性能建议,但不确定通过修复这些消息是否能实现任何可测量的速度差异。
  • portability:可移植性警告。实现定义的行为。64位的可移植性。一些未定义的行为可能会“如你所愿”,等等。
  • information:配置问题,这与语法正确性无关,但可以使用的 Cppcheck 配置可以改进,例如找不到头文件。

3、Qt Creator使用Cppcheck🦗

  1. 选中【编辑】【preferences】;

    在这里插入图片描述

  2. 打开首选项窗口后,选择【分析器】【cppcheck】;

    在这里插入图片描述

  3. 在binary栏设置安装的cppcheck路径;

  4. checks勾选需要显示的检查消息;

  5. 配置完成后创建一个Qt工程;

  6. 鼠标选择【分析】【cppcheck】;

    在这里插入图片描述

  7. 打开配置窗口后可配置显示的检查信息、需要检查的文件等;

    在这里插入图片描述

  8. 当修改完成代码后保存修改的文件就会自动进行分析检查;

  9. 检查结果如下图所示,在代码左侧会出现蓝色或者红色的图标,将鼠标移动到图标上就会显示检查的信息。

在这里插入图片描述

在这里插入图片描述

4、vs中使用cppcheck

  1. 下载安装插件

  2. 安装完成后启动vs,创建一个工程,选择【工具】【check curent project with cppcheck】;

    在这里插入图片描述

  3. 第一次使用时需要选择cppcheck.exe路径,然后就可以进行代码分析了。

  4. 代码分析结果如下所示;

在这里插入图片描述

5、参考地址

  • 网站主页
  • HTML版本帮助手册
  • PDF版本帮助手册
  • Release 1.5 for VS 2022 · VioletGiraffe/cppcheck-vs-addin · GitHub

http://www.kler.cn/a/391644.html

相关文章:

  • Vue 项目打包后环境变量丢失问题(清除缓存),区分.env和.env.*文件
  • Blender进阶:图像纹理节点和映射节点
  • AtomicInteger 和 AtomicIntegerFieldUpdater的区别
  • YUM 的使用
  • 深度学习之 LSTM
  • Java之泛型--对象指定多个泛型类型(有示例)
  • LLMs之Code:Github Spark的简介、安装和使用方法、案例应用之详细攻略
  • C# DataTable使用Linq查询详解
  • 2024最新版JavaScript逆向爬虫教程-------基础篇之Proxy与Reflect详解
  • 知识见闻 - 苹果手机拨号键长按
  • C# 字典应用
  • CTF-RE 从0到N: windows反调试-获取Process Environment Block(PEB)信息来检测调试
  • 时间序列数据结构、持久数据结构详细解读
  • DHCP与FTP
  • 【设计模式】行为型模式(一):模板方法模式、观察者模式
  • 番外篇 | 关于YOLO11算法的改进点总结
  • 计算机毕业设计Python+大模型动漫推荐系统 动漫视频推荐系统 机器学习 协同过滤推荐算法 bilibili动漫爬虫 数据可视化 数据分析 大数据毕业设计
  • Pytorch实现运动鞋识别
  • KPI绩效系统源码,java版医院绩效核算系统源码,科室绩效考核、奖金核算、审核、发放一体化
  • GIS前后端分离项目展示
  • 电商系统开发:Spring Boot框架的实践
  • Day09 C++ 存储类
  • ubuntu2204部署RAGFlow(非docker)
  • HTTP vs. HTTPS:从基础到安全的全面对比
  • Hadoop + Hive + Apache Ranger 源码编译记录
  • MySql--增删改查表设计总结