工欲善其事,必先利其器,要快速的在大型的应用中人工的排查内存问题,就有如大海捞针。如何在几百万代码定位问题,人工!显然是不可能的,那必须要借助工具,现在有许多比较好的内存检查工具,比如下面给大家介绍的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。如果你要了解其它两个工具,可以看我专栏的其它介绍,谢谢大家。
110593_200903171139211RZhq
110593_200903171139211RZhq
110593_200903171139211RZhq
文章来源于领测软件测试网 https://www.ltesting.net/