我是一個大型商業程序的開發人員,我試圖追查一個特定的C++內存泄漏。我想使用Visual Studio來搜索我的進程的整個有效地址空間,但我看不到如何有效地執行此搜索。如何從Visual Studio調試器執行所有進程內存的高級搜索?
我知道了.S命令文檔here的,但它沒有做什麼,我需要。例如,我100%肯定地址0xfdfd240包含值0x0f0e34a8。我可以成功地使用.S命令像這樣的地址附近搜索:
.s -d 0x0fdfd200 L256000000 0x0f0e34a8
Found match at
0xfdfd240
但我的計劃已經已經給我留下的記憶很多小非contiguious部分很多小的撥款。如果我背了幾千字節的搜索命令失敗:
.s -d 0x0fd00000 L256000000 0x0f0e34a8
Memory location could not be read. Please specify a valid memory location.
而且它也出現了搜索命令不會嘗試向前搜索任何更多的時候發現它的第一個錯誤的地址,即使有有效超越它的地址。
.s -d 0x0f000000 L256000000 0x0f0e34a8
No match was found
我隱約地感到有一種方式來問窗口什麼內存範圍是適用於一個給定的過程,所以我考慮寫一個小程序一次性收穫的信息,然後自動執行一系列的搜索命令到立即窗口...但似乎有人必須已經處理過這個,並且一定做了更聰明的事情。
另外,我可以提取正在運行的進程的轉儲文件,因此,如果任何人都可以推薦第三方工具來養活轉儲到具有應當制定以及強大的搜索功能。
有什麼建議嗎?
編輯:我在VS2008SP1和VS2010SP1中看到了這種行爲。
看到非明顯的內存泄漏,你需要購買像淨化內存泄漏分析程序。 – 2011-03-31 01:47:09