Purify 是主要针对开发阶段的白盒测试,是综合性检测运行时错误的工具,并可以和其他复合应用程序(包括多线程和多进程程序)一起工作。 Purify 检查每一个内存操作,定位错误发生的地点并提供尽可能详细的信息帮助程序员分析错误发生的原因。
 
        它可以发现的主要错误有:(摘自 purify 在线帮助 html/getstarted_pplus/2-purify.html
·   Reading or writing beyond the bounds of an array
   数组读写越界
·   Using uninitialized memory
   使用未初始化的内存
·   Reading or writing freed memory
   读写未分配的内存
·   Reading or writing beyond the stack pointer
   栈指针读写越界
·   Reading or writing through null pointers
   读写空指针
·   Leaking memory and file descriptors
   内存和文件描述符泄漏
 
        Purify 还检查一些其他错误,如调用函数参数错误等。
        由于 purify 对内存的分析和记录是在程序运行完成以后才显示,如果需要在程序运行时观测就很不方便,所以 Purify 也提供外接 API 函数帮助在运行时显示内存状况以调试程序。它提供的接口说明请参见我的另一篇关于Purify的文档 purifyAPI和提示信息代号
 
        Purify 的使用及注意事项:
        1.    对于编译执行程序,如gcc –g testpurify.c –o tpurify 命令,如果需要对 testpurify 使用 purify 进行调试,那么只要在命令前加入 purify 即可。如:purify gcc –g testpurify.c –o tpurify 。这样,当运行 testpurify 程序时,即会自动弹出 purify 观察器的界面如图 1( 命令行模式下只是列出 purify 对程序运行的统计信息 )
   Purify使用体验_第1张图片

                         
1

purify
不能用于动态链接库的编译命令。如下用法是错误的:
purify –shared –fpic libtest.c –o libtest.so

注意:如果在安装 purify 时是指定的 purify license server 模式进行安装 ( 在安装中输入的是证书服务器的地址, [email][email protected][/email]) ,那么在加入 purify 命令进行编译程序时,网络必须能连接到指定的证书服务器,否则无法使用 purify
        2.    如果程序中调用了共享库,那么,如果修改了共享库后,需要使用 purify 命令对调用了共享库的程序进行重新编译,才能体现修改。
        3.      purify 能够对发现的错误直接在源文件中进行定位,如图 2 中在 main 函数旁边显示的 [hello_world.c:25]
   Purify使用体验_第2张图片

                         
2

   可以在purify中直接对定位的错误进行修改,点击图标或者main下边的铅笔符号即可,弹出如图3的编辑框: 注意:如果错误发生的行号没有在观察器中显示,请检查你在编译时是否指定了-g参数。
      Purify使用体验_第3张图片
                                                          图3
 
        4.      注意到图 2 中有个 ABR 的字母缩写,它表示数组读错误。 Purify 有很多描述错误的字母缩写,请参加 文档 <<purifyAPI和提示信息代号.doc>>
        5.      现在介绍下 purify 的工具栏:

  (1)      (2)     (3)    (4)     (5)      (6)    (7)    (8)    (9)    (10)   (11)  (12)  (13) 

(1)(2)
按钮是用于在 purify 观察器中导航,将最近有 标志的行高亮显示。
按钮 (3) 用于将有 标志的项展开,按钮 (4) 用于将有 标志的项收缩。
按钮 (5) 是用于打开编辑器。
按钮 (6)(7)(8) 是使用 cleartool 工具 ( 没有安装 )
按钮 (9) 用于设置哪些错误信息不进行展开,以节省视图,关注更重要的错误信息。
按钮 (10) 是调用帮助。
按钮 (11) 是下一个内存泄漏提示标记。
按钮 (12) 是调用 PureCovery
按钮 (13) 是调用 ClearQuest 工具。
 
        在项目开发测试中适用purify的领域有:
        1.  使用 purify 提供的 API 函数,在程序运行的必要环节在观察器中显示需要获得的内存状况或打印消息。
        2.  对于运行环境要求简单的程序,如可以在自己虚拟机上运行的单机程序,可以使用 purify 进行白盒测试,查找内存泄漏等运行时错误。
而对硬件有要求的程序,则不大可能使用 purify。比如 对嵌入式平台的程序,我们无法使用 purify