c++ - 运行单元测试时的内存泄漏检测

标签 c++ winapi memory-leaks

我有一个带有一套单元测试的 Win32 C++ 应用程序。单元测试完成运行后,我希望自动生成关于任何未释放内存的人类可读报告。理想情况下,该报告将有一个堆栈,其中包含每个未释放分配的文件和行号信息。最好以一致的顺序生成它们,以便轻松区分一次运行和下一次运行。 (基本上,我想要 valgrind --leak-check=full 的结果,但在 Windows 上)。

我已经成功地使用 UMDH 从正在运行的进程中获取此类信息,但该工具似乎只有在您附加到现有进程时才有效。我希望每次运行单元测试时都自动发生这种情况。

有没有工具可以做到这一点?如果是这样,我该如何使用它?

谢谢!

最佳答案

为了获得此类信息,我们覆盖了 new/delete 和 malloc/free,提供了我们自己的堆实现,在分配时存储堆栈跟踪并在堆被销毁时生成报告(以及添加哨兵来检测缓冲区溢出) .

这是您第一次做的相当多的工作。 This guy已经编写了一个可以处理所有难点的免费软件工具 - 我自己还没有尝试过,但是他对他如何编写它的解释在你自己动手时很有用。

关于c++ - 运行单元测试时的内存泄漏检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/169058/

相关文章:

c++ - libc++ is_copy_constructible 对我来说似乎是错误的

c++ - RegSetValueEx 线程安全吗?

c - C哈希表实现中的内存泄漏

c++ - 为了学习 C++,我需要一种在 Mac 英特尔上编译 C++ 代码的简单方法。我

c++ - 如何删除正在运行程序的 Win32 桌面,并终止这些程序?

objective-c - Mac OS X 上的 HRGN 等效项

使用 FindFirstFile/FindNextFile 删除文件夹中所有文件的 C++ 代码

java - 您可以在诺基亚手机 (N80/N95) 上使用 Java Midlet 录制音频而 JVM 不会泄漏内存吗?

Java VisualVM 内存采样器 - 如何获取特定类的大小

c++ - Xcode 找不到#Include<> header