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

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


### 文章目录

  • [C++(Qt)软件调试---内存泄漏分析工具MTuner (25)](#文章目录 C++(Qt)软件调试---内存泄漏分析工具MTuner (25) @[toc] 1、概述🐜 2、下载MTuner🪲 3、使用MTuner分析qt程序内存泄漏🦧 4、相关地址🐐)
  • [@toc](#文章目录 C++(Qt)软件调试---内存泄漏分析工具MTuner (25) @[toc] 1、概述🐜 2、下载MTuner🪲 3、使用MTuner分析qt程序内存泄漏🦧 4、相关地址🐐)
  • [1、概述🐜](#文章目录 C++(Qt)软件调试---内存泄漏分析工具MTuner (25) @[toc] 1、概述🐜 2、下载MTuner🪲 3、使用MTuner分析qt程序内存泄漏🦧 4、相关地址🐐)
  • [2、下载MTuner🪲](#文章目录 C++(Qt)软件调试---内存泄漏分析工具MTuner (25) @[toc] 1、概述🐜 2、下载MTuner🪲 3、使用MTuner分析qt程序内存泄漏🦧 4、相关地址🐐)
  • [3、使用MTuner分析qt程序内存泄漏🦧](#文章目录 C++(Qt)软件调试---内存泄漏分析工具MTuner (25) @[toc] 1、概述🐜 2、下载MTuner🪲 3、使用MTuner分析qt程序内存泄漏🦧 4、相关地址🐐)
  • [4、相关地址🐐](#文章目录 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🪲

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

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

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

    cpp 复制代码
    #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、相关地址🐐

相关推荐
九英里路5 小时前
protobuf快速上手
网络·c++·中间件·json·谷歌·序列化·protobuf
纪念 2295 小时前
C++ 算法基础 (差分)
开发语言·c++·算法
ShineWinsu10 小时前
对于Qt:QTreeWidget常见属性以及QTreeWidgetItem类的解析
开发语言·c++·qt·gui·客户端·多叉树·qtreewidget
落羽的落羽11 小时前
【C++】C++17的主要特性
linux·服务器·开发语言·c++·算法·机器学习
汉克老师16 小时前
《从C++小白到算法高手:GESP 1—8级成长地图》第一讲:认识GESP——从编程新手到算法探索者
c++·gesp·信息学竞赛·小学生学c++
晴天的雨.99217 小时前
【C++】继承篇
java·开发语言·c++
青少儿编程课堂18 小时前
蓝桥杯青少组图形化 + 全国青少年信息素养大赛 + 电子学会图形化考级:校园大富翁经营闯关解析
c++·python·算法·bfs·信息学竞赛
another heaven18 小时前
【C/C++ 第一次跨越(上):用 C++11/14 停止制造新的旧代码】
c语言·c++·制造
qq_4069810318 小时前
c++ lamda(三)Lambda表达式
java·前端·c++
I_belong_to_jesus1 天前
C++关于分支预测的优化1
开发语言·c++·算法