[√]vld的安装和使用

简介: [√]vld的安装和使用

vld

Visual Leak Detector是一款用于Visual C++的免费的内存泄露检测工具,Github显示该仓库已经停止维护了,它还有自己的github.io主页

vld安装

注意安装目录不能有空格、中文,后续加入头文件目录有这个限制。

安装完成后的目录结构,可以看到它是区分32、64位的

image.png

vld.ini

vld是有自己的配置文件vld.ini, 方便用户自定义化,虽然暴露的配置项不是太多。

当vld被项目加载时会打印log:

Visual Leak Detector read settings from: xxxxx

仓库的vld.cpp中有获取ini的逻辑,大致总结下查找vld.ini的顺序:

  • 从当前模块所在的目录查找
  • 从当前exe的运行目录查找
  • vld.dll所在的目录查找
  • 从注册表中查找(使用安装版本的vld有修改注册表) image.png

如果以上目录都没有找到,就会使用默认的配置。

在项目中使用

  1. 项目中引入lib、头文件所在的目录,如果你的程序是win32的,需要使用win32相关的lib,不能混用
  2. 在程序main入口文件引入文件 #include "vld.h"
  3. 运行程序,当程序退出后,vld就会自动打印内存泄露的详细信息,大致如下: ---------- Block 118694 at 0x001BAEB0: 8 bytes ---------- Leak Hash: 0x3A03EC15, Count: 1, Total 8 bytes Call Stack (TID 23792): ucrtbased.dll!malloc() D:\new_scalar.cpp (35): editor.exe!operator new() + 0x9 bytes C:\xmemory (79): editor.exe!std::_Default_allocate_traits::_Allocate() + 0x9 bytes

vld的依赖项libformat

在vld的项目属性中,linker/ input里面是找不到libformat的依赖的

image.png

但是在command line里面就出现了这个依赖

image.png

设置依赖的地方在这里:

image.png

应用程序无法正常启动(0xc0150002)

如果程序运行起来时,出现:

image.png

这是因为缺少依赖项导致的,以下2个文件也需要copy到正确的位置,特别是那个manifest文件

  • Microsoft.DTfW.DHL.manifest
  • dbghelp.dll

Microsoft.DTfW.DHL.manifest

Microsoft.DTfW.DHL.manifest 是一个用于描述模块依赖的 XML 文件,它是 Microsoft Debugging Tools for Windows 的一部分。此文件描述了 Microsoft 诊断技术框架(Diagnostics Technology Framework,DTF)和 Microsoft 调试帮助库(Debug Help Library,DHL)等模块之间的依赖关系。

在程序运行时,如果该程序需要用到 DTF 或 DHL 等相关模块的功能,系统会自动加载这些模块,并根据 Microsoft.DTfW.DHL.manifest 中所描述的依赖关系来进行初始化。

因此,在部署和维护程序时,确保正确引用 Microsoft.DTfW.DHL.manifest 及其它依赖文件,可以帮助程序正确地加载和使用相关模块,从而更好地实现程序的调试和诊断功能。

使用体验

vld的内存泄露检测还是非常强悍的,基本上是非常精准,而且零误报,不过使用过程中还有一些不足的地方:

  • 单例类型的内存,如果程序退出时不主动清理,vld也会认为是内存泄露,不过懒人一般都是把这部分内存交给操作系统清理了,毕竟这部分的内存对程序的运行可以不认为是内存泄露。
  • 即使是同一处代码导致的内存泄露,每一次的内存泄露都是单独的一次打印,打印信息没有合并,导致查看起来非常麻烦。
  • 部分内存泄露无法统计到堆栈,只给出了地址,这对于排查修复没有任何帮助。
  • 内存泄露统计过于详细,cocos2dx随便跑一下,就给出了几百处内存泄露的地方,里面有重复的地方,但是大部分都是几个字节的泄露,甚至字符串常量也会被统计进去。
目录
相关文章
|
Linux iOS开发 UED
探索Qt折线图之美:一次详尽的多角度解析
探索Qt折线图之美:一次详尽的多角度解析
2548 0
|
存储 设计模式 编译器
【C/C++ 虚函数以及替代方案】C++ 虚函数的使用开销以及替代方案(一)
【C/C++ 虚函数以及替代方案】C++ 虚函数的使用开销以及替代方案
796 0
|
弹性计算 固态存储 大数据
2024阿里云服务器租用价格表(一年/按月/按小时报价明细)
阿里云服务器2024年最新租用价格表显示,轻量应用服务器2核2G3M带宽一年82元(约6.8元/月),2核4G4M带宽轻量服务器一年298元。新老用户共享99元一年的2核2G3M带宽ECS经济型e实例服务器与199元一年的企业专享2核4G5M带宽ECS u1实例服务器优惠。4核16G10M带宽游戏服务器70元/月,8核32G10M带宽160元/月。GPU服务器如gn6v和gn6i等提供新用户专享折扣。续费折扣方面,续费一年享有7.5折,续费五年则有3折优惠。按小时计费的云服务器ECS实例中,如ecs.u1-c1m4.large(2核8G)每小时0.45元。
31970 17
VS代码对齐工具使用教程
本文是关于VS代码对齐工具的使用教程,包括工具下载、使用文档、使用实例和对齐结果展示。文章介绍了如何使用该工具进行字符串对齐,提供了快捷键操作和正则表达式对齐方法,并展示了对齐前后的代码对比。
774 0
VS代码对齐工具使用教程
|
Shell C++ Windows
[√]尝试使用cmake编译使用vld
[√]尝试使用cmake编译使用vld
304 0
|
Rust Shell 索引
使用阿里云镜像加速Rust与Cargo安装及更新
使用阿里云镜像加速Rust与Cargo安装及更新
11655 2
|
人工智能 图形学
【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏1(附项目源码)
【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏1(附项目源码)
393 0
VC++/Qt Creator内存泄漏检测方法(1):_CrtSetDbgFlag与_CrtDumpMemoryLeaks
VC++/Qt Creator内存泄漏检测方法(1):_CrtSetDbgFlag与_CrtDumpMemoryLeaks
2372 0
|
缓存 网络协议 算法
深入理解Linux网络——TCP协议三次握手和四次挥手详细流程
• 找到套接字:创建内核对象的时候,fd会跟file对象做通过fd_install关联起来,通过进程的fd_table就可以找到对应的file,而file的private指针就指向了socket对象,所以根据fd即可找到套接字 • 判断当前套接字的状态:只有SS_UNCONNECTED状态(刚创建的套接字就是该状态)才会继续,其他状态都会报错 1. 注意此处是socket的状态,而不是sock的状态 2. 会将socket状态更改为SS_CONNECTING • 更改sock状态为TCP_SYN_SENT
|
vr&ar 开发工具 图形学
Unity引擎更新收费模式:从收入分成转向游戏安装量,将会有哪些影响呢
Unity引擎更新收费模式:从收入分成转向游戏安装量,将会有哪些影响呢