C++(Qt)软件调试---内存泄漏分析工具MTuner (25)

C++(Qt)软件调试—内存泄漏分析工具MTuner (25)


文章目录

  • C++(Qt)软件调试---内存泄漏分析工具MTuner (25)
    • @[toc]
    • 1、概述🐜
    • 2、下载MTuner🪲
    • 3、使用MTuner分析qt程序内存泄漏🦧
    • 4、相关地址🐐

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

1、概述🐜

MTuner 是适用于 Windows、PlayStation 4 和 3、Android 和其他平台的 C/C++ 内存分析器和内存泄漏查找器。

MTuner 利用一种新颖的方法来进行内存分析和分析,保留整个基于时间的内存操作历史记录。通过对整个数据集进行查询,这可以深入了解软件的内存相关行为。

虽然 MTuner 是为分析 C/C++ 应用程序而创建的,但只要有相应的调试符号信息,就可以分析用其他语言编写的程序的内存。用户可以使用 cv2pdb 将 DMD CodeView/DWARF 调试符号转换为 PDB 格式。

MTuner工具使用非常简单,图形化界面方便快速上手;

官方说支持分析MinGW编译的程序,但是我没成功过。

演示环境:

  • 系统:

    • Windows11
  • 开发环境:

    • Qt
  • 编译器:

    • MSVC2017-64
    • MSVC2022-64
  • MTuner版本:V4.8.1

2、下载MTuner🪲

  • MTuner下载
  • 解压后直接使用,无需安装。

3、使用MTuner分析qt程序内存泄漏🦧

  1. 创建一个Qt工程,使用MSVC编译器、Debug模式进行编译,保留pdb符号表;

  2. 在代码中写一些内存泄漏的代码;

    #include "widget.h"
    #include "ui_widget.h"
    #include <QDebug>void fun()
    {for(int i = 0; i < 1024; i++){int*p = new int[1000];qDebug() << p[1];}
    }Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
    {ui->setupUi(this);int a = 123;int b;int*p;qDebug() << a << b <<p;fun();
    }Widget::~Widget()
    {// char* arr = new char[123];delete ui;
    }
    
  3. 编译生成可执行程序;

  4. 使用windeployqt.exe打包程序依赖库,保证程序可以双击运行

    在这里插入图片描述

  5. 打开MTuner,将需要进行分析的可执行程序拖入MTuner中,运行完成后退出拖入的可执行程序,完成内存统计;

    在这里插入图片描述

  6. 常用方法可以通过【call stack Tree】或者【Tree Map】来查看有哪些内存泄漏

    在这里插入图片描述

  7. 【call stack Tree】查看如下所示,略显麻烦;

    1. 点击【Allocations】按分配内存大小降序排序;
    2. 找到内存泄漏最大的依次打开,这里会一层层打开,比较麻烦;
    3. 如果程序有pdb符号表则打开到一定程度后会显示函数名称;
    4. 双击函数名称,在窗口右侧的【Stack trace】栏中可以看见调用堆栈;
    5. 如果堆栈有文件名、函数名等信息,双击对应行就可以在下方定位到内存泄漏位置。

    在这里插入图片描述

  8. 使用【Tree Map】如下所示;

    1. 进入【Tree Map】页面后可以看见内存大小分布情况;
    2. 可以选中较大的内存泄漏块;
    3. 双击内存块后会在窗口右侧的【Stack trace】栏中可以看见调用堆栈;
    4. 如果堆栈有文件名、函数名等信息,双击对应行就可以在下方定位到内存泄漏位置。

    在这里插入图片描述

4、相关地址🐐

  • MTuner github主页
  • MTuner下载
  • 官方文档

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

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

相关文章

QT_CONFIG宏使用

