今天下载了最新的BoundCheck V10.1试用版进行试用,感觉还是蛮好用的,至少比V6.0.1好用,该版本直接可以嵌入到VC2003及以后版本的Visual stdio中进行单元测试,VC2010也Support, BoundCheck的网站如下,可以下载试试,试用期为14天。
http://www.componentsource.com/products/devpartner-visual-c-boundschecker-suite-visual-studio-concurrent-users/index-zt-twd.html
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再继续更新。