C++(Qt)软件调试—内存泄漏分析工具MTuner (25)
文章目录
- C++(Qt)软件调试---内存泄漏分析工具MTuner (25)
- @[toc]
- 1、概述🐜
- 2、下载MTuner🪲
- 3、使用MTuner分析qt程序内存泄漏🦧
- 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🪲
- MTuner下载
- 解压后直接使用,无需安装。
3、使用MTuner分析qt程序内存泄漏🦧
-
创建一个Qt工程,使用MSVC编译器、Debug模式进行编译,保留pdb符号表;
-
在代码中写一些内存泄漏的代码;
#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; }
-
编译生成可执行程序;
-
使用windeployqt.exe打包程序依赖库,保证程序可以双击运行;
-
打开MTuner,将需要进行分析的可执行程序拖入MTuner中,运行完成后退出拖入的可执行程序,完成内存统计;
-
常用方法可以通过【call stack Tree】或者【Tree Map】来查看有哪些内存泄漏
-
【call stack Tree】查看如下所示,略显麻烦;
- 点击【Allocations】按分配内存大小降序排序;
- 找到内存泄漏最大的依次打开,这里会一层层打开,比较麻烦;
- 如果程序有pdb符号表则打开到一定程度后会显示函数名称;
- 双击函数名称,在窗口右侧的【Stack trace】栏中可以看见调用堆栈;
- 如果堆栈有文件名、函数名等信息,双击对应行就可以在下方定位到内存泄漏位置。
-
使用【Tree Map】如下所示;
- 进入【Tree Map】页面后可以看见内存大小分布情况;
- 可以选中较大的内存泄漏块;
- 双击内存块后会在窗口右侧的【Stack trace】栏中可以看见调用堆栈;
- 如果堆栈有文件名、函数名等信息,双击对应行就可以在下方定位到内存泄漏位置。
4、相关地址🐐
- MTuner github主页
- MTuner下载
- 官方文档