时常在Qt代码中看到QT_CONFIG宏&#xff0c;之前以为和#define、DEFINES 差不多&#xff0c;看了定义才发现不是那么回事&#xff0c;定义如下&#xff1a; 看注释就知道了QT_CONFIG宏&#xff0c;其实是&#xff1a;实现了一个在编译时期安全检查&#xff0c;检查指定的Qt特性…

Redis下载历史版本

Linux版本&#xff1a; https://download.redis.io/releases/ Windows版本&#xff1a; https://github.com/tporadowski/redis/releases Linux Redis对应gcc版本

8 软件项目管理

软件项目管理 1、软件项目管理概念1.1 软件项目管理内容1.2 软件项目管理的4P要素人员产品过程项目 2、软件项目度量2.1 软件项目度量定义及度量方法2.2 面对规模的度量2.3 面对功能的度量UFC相关的五类组件14个复杂性调节因素 F i F_i Fi​一个功能点开发代码行数 2.4 软件估算…

游戏引擎学习第12天

视频参考:https://www.bilibili.com/video/BV1yom9YnEWY 这节没讲什么东西&#xff0c;主要是改了一下音频的代码 后面有介绍一些alloc 和malloc,VirtualAlloc 的东西 _alloca 函数&#xff08;或 alloca&#xff09;分配的是栈内存&#xff0c;它的特点是&#xff1a; 生命周…

如何保证Redis与MySQL双写一致性

什么是双写一致性问题&#xff1f; 双写一致性主要指在一个数据同时存在于缓存&#xff08;如Redis&#xff09;和持久化存储&#xff08;如MySQL&#xff09;的情况下&#xff0c;任何一方的数据更新都必须确保另一方数据的同步更新&#xff0c;以保持双方数据的一致状态。这一…

STM32设计学生宿舍监测控制系统

目录 前言 一、本设计主要实现哪些很“开门”功能&#xff1f; 二、电路设计原理图 电路图采用Altium Designer进行设计&#xff1a; 三、实物设计图 四、程序源代码设计 五、获取资料内容 前言 随着科技的飞速发展和智能化时代的到来&#xff0c;学生宿舍的安全、舒适…

算法--解决二叉树遍历问题

第一 实现树的结构 class Node(): # 构造函数&#xff0c;初始化节点对象&#xff0c;包含数据和左右子节点 def __init__(self, dataNone): self.data data # 节点存储的数据 self.left None # 左子节点&#xff0c;默认为None self.rig…

【C#】C#编程入门指南:构建你的.NET开发基础

文章目录 前言&#xff1a;1. C# 开发环境 VS的基本熟悉2. 解决方案与项目的关系3. 编辑、编译、链接、运行4. 托管代码和CLR4.1 CLR&#xff1a;4.2 C# 代码第编译过程&#xff08;两次编译的&#xff09; 5. 命名空间6. 类的组成与分析7. C# 的数据类型7.1 值类型7.2 引用类型…

算法闭关修炼百题计划(八)

一半来自力扣的push题单 1.最大连续1的个数II2.长度为k的无重复字符子串3.句子的相似性4.移位字符串分组5.x的平方根6.Z字形变换 1.最大连续1的个数II 给定一个二进制数组nums&#xff0c;如果最多可以翻转一个0&#xff0c;则返回数组中连续1的最大个数 之前是Window&#x…

论文笔记(五十六)VIPose: Real-time Visual-Inertial 6D Object Pose Tracking

VIPose: Real-time Visual-Inertial 6D Object Pose Tracking 文章概括摘要I. INTRODACTIONII. 相关工作III. APPROACHA. 姿态跟踪工作流程B. VIPose网络 文章概括 引用&#xff1a; inproceedings{ge2021vipose,title{Vipose: Real-time visual-inertial 6d object pose tra…

K8S containerd拉取harbor镜像

前言 接前面的环境 K8S 1.24以后开始启用docker作为CRI&#xff0c;这里用containerd拉取 参考文档 正文 vim /etc/containerd/config.toml #修改内容如下 #sandbox_image "registry.aliyuncs.com/google_containers/pause:3.10" systemd_cgroup true [plugins.…

