使用AppVerifier进行内存泄漏跟踪

时间:2011-02-22 12:36:37

标签: c++ memory-leaks

我有一个C ++应用程序,它有一些最小的泄漏,我想修复它们。我正在使用AppVerifier来转储泄漏的对象,我可以获取已分配内存的地址和前几个字节。

不幸的是,那些第一个字节和原始地址不足以精确定位分配堆栈跟踪,是否有方法可以获得完整的分配数据转储,并找到分配内存的堆栈?

我可以通过泄漏号码输入_ CrtSetBreakAlloc,但不幸的是它是一个线程应用程序,这些数字上下浮动。

有没有人有我可以尝试的建议?

2 个答案:

答案 0 :(得分:3)

使用gflags实用程序,您可以启用存储调用堆栈信息(gflags + ust)。但是,您的应用程序现在运行速度会变慢并占用更多内存。

侧面评论:说实话,我从来没有得到所有这些Microsoft实用程序(C-RunTime,Gflags,UMDH,AppVerifier,LeakDiag中的泄漏跟踪)来完全按照我的意愿行事。最后,我只是编写了自己的内存分配器,在其中我可以添加我想要的任何跟踪(调用堆栈,红区标记,延迟释放,一致性检查......)。

答案 1 :(得分:1)

您可以尝试使用UMDH来跟踪内存泄漏。首先必须使用GFlags在分配内存时打开存储调用堆栈跟踪。关于UMDH的文档说明了如何使用它。

但最近我终于尝试了视觉检漏仪,它在我的怪异大应用程序上运行得非常棒。 http://vld.codeplex.com