❝VLD内存工具可以为每个泄漏的块提供完整的堆栈跟踪,包括源文件和行号信息,从而快速找到内存泄漏点。 ❞
注:「仅支持Windows平台。」
0x01 下载安装
- 从VLD项目维护者的github下载exe执行文件,Qt君下载的是2.5.1版本。下载地址:
https://github.com/KindDragon/vld/releases
- 安装VLD工具。
- 选择默认路径,一直默认选择即可。
0x02 使用
- 找到VLD安装目录下复制以下三个文件夹到项目文件中,并在项目中引用头文件和库文件:
- Qt君创建一个普通的Qt项目,其目录结构为:
C:usersLeakDetectorDemo
└─ThirdPart
└─vld-2.5.1
├─bin
│ ├─Win32
│ └─Win64
├─include
└─lib
├─Win32
└─Win64
- 项目文件添加以下代码:
win32 {
CONFIG(debug, debug|release) {
vld_path = $$PWD/ThirdPart/vld-2.5.1
!contains(QMAKE_HOST.arch, x86_64) {
message("x86_32 build")
LIBS = -L$$vld_path/lib/Win32
}
else {
message("x86_64 build")
LIBS = -L$$vld_path/lib/Win64
}
INCLUDEPATH = $$vld_path/include
LIBS = -lvld
}
}
在main.cpp中添加#include <vld.h>
后以调试模式运行即可检测内存泄漏。
0x03 如何查找内存泄漏点
- 例子代码:
#include <vld.h>
int main(int argc, char *argv[])
{
int *a = new int(10); /* 模拟内存泄漏点 */
return 0;
}
- 调试模式运行后输出(省略了无关信息):
main.cpp (5): LeakDetectorDemo.exe!main() 0xA bytes
Visual Leak Detector detected 1 memory leak (56 bytes).
「可以看到提示了一个内存泄漏点,在main.cpp的第五行。」
- 修正后的代码:
#include <vld.h>
int main(int argc, char *argv[])
{
int *a = new int(10);
delete a;
return 0;
}
- 运行完成后输出(省略了无关信息):
No memory leaks detected.
0x04 关于更多
- 项目网站:
https://github.com/KindDragon/vld
- 详细使用文档:
https://github.com/KindDragon/vld/wiki