1. 程式人生 > >利用BouncCheck進行單元測試

利用BouncCheck進行單元測試

今天下載了最新的BoundCheck V10.1試用版進行試用,感覺還是蠻好用的,至少比V6.0.1好用,該版本直接可以嵌入到VC2003及以後版本的Visual stdio中進行單元測試,VC2010也Support, BoundCheck的網站如下,可以下載試試,試用期為14天。

BoundsChecker 是一個Run-Time錯誤檢測工具,它主要定位程式在執行時期發生的各種錯誤。BoundsChecker錯誤檢測範圍主要包括:For VS2008

 (一)       指標和洩露錯誤
       (1)介面洩露。
       (2)記憶體洩露。
       (3)資源洩露。

   (4)未分配的指標錯誤。

   (5)指標的釋放問題。

 
 (二) 記憶體錯誤
       (1)動態儲存溢位。

    (2)使用未初始化的記憶體。
       (3)無效的控制代碼被鎖定。
       (4)控制代碼沒有被鎖定。
       (5)記憶體分配衝突。
       (6)棧空間溢位。
       (7)靜態儲存溢位。

(三)  API和OLE錯誤
      (1)API函式返回失敗。
      (2)API函式未執行。
      (3)OLE介面方法的變數無效。
      (4)OLE介面方法失敗。
      (5)執行緒呼叫庫函式錯誤。

以下絕對每一點的每個Item進行Check。

1.       指標操作和記憶體、資源洩露錯誤。

1)      記憶體洩露。(同介面洩露)

如片段程式:TCHAR *pszStr = new TCHAR[10]; 如下圖

2)      資源洩露。

       如片段程式:

       HANDLE  hMute = CreateMutex(NULL, TRUE, NULL);程式中不呼叫CloseHandle,

    這中情況下也可以檢測出來,如下圖:

    

3)      未分配的指標錯誤。

如程式碼片段:

TCHAR *ptszStr = new TCHAR[20];

_tcscpy(ptszStr, _T("hello"

));

delete [] ptszStr;

if(ptszStr != NULL)

{

   _tcscpy(ptszStr, _T("world"));

   _tprintf(ptszStr);

}

用BoundCheck檢測結果如下圖所示:


4)      指標的釋放問題。

如以下程式片段:
TCHAR *ptszStr = new TCHAR[20];

_tcscpy(ptszStr, _T("hello"));

delete ptszStr;    //delete [] ptszStr;

 執行結果boundCheck檢測出結果如圖:

     

2.      記憶體操作方面的錯誤。

1)        記憶體讀,寫溢位。

如片段程式:

TCHAR *pszStr = new TCHAR[10];

    pszStr[10] = '/0';

delete [] pszStr;

檢測結果如下圖:

 

2)        使用未初始化的記憶體。

如程式片段:BYTE *pbyData; BYTE *pDestData = pbyData;用BoundCheck檢測結果如圖所示:

 

3. API和OLE錯誤

還有挺多點未沒有比較合理的Sample或者有的是BoundCheck沒有檢測出來的,在以後的使用過程中如有發現其他點比較好的Sample再繼續更新。

http://blog.csdn.net/yuucyf/article/details/6309013