我有一个在生产环境中运行的32位msvc ++应用程序正在泄漏内存。它基本上会运行几个小时,直到消耗掉所有3 gb的可寻址内存并终止。
我在想如果有一种方法可以暂停进程并将其内存转储到磁盘,我可以分析内存以查看它是否有任何模式泄漏。
不确定这是否可行。我只是把科学扔在墙上看到了什么棒。
非常感谢一些意见。
答案 0 :(得分:2)
只要你有信心通过分析进程的堆来找到有用的东西,这是非常简单的。所涉及的工具都是免费的,说明如下:Dump Files
也就是说,如果您可以暂时运行调试版本,CRT将为您完成全部工作。见Finding Memory Leaks Using the CRT Library
答案 1 :(得分:0)
对于非常快速的方式,Purify或DevPartner Studio通常会指向您正确的泄漏,并向您显示从分配到泄漏位置的跟踪。它也会暴露其他一些错误。
如果你有时间,可以使用CRT内置工具。这些工具需要花钱,所以我认为你需要花费时间来跟踪CRT内存转储以及许可证的成本。
在做Windows开发时,这有助于快速解决许多漏洞的问题。我更喜欢DevPartner而不是Purify,但可能是因为我在Linux下只使用了Purify并且发现它的工作方式太麻烦了。