与 crtdbg 相比,Visual Leak Detector 不打印任何泄漏

Posted

技术标签:

【中文标题】与 crtdbg 相比,Visual Leak Detector 不打印任何泄漏【英文标题】:Visual Leak Detector does not print any leak compared to crtdbg 【发布时间】:2016-08-17 10:28:11 【问题描述】:

我已经为这个问题搜索了很多,但仍然可以找到解决方案。

我最近下载了 VLD 2.5 并从头开始编译它,适用于 Visual Studio 2013 和 2015。在我的项目中使用它之前,我以为我运行了包提供的测试。但是所有的测试都失败了。

所有测试套件的行为相同,报告于 https://vld.codeplex.com/workitem/10617

MFC-Test 应用程序输出以下内容:

这里的重点是:CRT 检测到泄漏,应用程序分配的 CString 对象,VLD 没有。

我错过了什么?

【问题讨论】:

它可能是在程序初始化时分配的数据,并且具有整个程序的生命周期,在 CRTDBG 打印其输出后释放。 IE。误报。 VLD 可能稍后有它的钩子,因此会看到发布,或者它可能知道这种特殊情况而不报告它? 不,“可能”是个问题,但可以肯定的是,new 是在 VLD 初始化之后完成的。 VLD修补了crt的所有入口点,我早上已经调试过了。但问题是,空闲块不计算在内。这看起来像是 VLD 中的问题,但我不知道在哪里。 你能提供一个minimal reproducible example吗?这将有助于其他可能想要重现您的问题的人。 直接使用源码编译vldmfc 添加:分配的块图为空,应用程序不收集任何堆信息。 【参考方案1】:

找到了解决方案。全局标志是永久设置的。如果出现此类错误,您需要重置它们。

查看HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager 并将GlobalFlag 重置为0(或使用gflags.exe)。

干杯, 路易斯。

【讨论】:

以上是关于与 crtdbg 相比,Visual Leak Detector 不打印任何泄漏的主要内容,如果未能解决你的问题,请参考以下文章

Visual Leak Detector 2 2 3 Visual C++内存检测工具

造轮子:新建一个属于自己的String类

关于Visual Leak Detector的配置与使用 (测试vector 引起的内存泄漏问题)

在VS2017中配置VLD(Visual Leak Detector)内存泄漏检测工具

Visual Leak Detector配置项 VLD

Visual Leak Detector使用注意事项