2011年11月11日 星期五

[VC] 使用VLD偵測Memory Leak

記憶體的宣告與釋放是許多Visual C++開發人員相當頭痛的部分
常常不小心宣告了記憶體忘記釋放
造成程式不穩定, 程式無法正確執行
或是系統資源越吃越多, 狀況嚴重時甚至整個系統會卡住!!
市面上有許多幫助開發人員偵測Memory Leak的工具
例如Rational Purify, BoundersChecker...等, 但是價格都不斐
這邊要介紹的是一個免費Memory Leak偵測工具VLD (VisualLeak Detector)
它與其說是個工具、反倒比較像是個給開發人員用的Library
對程式開發人員來說, 不用搞懂複雜的Purify或BoundersChecker操作
很容易便可以將記憶體偵測的功能加入程式碼中
以中小型程式開發而言, 用VLD已經綽綽有餘囉. :-)

以下是VLD的安裝與使用說明

VLD版本:  2.2版
官方網站:  http://vld.codeplex.com/

下載網址:  http://vld.codeplex.com/releases/view/70398

  • 點選VLD的Setup開始安裝, 這邊安裝的是2.2版


  • VLD預設會安裝到Program Files下面

  • 安裝中, VLD安裝包會詢問您是否將vld的dll路徑加入系統環境變數, 點選Yes讓它加入

  • 裝好了, 安裝很容易. :-)

  • 再來開啟您的專案, 在VC的專案屬性中加入VLD include的路徑

  • 加入library inlcude的路徑, 因為我的作業系統是32位元, 所以加入Win32的library路徑. 如果您的作業系統是64位元, 請將Library路徑改成Win64

  • 在想要偵測Memory Leak的cpp檔include vld.h。如果想偵測整支程式的話, 可以在主視窗或是APP的cpp檔中include vld.h


  • OK, 來測試一下。
    故意在OnInitDialog()裡面宣告一塊記憶體而不要釋放, 執行Debug看看VLD會怎麼回報Memory Leak

  • 執行完程式之後, VLD會在Output視窗輸出訊息, 說它發現Memory Leak了。在回報程式碼行數的那列點兩下, 會自動跳到記憶體宣告的地方, 相當方便喔。

  • Output視窗中還會列出沒有被釋放的記憶體裡面的詳細資料, 對於Debug也相當有幫助

後記: VLD對VC開發人員來說的確很有幫助, 但筆者使用VLD時, 曾發生程式無法叫起來的現象, 後來改成只有在要檢測Memory Leak時才include vld.h, 檢查完Memory Leak之後就關掉VLD了。

參考資料:
Memory Leak Detection in C++
Memory leak tool for C++ under Windows

沒有留言:

張貼留言