辛亚平的博客 Technology blog

Visual Leak Detector on Visual C++ 2017

2017-08-01
辛亚平

Visual Leak Detector(以下简称:VLD) 是一个著名的 C/C++ 程序内存泄漏检测插件,而且还是免费且开源的。自从几年前发现了它,我一直用它直到现在。然而,现在最新版本的 VLD v2.5.1 官方并不支持 Visual Studio 2017,只支持 Visual Studio 2008 到 Visual Studio 2015。

真的不支持 Visual Studio 2017 吗?其实并非如此。在本文中我们就来试一试。

VLD Logo

软件环境

Visual Studio 2017 (安装了 C/C++ 开发组件)

Visual Leak Detector v2.5.1

安装并配置 VLD

目前 VLD 的源代码及安装文件托管在 codeplex.com 上。地址为:https://vld.codeplex.com

下载最新版本(v2.5.1)的安装文件,安装。

Using Visual Leak Detector

我的安装路径为:D:\Apps\x86\Visual_Leak_Detector

你要记住你自己的安装路径,这个路径一会儿我们要用到的。

在 VLD 官方网站上查看帮助文档的“Using Visual Leak Detector”部分。

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。

再来一例。注意内存泄漏信息里面显示出内存填充的内容:

参考文章


Similar Posts

Comments