LM2 : A Simple Society of Language Models Solves Complex Reasoning

文章目录 题目摘要简介相关工作方法论实验结果结论局限性 题目 LM2&#xff1a;简单的语言模型社会解决复杂推理问题 论文地址&#xff1a;https://aclanthology.org/2024.emnlp-main.920/ 项目地址&#xff1a; https://github.com/LCS2-IIITD/Language_Model_Multiplex 摘要…

STM32从上电开始启动过程详解(上电->分散加载->main函数)

1.硬件复位之后&#xff0c;CPU 内的时序逻辑电路首先完成如下两个工作&#xff08; 程序代码下载到内部 flash 为例&#xff0c;flash首地址 0x0800 0000&#xff09;  将 0x08000000 位置存放的堆栈栈顶地址存放到 SP 中(MSP)。  将 0x08000004 位置存放的向量地址装入 P…

新版Apache tomcat服务安装 Mac+Window双环境(笔记)

简介&#xff1a;Tomcat服务器器的下载和安装&#xff1a; 安装前提 1&#xff09;电脑需要有java环境&#xff0c;jdk8以上&#xff0c;否则启动不不成功 2&#xff09;已经安装Sublime⽂文件编辑软件 3&#xff09;window电脑需要显示⽂文件拓拓展名 官网&#xff08;https:…

数据重塑:长宽数据转换【基于tidyr】

在数据分析和可视化过程中&#xff0c;数据的组织形式直接影响着我们能够进行的分析类型和可视化效果。这里简单介绍两种常见的数据格式&#xff1a;长格式&#xff08;Long Format&#xff09;和宽格式&#xff08;Wide Format&#xff09;&#xff0c;以及如何使用tidyr包进行…

ollama+springboot ai+vue+elementUI整合

1. 下载安装ollama (1) 官网下载地址&#xff1a;https://github.com/ollama/ollama 这里以window版本为主&#xff0c;下载链接为&#xff1a;https://ollama.com/download/OllamaSetup.exe。 安装完毕后&#xff0c;桌面小图标有一个小图标&#xff0c;表示已安装成功&…

基于lighthouse搭建私有网盘Cloudreve【开源应用实践】

基于lighthouse搭建私有网盘Cloudreve【超高性价比】 今天给大家分享一款私人网盘神器&#xff0c;既能存放你的文件文档&#xff0c;也能替你保存那不可告人的秘密~ 香菇今天将手把手教给大家如何在腾讯云轻量应用服务器上搭建个人专属网盘 1. 既爱又恨的网盘存储 很多小伙伴…

JavaScript高级篇 - 浏览器事件详解 DOM事件以及独立封装事件Util和Ajax封装

Dom事件 Model&#xff08;特定领域对象的抽象&#xff09;、Protocal&#xff08;针对数据格式的约定&#xff09; DOM(Document Object Model&#xff0c;文档对象模型)是针对HTML文档和XML文档的一个API。DOM描绘了一个层次化的节点树&#xff0c;允许开发人员添加、移出和…

MinIO 的 S3 over RDMA 计划: 为高速人工智能数据基础设施设定对象存储新标准

随着 AI 和机器学习的需求不断加速&#xff0c;数据中心网络正在迅速发展以跟上步伐。对于许多企业来说&#xff0c;400GbE 甚至 800GbE 正在成为标准选择&#xff0c;因为数据密集型和时间敏感型 AI 工作负载需要高速、低延迟的数据传输。用于大型语言处理、实时分析和计算机视…

git config是做什么的?

git config是做什么的&#xff1f; git config作用配置级别三种配置级别的介绍及使用&#xff0c;配置文件说明 使用说明git confi查看参数 默认/不使用这个参数 情况下 Git 使用哪个配置等级&#xff1f; 一些常见的行为查看配置信息设置配置信息删除配置信息 一些常用的配置信…