2011-06-10 24 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,並發現它的工作方式太麻煩。