Visual Leak Detector(vld)无法显示内存泄露文件名与行号

需要注意的是,由于该软件是个开源的工具,并不是成熟的商业产品,所以易用性并不是很好,有一些小问题,还是需要我们自己来动手解决的。以下是我遇到的问题和解决方法:


1、F5 运行程序后,提示"无法定位程序输入点 ???? 于动态链接库 dbghelp.dll 上"


   解决方法:查看[输出]窗口,看看加载的是哪个目录下的 dbghelp.dll 。
             如果发现 “???.exe”: 已加载“C:/WINDOWS/system32/dbghelp.dll” 之类的内容
             那么问题出在这里,程序自动加载了系统目录下的dbghelp.dll ,
             而没有加载 VLD 的dbghelp.dll。
             解决方法:(1)删除系统目录下的dbghelp.dll 或暂时改名。(2)或者把 VLD 安装路径下的 dbghelp.dll拷贝到你的程序的Debug文件夹里。
             总之,只要能够让程序加载VLD的dbghelp.dll就行了。考虑到一般不要动系统目录里的东西,建议采用方法(2)。
             采用方法(2)时,不要把 vld_x86.dll 拷贝到Debug目录下,如果拷了,会使程序堆栈溢出,崩溃。
         
         注:如果vld_x86.dll也不能正常加载,说明没有设置环境变量,重新安装VLD,并且在安装程序询问是否设置环境变量时,选[Yes]
             
2、检测出泄露时,无法显示泄露的位置,无法定位到CPP文件和代码行。并且有大量误报。


   例如:Call Stack:
      0x0041907C (File and line number not available): (Function name unavailable)
  
   解决方法:该问题的起因是VLD没能找到.PDB文件,导致产生误报、无法定位代码位置。要解决该问题,就要从怎么让VLD找到.PDB文件入手
        (1)确保VC工程文件所在的目录路径不含中文字符、双字节字符。(VLD对中文路径支持不了)
        (2)查看是否正常生成了.pdb文件。
        (3)如果前2条都没问题却还是显示File and line number not available,那么请确认运行目录(是运行目录不是工作目录)下是否有最新的dbghelp.dll,之前我就是使用了系统自带的dbghelp.dll导致无法显示文件和行名,所以多换几个dbghelp.dll试一下。

你可能感兴趣的:(Visual Leak Detector(vld)无法显示内存泄露文件名与行号)