Visual Leak Detector(以下简称:VLD) 是一个著名的 C/C++ 程序内存泄漏检测插件,而且还是免费且开源的。自从几年前发现了它,我一直用它直到现在。然而,现在最新版本的 VLD v2.5.1 官方并不支持 Visual Studio 2017,只支持 Visual Studio 2008 到 Visual Studio 2015。
真的不支持 Visual Studio 2017 吗?其实并非如此。在本文中我们就来试一试。
软件环境
Visual Studio 2017 (安装了 C/C++ 开发组件)
Visual Leak Detector v2.5.1
安装并配置 VLD
目前 VLD 的源代码及安装文件托管在 codeplex.com 上。地址为:https://vld.codeplex.com
下载最新版本(v2.5.1)的安装文件,安装。
我的安装路径为:D:\Apps\x86\Visual_Leak_Detector
你要记住你自己的安装路径,这个路径一会儿我们要用到的。
在 VLD 官方网站上查看帮助文档的“Using Visual Leak Detector”部分。
按照这个说明,用 Visual Studio 2017 打来任意一个 C/C++ 工程,然后找到 View ->Property Manager | Microsoft.Cpp.Win32.user
在 VC++ Directories | Include files 中,增加以下路径并将其移到最底端(读者请自行将以下路径替换为你实际的路径):
D:\Apps\x86\Visual_Leak_Detector\include
在 Library files 中,增加以下路径并将其移到最底端(读者请自行将以下路径替换为你实际的路径):
D:\Apps\x86\Visual_Leak_Detector\lib\Win32
找到 View ->Property Manager | Microsoft.Cpp.Win64.user
在 VC++ Directories | Include files 中,增加以下路径并将其移到最底端(读者请自行将以下路径替换为你实际的路径):
D:\Apps\x86\Visual_Leak_Detector\include
在 Library files 中,增加以下路径并将其移到最底端(读者请自行将以下路径替换为你实际的路径):
D:\Apps\x86\Visual_Leak_Detector\lib\Win64
使用 VLD
我们在 C/C++ 工程文件的任意一个 C/C++ 源文件中,添加 vld.h 这个头文件的引用:
#include <vld.h>
因为这个程序并没有内存泄漏,所以我们以 Debug 模式运行该程序,在 output 窗口中可以看到“没有发现内存泄漏”的输出结果:
现在我们手动制造一个内存泄漏。在 main() 的后面,添加这样一行代码,申请指针的内存空间但并不释放它:
char* p = new char[13];
再以 Debug 模式运行该程序,在 output 窗口中可以看到内存泄漏信息:
虽然能看到内存泄漏信息,然而这个信息的显示并不友好。这就是官方网站说依然不能支持 Visual Studio 2017 的原因。但是其实,这个问题是可以解决的。下面我们就来解决它。
解决问题
我的 Visual Studio 2017 的安装路径为:
%programfiles(x86)%\Microsoft Visual Studio\2017\Community\
读者注意后面换成你自己的安装路径。
从以下目录中:
%programfiles(x86)%\Microsoft Visual Studio\2017\Community\Common7\IDE\CommonExtensions\Microsoft\TestWindow\Extensions\CppUnitFramework
拷贝(覆盖) \dbghelp.dll 到 D:\Apps\x86\Visual_Leak_Detector\bin\Win32
拷贝(覆盖) \x64\dbghelp.dll 到 D:\Apps\x86\Visual_Leak_Detector\bin\Win64
再以 Debug 模式运行该程序,在 output 窗口中可以看到内存泄漏信息:
这回看到的内存泄漏信息就是友好的。
这样就可以宣称 VLD 支持了 Visual Studio 2017。
再来一例。注意内存泄漏信息里面显示出内存填充的内容: