https://kinddragon.github.io/vld/
注:「仅支持Windows平台。」
0x01 下载安装
- 从VLD项目维护者的github下载exe执行文件,Qt君下载的是2.5.1版本。下载地址:
https://github.com/KindDragon/vld/releases
- 安装VLD工具。
- 选择默认路径,一直默认选择即可。
0x02 使用
- 找到VLD安装目录下复制以下三个文件夹到项目文件中,并在项目中引用头文件和库文件:
VLD内存泄漏检测工具
- Qt君创建一个普通的Qt项目,其目录结构为:
C:\users\LeakDetectorDemo └─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