Visual Leak Detector 在 VS 与 VC6.0 中使用总结
官网 VS 新官网
官网为原作者发布的网站,最新版本为1.9d,但包含已编译后的版本。1.0版本可用于vc6.0中。
新官网为后续维护者的网站,源码在github上,对vs2008&vs2010-vs2015支持较好。
VS中使用
注意:使用新官网中最新版本
直接安装vld-2.5.1-setup.exe,默认集成至vs中
2. 默认安装路径
C:\Program Files (x86)\Visual Leak Detector
代码中引入 #include<vld.h>
#include "stdafx.h" #include<vld.h> //头文件 #include<stdlib.h> #include<stdio.h> char* f() { char *p = new char; return p; } int main() { for (int i = 0; i < 100; i++) char *pBuf = f(); return 0; }复制代码
dbghelp.dll 及 vld.ini 拷贝至 .exe同级目录下
vld.ini配置文件路径:C:\Program Files (x86)\Visual Leak Detector\vld.ini
dbghelp.dll配置文件路径:C:\Program Files (x86)\Visual Leak Detector\bin
vld.ini 的几项配置说明:
VLD:选择VLD的打开与关闭。在Debug模式下运行,关闭以后会有一行VLD关闭的提示信息。默认为 on。
AggregateDuplicates:设置为 yes 时,相同地方产生内存泄漏只输出一次,但是会统计发生的次数。默认是 no 。
MaxDataDump:输出的dump数据个数,默认为 256。
MaxTraceFrames:输出的调用栈的层数。默认是 64。
ReportEncoding :report 文件的编码格式,可选有 ascii, unicode,默认是 ascii 。
ReportFile :report 文件的路径。默认是 “.\memory_leak_report.txt”
ReportTo :可选有 debugger, file, both,debugger 表示输出到 debug模式下的输出窗口;file 表示只输出到文件中; both顾名思义,全都都输出。默认是 debugger 。
Debug下运行调试,在输出界面看到vld的内存检测信息
在输出文件中查看vld的内存检测信息
解决内存检测信息中无具体文件及行号提示
1)英文目录;
2)链接中调试文件生成模式;
3)将vld安装目录中的dbghelp.dll文件拷贝至.exe同级目录下;
参考
1)vs中使用vld
VS内存泄漏工具Visual Leak Detector2.5.1安装与使用 - 云+社区 - 腾讯云 (tencent.com)
Visual Leak Detector(VLD)的使用_change_n的专栏-CSDN博客
2)vs中无法显示具体文件&行号的解决办法
在Visual Studio 2017使用Visual Leak Detector(vld)不显示行号的设置_kelvin_feng的专栏-CSDN博客
vld内存泄漏检查工具不能显示内存泄漏文件名与行号_flyky的专栏-程序员宝宝 - 程序员宝宝 (cxybb.com)
Visual Leak Detector(vld)无法显示内存泄露文件名与行号_mikasoi的博客-CSDN博客
Visual Leak Detector(vld)无法显示内存泄露文件名与行号 | 学步园 (xuebuyuan.com)
Visual Leak Detector(vld)无法显示内存泄露行号_总是天天说昨天的博客-CSDN博客
VC6.0中使用
注意:
1)使用1.0版本,可在原官网中下载。使用新官网最新版本无法定位文件名及行号;
2)使用1.0版本无法检测引用dll中的内存情况,需使用官网1.9d版本;
1.0中文件内容
2. vc6.0中分别设置include及lib目录
备注:
一劳永逸的办法:(不用配置include及lib路径)
1)将lib文件全部拷贝到VC 6.0 或者是VS的目录下,一般的,VC6.0的lib的目录在:C:\Program Files\Microsoft Visual Studio\VC98\Lib
2)拷贝头文件(.h)文件到vc的include目录下,VC 6.0的Include目录在:C:\Program Files\Microsoft Visual Studio\VC98\Include
vc代码中使用
#include "stdafx.h" #include<vld.h> //头 #include<vldapi.h> //头 int main(int argc, char* argv[]) { int* a = new int(); printf("Hello World!\n"); return 0; }复制代码
dbghelp.dll 及 vld.ini 拷贝至 .exe同级目录下,并配置vld.ini文件
Debug下运行调试,在调试界面看到vld的内存检测信息
在输出文件中查看vld的内存检测信息
解决内存检测信息中无具体文件及行号提示
1)项目在纯英文路径;
2)使用1.0版本(已实测);
3)拷贝配套的dbghelp.dll至.exe同级目录;
参考
1)使用
Visual Leak Detector简明使用教程 - 车臣 - 博客园 (cnblogs.com)
备注:检测dll中的内存情况,使用高版本1.9d
1)手动引入inlcude与lib路径;
2)包含头#include <vld.h>;
3)vld.dll与dbghelp.dll拷贝至.exe统计目录;
作者:菜鸟谢
链接:https://juejin.cn/post/7028382325872263198