VLD内存泄漏检测工具

VLD内存工具可以为每个泄漏的块提供完整的堆栈跟踪,包括源文件和行号信息,从而快速找到内存泄漏点。

C++【概述】【环境设置】及入门hello world

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

作者:

喜欢围棋和编程。

 
发布于 分类 编程标签

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注