2011-06-10 63 views
0

我有一个运行在泄漏内存的生产环境中的32位msvC++应用程序。它基本上会运行几个小时,直到消耗所有3 GB可寻址内存并终止。将进程内存转储到磁盘以分析内存泄漏

我在想,如果有办法暂停进程并将其内存转储到磁盘,我可以分析内存以查看是否有任何泄漏模式。

不知道这是否可能。我只是把科学扔在墙上,看到什么坚持。

一些输入将不胜感激。

+1

您是否无法在调试配置中运行它? – 2011-06-10 23:23:44

+0

可能,但我宁愿运行生产exe文件,以避免引入更多变量。 – feathj 2011-06-11 00:16:37

回答

2

只要您确信自己有一些方法可以通过分析过程的堆找到有用的东西,这非常简单。所涉及的工具都是免费的,说明现在的位置:Dump Files

也就是说,如果你可以只运行一个调试建立了一会儿,CRT将尽一切你的工作。请参阅Finding Memory Leaks Using the CRT Library

+0

“用户模式进程转储”正是我所需要的。谢谢!当我回去工作时,我会给它一个镜头。 http://www.microsoft.com/downloads/en/details.aspx?FamilyID=e089ca41-6a87-40c8-bf69-28ac08570b7e – feathj 2011-06-11 02:35:44

0

对于非常快速的方法,Purify或DevPartner Studio通常会指出您正确的泄漏情况,并向您显示从泄漏位置分配的位置。它也会暴露其他一些错误。

如果您有时间使用内置CRT工具,那么使用CRT就没有问题。这些工具需要花钱,所以我想你要权衡使用许可证成本跟踪CRT内存转储所花费的时间。

在进行Windows开发时,这有助于快速找到许多泄漏的底部。我更喜欢DevPartner而不是Purify,但可能是因为我只在Linux下使用了Purify,并发现它的工作方式太麻烦。