VS2017使用Visual Leak Detector(VLD)查找内存泄露

  Visual C ++提供了内置的内存泄漏检测功能,但其功能较少,且只能知道是否有内存泄露,具体在那个cpp里的具体位置也很难知道。虽然也可以使用_CrtDumpMemoryLeaks()函数定位,但实际使用起来也很不方便。

VLD刚好可以很好的探测出内存泄露的具体位置,且使用方便。官方的描述为:

  • 为每个泄漏块提供完整的堆栈跟踪,包括源文件和行号信息(如果可用)。
  • 检测大多数(如果不是全部)进程内存泄漏类型,包括基于COM的泄漏和纯Win32堆泄漏。
  • 可以从泄漏检测中排除所选模块(DLL或甚至主EXE)。
  • 提供泄漏块的完整数据转储(十六进制和ASCII)。
  • 可自定义的内存泄漏报告:可以保存到文件或发送到调试器,并且可以包含可变级别的详细信息。

          VLD的最新版本为2.5.1,下载地址 VLD2.5.1。VS版本只支持到2015,使用起来有些不便。参考网上的内容,发现主要是VLD的“dbghelp”的版本问题。故:

一、下载、安装VLD(记住安装位置)

二、打开vs的任意项目--属性--VC++目录--包含目录:里面添加VLD安装目录的include文件夹

                                                              --库目录:添加VLD安装目录下的bin下文件夹的32或64

三、如果是没有预编译头,直接在main函数所在的cpp最前面加上#include

      若是有预编译头且是mfc程序,这最好在预编译头里#include 前加上#include

四、这个时候打开就能使用,发现会检测出泄露,但是没有具体位置,这个时候需要更新dbghelp.dll,具体方法为:将VS2017 的dbghelp放到VLD里

%programfiles(x86)%\Microsoft Visual Studio\2017\版本类型\Common7\IDE\CommonExtensions\Microsoft\TestWindow\Extensions\Cpp

32位、64位对应的复制替换掉VLD安装文件夹下的bin文件夹里的dbhelp.dll


这个时候如果代码路径里没有中文,应该就可以正常使用了。但是如果有中文的话可能会出现:无法显示Call Stack文,得不到具体泄露的位置的问题。解决方法为:编辑VLD安装目录下的配置文件vld.ini,将ReportEncoding = ascii改为ReportEncoding = unicode就可以了。

VS2017使用Visual Leak Detector(VLD)查找内存泄露_第1张图片

 

双击那一行就可以自动跳转。

你可能感兴趣的:(VC2017,VLD)