Purify使用体验

简介:





本文转自 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
    数组读写越界
·   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 对程序运行的统计信息 )
   

                          
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
 
        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
目录
相关文章
|
存储 XML NoSQL
提高代码质量,避免内存泄漏:深入探索Valgrind工具
提高代码质量,避免内存泄漏:深入探索Valgrind工具
|
8月前
|
机器学习/深度学习 数据采集 算法
深入理解并应用机器学习算法:支持向量机(SVM)
【5月更文挑战第13天】支持向量机(SVM)是监督学习中的强分类算法,用于文本分类、图像识别等领域。它寻找超平面最大化间隔,支持向量是离超平面最近的样本点。SVM通过核函数处理非线性数据,软间隔和正则化避免过拟合。应用步骤包括数据预处理、选择核函数、训练模型、评估性能及应用预测。优点是高效、鲁棒和泛化能力强,但对参数敏感、不适合大规模数据集且对缺失数据敏感。理解SVM原理有助于优化实际问题的解决方案。
|
8月前
|
安全 Unix Linux
Windows如何远程连接服务器?服务器远程连接图文教程
服务器操作系统可以实现对计算机硬件与软件的直接控制和管理协调,任何计算机的运行离不开操作系统,服务器也一样,服务器操作系统主要分为四大流派:Windows Server、Netware、Unix和Linux。今天驰网飞飞将和你分享Windows server远程连接图文教程,希望可以帮助到你
2553 4
Windows如何远程连接服务器?服务器远程连接图文教程
|
7月前
|
JSON Java API
Java一分钟之-JPA实体关系:一对一, 一对多, 多对多
【6月更文挑战第14天】Java Persistence API (JPA) 的 ORM 规范简化了数据库操作,重点是实体关系映射。本文讨论了三种主要关系:一对一、一对多和多对多。对于每种关系,都指出了常见问题(如循环引用、懒加载异常)和避免策略(使用注解解决循环引用,明确级联操作边界等)。同时,提供了示例代码以展示如何在实践中设置这些关系。理解并妥善处理这些问题能提升开发效率和数据准确性。
357 1
|
5月前
|
调度 Python
在 Django 上实现定时任务的指南
在 Django 中实现定时任务有多种方法,包括使用 Celery 和 Celery Beat、django-background-tasks、以及 APScheduler。根据您的需求和应用场景,可以选择最适合的方案。每种方法都有其优缺点,选择时应考虑任务复杂性、系统资源、以及维护成本。通过这些工具,您可以有效地管理和调度后台任务,提高应用程序的自动化水平和运行效率。
|
8月前
|
数据采集 Go Python
文本挖掘基础入门指南
本文介绍了文本挖掘中的数据预处理步骤,包括去除特殊字符和标点符号、移除停用词、小写化以及词干化或词形还原。使用Python的nltk库,通过示例代码展示了如何实现这些步骤,并强调了nltk库在文本处理中的便利性。文章最后提到,预处理后的文本更适合后续的文本分析任务.
162 6
|
Java API
LOG4J2-MDC-全链路跟踪等功能研究
LOG4J2-MDC-全链路跟踪等功能研究
369 0
|
弹性计算 运维 容灾
阿里云使用体验
经过进一步的体验云服务器我感受到阿里云提供的性能卓越、稳定可靠、弹性扩展的IaaS(Infrastructure as a Service)级别云计算服务。云服务器ECS免去了采购IT硬件的前期准备,就像是使用水、电、天然气等公共资源一样便捷、高效地使用服务器,实现计算资源的即开即用和弹性伸缩,在使用期间给阿里云我最大的印象就是方便,快捷。使用界面简单明了,通过不断地尝试,我了解到了更多的特殊概念,专业名词,也了解到了如快照等容灾备份能力的实际用途,现实生活中,如果我们的电脑磁盘出现了故障,数据出现了损坏就无能为力了,或者只能够找专业的人把数据能够找回来,但是不能够保证说所有的数据都能找回来。
|
8月前
|
人工智能
CodeGeeX使用体验
CodeGeeX使用体验
296 0

相关实验场景

更多