Rational Purify 使用及分析实例

Rational Purify 使用及分析实例

ID:37712865

大小:158.14 KB

页数:11页

时间:2019-05-29

Rational Purify 使用及分析实例_第1页
Rational Purify 使用及分析实例_第2页
Rational Purify 使用及分析实例_第3页
Rational Purify 使用及分析实例_第4页
Rational Purify 使用及分析实例_第5页
资源描述:

《Rational Purify 使用及分析实例》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、简介本文介绍了IBMRationalPurify的基本概念和在不同操作系统中使用Purify对C/C++源程序中存在的内存问题进行勘察和分析,并且提供了有关的实例以便读者在实际操作中作为参考。回页首1.内存问题的原因及分类在C/C++程序中,有关内存使用的问题是最难发现和解决的。这些问题可能导致程序莫名其妙地停止、崩溃,或者不断消耗内存直至资源耗尽。由于C/C++语言本身的特质和历史原因,程序员使用内存需要注意的事项较多,而且语言本身也不提供类似Java的垃圾清理机制。编程人员使用一定的工具来查找和调试内存相关问题是十分必要的。

2、总的说来,与内存有关的问题可以分成两类:内存访问错误和内存使用错误。内存访问错误包括错误地读取内存和错误地写内存。错误地读取内存可能让你的模块返回意想不到的结果,从而导致后续的模块运行异常。错误地写内存可能导致系统崩溃。内存使用方面的错误主要是指申请的内存没有正确释放,从而使程序运行逐渐减慢,直至停止。这方面的错误由于表现比较慢很难被人工察觉。程序也许运行了很久才会耗净资源,发生问题。1.1内存解剖一个典型的C++内存布局如下图所示:自底向上,内存中依次存放着只读的程序代码和数据,全局变量和静态变量,堆中的动态申请变量和堆栈中的

3、自动变量。自动变量就是在函数内声明的局部变量。当函数被调用时,它们被压入栈;当函数返回时,它们就要被弹出堆栈。堆栈的使用基本上由系统控制,用户一般不会直接对其进行控制,所以堆栈的使用还是相对安全的。动态内存是一柄双刃剑:它可以提供程序员更灵活的内存使用方法,而且有些算法没有动态内存会很难实现;但是动态内存往往是内存问题存在的沃土。1.2内存访问错误相对用户使用的语言,动态内存的申请一般由malloc/new来完成,释放由free/delete完成。基本的原则可以总结为:一对一,不混用。也就是说一个malloc必须对应一且唯一的f

4、ree;new对应一且唯一的delete;malloc不能和delete,new不能和free对应。另外在C++中要注意delete和delete[]的区别。delete用来释放单元变量,delete[]用来释放数组等集聚变量。有关这方面的详细信息可以参考[C++Adv]。我们可以将内存访问错误大致分成以下几类:数组越界读或写、访问未初始化内存、访问已经释放的内存和重复释放内存或释放非法内存。下面的代码集中显示了上述问题的典型例子:1#include2usingnamespacestd;3intmain(){

5、4char*str1="four";5char*str2=newchar[4];//notenoughspace6char*str3=str2;7cout<

6、ite)和第9行的数组越界读(ArrayBoundsRead);在第7行,打印尚未赋值的str2将产生访问未初始化内存错误(UninitializedMemoryRead);在第11行使用已经释放的变量将导致释放内存读和写错误(FreedMemoryReadandFreedMemoryWrite);最后由于str3和str2所指的是同一片内存,第12行又一次释放了已经被释放的空间(FreeFreedMemory)。这个包含许多错误的程序可以编译连接,而且可以在很多平台上运行。但是这些错误就像定时炸弹,会在特殊配置下触发,造成不可

7、预见的错误。这就是内存错误难以发现的一个主要原因。1.3内存使用错误内存使用错误主要是指内存泄漏,也就是指申请的动态内存没有被正确地释放,或者是没有指针可以访问这些内存。这些小的被人遗忘的内存块占据了一定的地址空间。当系统压力增大时,这些越来越多的小块将最终导致系统内存耗尽。内存使用错误比内存访问错误更加难以发现。这主要有两点原因:第一,内存使用错误是"慢性病",它的症状可能不会在少数、短时间的运行中体现;第二,内存使用错误是因为"不做为"(忘记释放内存)而不是"做错"造成的。这样由于忽略造成的错误在检查局部代码时很难发现,尤其

8、是当系统相当复杂的时候。回页首2.Purify的原理及使用IBMRationalPurifyPlus是一组程序运行时的分析软件。她包括了程序性能瓶颈分析软件Quantify,程序覆盖面分析软件PureCoverage,和本文的主角:程序运行错误分析软件Purif

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。