Pur
y是主要针对开发阶段
白盒测试![](/icons/45205dou.gif)
是综合性检测运行时
![](/icons/45205cuowu.gif)
![](/icons/45205de.gif)
工具
![](/icons/45205dou.gif)
并可以和
其他复合应用
![](/icons/45205chengxu.gif)
(包括多线程和多进程
![](/icons/45205chengxu.gif)
)
![](/icons/45205yi.gif)
起
工作![](/icons/45205dou2.gif)
Pur
![](/icons/45205if.gif)
y检查每
![](/icons/45205yi.gif)
个内存操作
![](/icons/45205dou.gif)
定位
![](/icons/45205cuowu.gif)
发生
![](/icons/45205de.gif)
地点并提供尽可能详细
![](/icons/45205de.gif)
信息帮助
![](/icons/45205chengxu.gif)
员分析
![](/icons/45205cuowu.gif)
发生
![](/icons/45205de.gif)
原因
![](/icons/45205dou2.gif)
它可以发现
![](/icons/45205de.gif)
主要
![](/icons/45205cuowu.gif)
有:(摘自pur
![](/icons/45205if.gif)
y在线帮助html/getstarted_pplus/2-pur
![](/icons/45205if.gif)
y.html)
· Reading or writing beyond the bounds of an
![](/icons/45205<img src=)
.gif' />
![](/icons/45205shuzu.gif)
读写越界
· Using uninitialized memory
使用未
![](/icons/45205chushi.gif)
化
![](/icons/45205de.gif)
内存
· Reading or writing freed memory
读写未分配
![](/icons/45205de.gif)
内存
· Reading or writing beyond the stack po
![](/icons/45205int.gif)
er
栈指针读写越界
· Reading or writing through null po
![](/icons/45205int.gif)
ers
读写空指针
· Leaking memory and file descriptors
内存和文件描述符泄漏
Pur
![](/icons/45205if.gif)
y还检查
![](/icons/45205yi.gif)
些其他
![](/icons/45205cuowu.gif)
![](/icons/45205dou.gif)
如
![](/icons/45205diaoyong.gif)
![](/icons/45205hanshu.gif)
参数
![](/icons/45205cuowu.gif)
等
![](/icons/45205dou2.gif)
由于pur
![](/icons/45205if.gif)
y对内存
![](/icons/45205de.gif)
分析和记录是在
![](/icons/45205chengxu.gif)
运行完成以后才显示
![](/icons/45205dou.gif)
如果需要在
![](/icons/45205chengxu.gif)
运行时观测就很不方便
![](/icons/45205dou.gif)
所以Pur
![](/icons/45205if.gif)
y也提供外接API
![](/icons/45205hanshu.gif)
帮助在运行时显示内存状况以调试
![](/icons/45205chengxu.gif)
![](/icons/45205dou2.gif)
它提供
![](/icons/45205de.gif)
接口介绍说明请参见我
![](/icons/45205de.gif)
另
![](/icons/45205yi.gif)
篇有关Pur
![](/icons/45205if.gif)
y
![](/icons/45205de.gif)
文档pur
![](/icons/45205if.gif)
y
![](/icons/45205de.gif)
API和提示信息代号
![](/icons/45205dou2.gif)
Pur
![](/icons/45205if.gif)
y
![](/icons/45205de.gif)
使用及注意事项:
1. 对于编译执行
![](/icons/45205chengxu.gif)
![](/icons/45205dou.gif)
如gcc –g testpur
![](/icons/45205if.gif)
y.c –o tpur
![](/icons/45205if.gif)
y命令
![](/icons/45205dou.gif)
如果需要对testpur
![](/icons/45205if.gif)
y使用pur
![](/icons/45205if.gif)
y进行调试
![](/icons/45205dou.gif)
那么只要在命令前加入pur
![](/icons/45205if.gif)
y即可
![](/icons/45205dou2.gif)
如:pur
![](/icons/45205if.gif)
y gcc –g testpur
![](/icons/45205if.gif)
y.c –o tpur
![](/icons/45205if.gif)
y
![](/icons/45205dou2.gif)
这样
![](/icons/45205dou.gif)
当运行testpur
![](/icons/45205if.gif)
y
![](/icons/45205chengxu.gif)
时
![](/icons/45205dou.gif)
即会自动弹出pur
![](/icons/45205if.gif)
y观察器
![](/icons/45205de.gif)
界面如图1(命令行模式下只是列出pur
![](/icons/45205if.gif)
y对
![](/icons/45205chengxu.gif)
运行
![](/icons/45205de.gif)
统计信息):
![](\"/Files/BeyondPic/2007-9/20/2_200709191733041.g<img)
\" border=0>
图1
pur
![](/icons/45205if.gif)
y不能用于动态链接库
![](/icons/45205de.gif)
编译命令
![](/icons/45205dou2.gif)
如下使用方法是
![](/icons/45205cuowu.gif)
![](/icons/45205de.gif)
:
pur
![](/icons/45205if.gif)
y –shared –fpic libtest.c –o libtest.so
注意:如果在安装pur
![](/icons/45205if.gif)
y时是指定
![](/icons/45205de.gif)
pur
![](/icons/45205if.gif)
y license server模式进行安装(在安装中输入
![](/icons/45205de.gif)
是证书服务器
![](/icons/45205de.gif)
地址
![](/icons/45205dou.gif)
如
[email protected])
![](/icons/45205dou.gif)
那么在加入pur
![](/icons/45205if.gif)
y命令进行编译
![](/icons/45205chengxu.gif)
时
![](/icons/45205dou.gif)
网络必须能连接到指定
![](/icons/45205de.gif)
证书服务器
![](/icons/45205dou.gif)
否则无法使用pur
![](/icons/45205if.gif)
y
![](/icons/45205dou2.gif)
2. 如果
![](/icons/45205chengxu.gif)
中
![](/icons/45205diaoyong.gif)
了共享库
![](/icons/45205dou.gif)
那么
![](/icons/45205dou.gif)
如果修改了共享库后
![](/icons/45205dou.gif)
需要使用pur
![](/icons/45205if.gif)
y命令对
![](/icons/45205diaoyong.gif)
了共享库
![](/icons/45205de.gif)
![](/icons/45205chengxu.gif)
进行重新编译
![](/icons/45205dou.gif)
才能体现修改
![](/icons/45205dou2.gif)
[Page]
3. pur
![](/icons/45205if.gif)
y能够对发现
![](/icons/45205de.gif)
![](/icons/45205cuowu.gif)
直接在源文件中进行定位
![](/icons/45205dou.gif)
如图2中在
![](/icons/45205main.gif)
![](/icons/45205hanshu.gif)
旁边显示
![](/icons/45205de.gif)
[hello_world.c:25]:
![](\"/Files/BeyondPic/2007-9/20/2_200709191733401.g<img)
\" border=0>
图2
可以在pur
![](/icons/45205if.gif)
y中直接对定位
![](/icons/45205de.gif)
![](/icons/45205cuowu.gif)
进行修改
![](/icons/45205dou.gif)
点击图标或者
![](/icons/45205main.gif)
下边
![](/icons/45205de.gif)
铅笔符号即可
![](/icons/45205dou.gif)
弹出如图3
![](/icons/45205de.gif)
编辑框: 注意:如果
![](/icons/45205cuowu.gif)
发生
![](/icons/45205de.gif)
行号没有在观察器中显示
![](/icons/45205dou.gif)
请检查你在编译时是否指定了-g参数
![](\"/Files/BeyondPic/2007-9/20/2_200709191734311.g<img)
\" border=0>
图3
4. 注意到图2中有个ABR
![](/icons/45205de.gif)
字母缩写
![](/icons/45205dou.gif)
它表示
![](/icons/45205shuzu.gif)
读
![](/icons/45205cuowu.gif)
![](/icons/45205dou2.gif)
Pur
![](/icons/45205if.gif)
y有很多描述
![](/icons/45205cuowu.gif)
![](/icons/45205de.gif)
字母缩写
![](/icons/45205dou.gif)
请参加文档<<pur
![](/icons/45205if.gif)
y
![](/icons/45205de.gif)
API和提示信息代号.doc>>
![](/icons/45205dou2.gif)
5. 现在介绍下pur
![](/icons/45205if.gif)
y
![](/icons/45205de.gif)
工具栏:
![](\"/Files/BeyondPic/2007-9/20/2_200709191735171.g<img)
\" border=0>
(1)(2)按钮是用于在pur
![](/icons/45205if.gif)
y观察器中导航
![](/icons/45205dou.gif)
将最近有或标志
![](/icons/45205de.gif)
行高亮显示
![](/icons/45205dou2.gif)
按钮(3)用于将有标志
![](/icons/45205de.gif)
项展开
![](/icons/45205dou.gif)
按钮(4)用于将有标志
![](/icons/45205de.gif)
项收缩
![](/icons/45205dou2.gif)
按钮(5)是用于打开编辑器
![](/icons/45205dou2.gif)
按钮(6)(7)(8)是使用cleartool工具(没有安装)
![](/icons/45205dou2.gif)
按钮(9)用于设置哪些
![](/icons/45205cuowu.gif)
信息不进行展开
![](/icons/45205dou.gif)
以节省视图
![](/icons/45205dou.gif)
关注更重要
![](/icons/45205de.gif)
![](/icons/45205cuowu.gif)
信息
![](/icons/45205dou2.gif)
按钮(10)是
![](/icons/45205diaoyong.gif)
帮助
![](/icons/45205dou2.gif)
按钮(11)是下
![](/icons/45205yi.gif)
个内存泄漏提示标记
![](/icons/45205dou2.gif)
按钮(12)是
![](/icons/45205diaoyong.gif)
PureCovery
![](/icons/45205dou2.gif)
按钮(13)是
![](/icons/45205diaoyong.gif)
ClearQuest工具
在项目开发测试中适用pur
![](/icons/45205if.gif)
y
![](/icons/45205de.gif)
领域有:
1. 使用pur
![](/icons/45205if.gif)
y提供
![](/icons/45205de.gif)
API
![](/icons/45205hanshu.gif)
![](/icons/45205dou.gif)
在
![](/icons/45205chengxu.gif)
运行
![](/icons/45205de.gif)
必要环节在观察器中显示需要获得
![](/icons/45205de.gif)
内存状况或打印消息
![](/icons/45205dou2.gif)
2. 对于运行环境要求简单
![](/icons/45205de.gif)
![](/icons/45205chengxu.gif)
![](/icons/45205dou.gif)
如可以在自己虚拟机上运行
![](/icons/45205de.gif)
单机
![](/icons/45205chengxu.gif)
![](/icons/45205dou.gif)
可以使用pur
![](/icons/45205if.gif)
y进行白盒测试
![](/icons/45205dou.gif)
查找内存泄漏等运行时
![](/icons/45205cuowu.gif)
![](/icons/45205dou2.gif)
而对硬件有要求
![](/icons/45205de.gif)
![](/icons/45205chengxu.gif)
![](/icons/45205dou.gif)
则不大可能使用pur
![](/icons/45205if.gif)
y
![](/icons/45205dou2.gif)
比如对嵌入式平台
![](/icons/45205de.gif)
![](/icons/45205chengxu.gif)
![](/icons/45205dou.gif)
我们无法使用pur
![](/icons/45205if.gif)
y