本文转自 xkdcc 51CTO博客,原文链接:http://blog.51cto.com/brantc/116674,如需转载请自行联系原作者
Purify
是主要针对开发阶段的白盒测试,是综合性检测运行时错误的工具,并可以和其他复合应用程序(包括多线程和多进程程序)一起工作。
Purify
检查每一个内存操作,定位错误发生的地点并提供尽可能详细的信息帮助程序员分析错误发生的原因。
它可以发现的主要错误有:(摘自
purify
在线帮助
html/getstarted_pplus/2-purify.html
)
·
Reading
or writing beyond the bounds of an array
数组读写越界
使用未初始化的内存
读写未分配的内存
栈指针读写越界
读写空指针
内存和文件描述符泄漏
Purify
还检查一些其他错误,如调用函数参数错误等。
由于
purify
对内存的分析和记录是在程序运行完成以后才显示,如果需要在程序运行时观测就很不方便,所以
Purify
也提供外接
API
函数帮助在运行时显示内存状况以调试程序。它提供的接口说明请参见我的另一篇关于Purify的文档
purify的API和提示信息代号
。
Purify
的使用及注意事项:
1.
对于编译执行程序,如gcc –g testpurify.c –o tpurify
命令,如果需要对
testpurify
使用
purify
进行调试,那么只要在命令前加入
purify
即可。如:purify gcc –g testpurify.c –o tpurify
。这样,当运行
testpurify
程序时,即会自动弹出
purify
观察器的界面如图
1(
命令行模式下只是列出
purify
对程序运行的统计信息
)
:
图 1
purify 不能用于动态链接库的编译命令。如下用法是错误的:
purify –shared –fpic libtest.c –o libtest.so
注意:如果在安装 purify 时是指定的 purify license server 模式进行安装 ( 在安装中输入的是证书服务器的地址, 如[email]27000@licenses.com[/email]) ,那么在加入 purify 命令进行编译程序时,网络必须能连接到指定的证书服务器,否则无法使用 purify 。
2.
如果程序中调用了共享库,那么,如果修改了共享库后,需要使用
purify
命令对调用了共享库的程序进行重新编译,才能体现修改。
3. purify
能够对发现的错误直接在源文件中进行定位,如图
2
中在
main
函数旁边显示的
[hello_world.c:25]
:
图 2
可以在purify中直接对定位的错误进行修改,点击图标或者main下边的铅笔符号即可,弹出如图3的编辑框: 注意:如果错误发生的行号没有在观察器中显示,请检查你在编译时是否指定了-g参数。
图3
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 。
而对硬件有要求的程序,则不大可能使用 purify。比如 对嵌入式平台的程序,我们无法使用 purify 。