内存泄漏检查-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.ltesting.net