內存泄漏檢查-Rational Test Suite-Purify

發表于:2009-03-17來源:作者:點擊數: 標簽:rationalRATIONALRationalTEST泄漏
大家在 測試過程 中最頭痛的是什么問題,我想大概是 服務器 運行時不知不覺的服務器就出現異常,通過SystemMonitor發現系統的內存隨時間不斷的減少,特別在C++的 開發 下由于沒有像 Java , C#有比較好的GC,所有的內存都是開發員進行控制,很容易出現內存泄漏
大家在測試過程中最頭痛的是什么問題,我想大概是服務器運行時不知不覺的服務器就出現異常,通過SystemMonitor發現系統的內存隨時間不斷的減少,特別在C++的開發下由于沒有像Java,C#有比較好的GC,所有的內存都是開發員進行控制,很容易出現內存泄漏的情況,那么如何高效的發現內存問題,成為高級測試人員與開發人員關注的問題。

     工欲善其事,必先利其器,要快速的在大型的應用中人工的排查內存問題,就有如大海撈針。如何在幾百萬代碼定位問題,人工!顯然是不可能的,那必須要借助工具,現在有許多比較好的內存檢查工具,比如下面給大家介紹的Purify,Purify由IBM公司出的面象C++,VB,Java的內存檢查工具。

Purify可檢查的常見錯誤類型如下:

1.堆陣相關錯誤。

2.堆棧相關錯誤。

3.垃圾內存收集-Java代碼中相關的內存管理問題。

4.COM相關錯誤。

5.指針錯誤。

6.內存使用錯誤。

7.Windows API相關錯誤。

8.句柄錯誤。

當然可檢查的錯誤類型還有很多,大家可以參考聯機幫助,但我認為常見的錯誤大多數都發生上面提到的一些錯誤。

      下面主要給大家以一個例子來說明Purify的使用:

 

圖1

Purify的使用還是比較簡單的,一般只要把程序寫成.EXE,然后直接運行就行了,當然如果程序比較大時,則需要重新組織一下,分幾個段進行測試,最好的辦法就是用CPPUnit來寫測試框架,直接調用單個的函數進行測試是最好的,我的例子就是用CPPunit來寫的,單獨調用相關的測試函數進行測試,由于這里不是介紹CppUint,所以只是給大家提一下,單元測試可以這樣寫。Purify的啟動還是比較簡單的,就是運行一個.EXE。

      運行完后結果如下圖:

圖2

大家可以看到報以下幾個出錯,有位未初始化內存,數組越界讀寫,內存泄露等幾個大家比較頭痛的問題,以前代碼比較多時是無法查到的,現在有了這個工具,就可以很快的查到問題。

      同時Purify不光可以顯示出錯還可以定位是那段代碼出錯,當然你要有代碼,不過它是把相關的模塊全部顯示出來,你要從里面找出是由你的代碼引起的問題才行,這是一個比較暈的事情,不過多做幾次就行,當然如果程序是你寫的就更好了,就更容易找到問題,對上面的出現問題的點進行展開,跟據一些使用的經驗我一般不會找系統相關的函數,而是先找與自己工程相關的函數,比如下圖中的內存演示int CMabString::LeakMemory():

圖3

就是工程中的代碼,一般問題都是由自己的代碼引起的,但Purify把所有與此相關的模塊都引入,所以你要過濾出什么是真正問題的所在,同時你們還可以看到如果程序有代碼的話,Purify可以把代碼中的錯誤都標出,從而減小你再去查找代碼的難度,從而快速的定位問題。

當然,Purify還有許多比較好的特性,比如過濾,錯誤顯示設定等等,通過它你可以更快更好的發現問題。

      Purify是一款非常不錯的內存檢查工作,結合PureCoverage,Quantify的Rose Test Suite下的工具,就可以對代碼級進行很好的測試,當然如果再結合測試框架,形成自動化測試則能大幅度的節約測試成本,提高工作效率,當然實施單元測試還是要看整個測試團隊的能力,不能強推J。如果你要了解其它兩個工具,可以看我專欄的其它介紹,謝謝大家。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97