VLD内存泄漏检测工具

2020-05-14 20:20:18 浏览数 (1)

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

注:「仅支持Windows平台。」

0x01 下载安装

  • 从VLD项目维护者的github下载exe执行文件,Qt君下载的是2.5.1版本。下载地址:
代码语言:javascript复制
https://github.com/KindDragon/vld/releases
  • 安装VLD工具。
  • 选择默认路径,一直默认选择即可。

0x02 使用

  • 找到VLD安装目录下复制以下三个文件夹到项目文件中,并在项目中引用头文件和库文件:
  • Qt君创建一个普通的Qt项目,其目录结构为:
代码语言:javascript复制
C:usersLeakDetectorDemo
└─ThirdPart
    └─vld-2.5.1
        ├─bin
        │  ├─Win32
        │  └─Win64
        ├─include
        └─lib
            ├─Win32
            └─Win64
  • 项目文件添加以下代码:
代码语言:javascript复制
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 如何查找内存泄漏点

  • 例子代码:
代码语言:javascript复制
#include <vld.h>

int main(int argc, char *argv[])
{
    int *a = new int(10); /* 模拟内存泄漏点 */
    return 0;
}
  • 调试模式运行后输出(省略了无关信息):
代码语言:javascript复制
main.cpp (5): LeakDetectorDemo.exe!main()   0xA bytes
Visual Leak Detector detected 1 memory leak (56 bytes).

「可以看到提示了一个内存泄漏点,在main.cpp的第五行。」

  • 修正后的代码:
代码语言:javascript复制
#include <vld.h>

int main(int argc, char *argv[])
{
    int *a = new int(10);
    delete a;
    return 0;
}
  • 运行完成后输出(省略了无关信息):
代码语言:javascript复制
No memory leaks detected.

0x04 关于更多

  • 项目网站:
代码语言:javascript复制
https://github.com/KindDragon/vld
  • 详细使用文档:
代码语言:javascript复制
https://github.com/KindDragon/vld/wiki

0 人点赞