我有一个32位的msvc++应用程序运行在一个内存泄漏的生产环境中。它基本上会运行几个小时,直到它耗尽所有3 gb的可寻址内存并终止。
我在想,如果有一种方法可以挂起一个进程并将它的内存转储到磁盘上,我可以分析内存,看看它泄漏的内容是否有任何模式。
我甚至不确定这是否可能。我只是把科学扔到墙上,看看什么能坚持下去。
如果您能提供一些意见,我们将不胜感激。
发布于 2011-06-11 08:38:11
这是非常简单的,只要你确信你有一些方法可以通过分析进程堆来找到有用的东西。所涉及的工具都是免费的,说明在这里:Dump Files
也就是说,如果你可以运行一段时间的调试构建,CRT会为你做所有的工作。请参阅Finding Memory Leaks Using the CRT Library
发布于 2011-06-11 10:14:08
对于真正快速的方法,Purify或DevPartner Studio通常会将您指向泄漏,并向您显示从它被分配到它被泄漏的地方的轨迹。它还会暴露出相当多的其他错误。
如果你有时间的话,使用CRT内置的工具是很好的。这些工具是要花钱的,所以我想你应该权衡一下用CRT内存转储来追踪它们所花费的时间成本和许可证的成本。
在做Windows dev时,这有助于快速找到许多泄漏的根源。我更喜欢DevPartner而不是Purify,但可能是因为我只在Linux下使用过Purify,并且发现它的工作方式太麻烦了。
https://stackoverflow.com/questions/6312983
复制相似问题