与 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++内存检测工具
关于Visual Leak Detector的配置与使用 (测试vector 引起的内存泄漏问题)