比如说,我现在正在使用 Visual Leak Detector (VLD) 来检查我们的服务应用程序中的内存泄漏。而且,由于大量内存分配发生在静态对象中,所以我只是想知道,VLD 可以排除那些误报内存泄漏(它不应该被视为真正的内存泄漏)
非常感激
比如说,我现在正在使用 Visual Leak Detector (VLD) 来检查我们的服务应用程序中的内存泄漏。而且,由于大量内存分配发生在静态对象中,所以我只是想知道,VLD 可以排除那些误报内存泄漏(它不应该被视为真正的内存泄漏)
非常感激
经过一番调查,我发现这个 VLD 无法排除那些误报内存泄漏(例如静态对象中的 new),因为它还在其 vld.dll 中使用了全局静态对象,并且其 dtor 将报告可能的内存泄漏。由于您无法确保它们的析构函数顺序,因此您无法使用 VLD 来检测静态对象中的内存泄漏。
但是,我还找到了一个绕过解决方案,因为您可以修改此工具的源代码,您可以使用 atexit 在您的 ctor 中注册 reportMemoryLeak 函数,以确保在 dtor 之后调用此方法。
坦率地说,这真的不是那么直接,所以看看这个 http://cfc.kizzx2.com/index.php/detecting-memory-leaks-with-windbg-the-modern-and-free-way/ 使用windbg+DebugCRT堆没问题!