Windows系統中記憶體洩露與檢測工具及方法
寫C/C++,經常碰到記憶體洩漏,同事發給我的查詢方法,試過有效,記錄一下。
1.檢測需要使用的工具:windbg工具。
檢測前,需要先安裝windbg工具。安裝了該工具後,會在安裝目錄下有一個umdh工具。
假設windbg安裝在以下目錄下:D:\Program Files\Debugging Tools for Windows (x86)
2.記憶體洩露檢測技巧
2.1 執行cmd視窗,將路徑設定到安裝路徑下;
2.2 在該cmd視窗中設定環境變數_NT_SYMBOL_PATH:
D:\Program Files\Debugging Tools for Windows (x86)>set _NT_SYMBOL_PATH="%windir%\symbols";D:\AppPath; //說明:AppPath為應用程式絕對路徑
2.3 在該cmd視窗中設定標籤flags:
D:\Program Files\Debugging Tools for Windows (x86)>gflags -i appname.exe +ust
2.4 啟動應用程式appname.exe;
2.5 儲存appname.exe的當前狀態:
D:\Program Files\Debugging Tools for Windows (x86)>umdh.exe -pn:appname.exe -f:FirstDump.txt
2.6 間隔一段時間後,繼續儲存appname.exe的當前狀態:
D:\Program Files\Debugging Tools for Windows (x86)>umdh.exe -pn:appname.exe -f:SecondDump.txt
2.7 使用umdh.exe工具比較兩個dump檔案:
D:\Program Files\Debugging Tools for Windows (x86)>umdh.exe FirstDump.txt SecondDump.txt -f:Result.txt
2.8 最後,通過開啟result.exe檔案,就可以看到裡面顯示了程式碼行中的那個語句出現了記憶體洩露。