




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
用Rational Purify调试程序内存-2013年1月11日19:05:45内存问题很多,而内存泄漏(Memory Leak)并不像“野指针”和“数组越界”那么容易暴露出来。在一直开机的情况下,内存泄漏会导致可用内存逐渐减少,以致程序无法运行。特别是对于服务器来说,内存泄漏更可怕。本文主要包括:1、 Purify简介;2、 Purify检测的代码错误类型;3、 在windows中使用Purify;4、 Purify使用注意事项。【Purify简介】Purify利用目标代码插入技术(OCI, Object Code Insertion),在你的目标程序中插入一些它自己的函数,这些函数主要都是内存检测的语句,这些语句将会放置在程序中所有内存操作之前,一旦在程序运行时发现内存问题,Purify所插入的这些语句就会向你报告。一般来说,所有的内存检测工具都是这样工作的。Purify对程序中的每一个内存操作都进行检测,并对精确报告内存出现错误的变量和语句,以提供出现错误原因的分析。Purify主要检测的是下面这些内存错误: 数组内存是否越界读/写。 是否使用了未初始化的内存。 是否对已释放的内存进行读/写。 是否对空指针进行读/写。 内存漏洞(内存泄漏)。【Purify检测的代码错误类型】一、红色叹号提示1、ABR: Array Bounds Read数组越界读(只检测动态内存分配的数组,对Global、Local、Static的数组无法检测)。2、ABW: Array Bounds Write数组越界写(只检测动态内存分配的数组,对Global、Local、Static的数组无法检3、ABWL: Late Detect Array Bounds Write (An ABWL message indicates that the program wrote a value before the beginning or after the end of an allocated block of memory)4、BSR: Beyond Stack Read函数可能读了一个当前堆栈之外的指针。例如在写变量值的时候程序出现了异常,那么读此变量时,就会发生BSR错误。(不适用于堆栈内的本地数组)5、BSW: Beyond Stack Write函数可能写了一个当前堆栈之外的指针。(不适用于堆栈内的本地数组)6、EXU: Unhandled Exception 未经处理的异常7、FFM: Freeing Freed Memory 正在释放已经释放过的内存。8、FIM: Freeing Invalid Memory 试图释放未分配的、无效的内存。9、FMM: Freeing Mismatched Memory释放不匹配的内存,用不正确的API函数释放某类内存。10、FMR: Free Memory Read 读取已经释放或者未经分配的内存内容。11、 FMW: Free Memory Write 对已经释放或者未经分配的内存做写入操作。12、 FMWL: Late Detect Free Memory Write13、IPR: Invalid Pointer Read 程序正在读取一个无效的,不可以设定地址的内存区域。14、IPW: Invalid Pointer Write程序正在对一个无效的,不可以设定地址的内存区域进行写操作。red zoneFor error detection runs, the bytes that are placed at the beginning and end of each allocated block of memory in a program at run time. The red zone is used to detect Array Bounds Read (ABR), Array Bounds Write (ABW), and Late Detect Array Bounds Write (ABWL) errors.15、NPR: Null Pointer Read 空指针读。16、NPW: Null Pointer Write 空指针写。17、COR:Core Dump Imminent 非法操作18、FNH :Freeing Non Heap Memory 释放非堆内存19、FUM:Freeing Unallocated Memory 释放了没有分配的内存20、MRE:Malloc Reentrancy Error remalloc错21、SBR:Stack Array Bounds Read 栈数组越界读22、SBW:Stack Array Bounds Write 栈数级越界23、ZPR:Zero Page Read 零页面读24、ZPW:Zero Page Write 零页面写二、黄色警告信息1、COM: COM API/Interface FailureCOM操作失败。在每一个COM API或COM接口调用后,Purify都会检查HRESULT,如果它的值不是标明操作成功的S_OK,就会显示此错误。2、HAN: Invalid Handle无效句柄。在期望出现句柄的地方出现了一个非句柄的值或者是一个错误类型的句柄。3、ILK: COM Interface LeakCOM接口漏洞。当一个COM接口的引用总数大于1时,会出现此提示。4、MLK: Memory Leak堆内存泄露。指内存块中没有任何内容或者内存块没有被任何指针引用。以下两种情况都会出现此错误提示。A、在函数中分配了本地内存,但在退出函数的时候没有Free。B、内存块的指针被清除或改变或不在其作用域内。If the section of the program where the memory is allocated and leaked is executed repeatedly, you might eventually run out of swap space, causing slow downs and crashes. This is a serious problem for long-running, interactive programs.5、PAR: Bad Parameter程序在调用Win32API或者C运行时常规函数时传递了一个错误的参数。6、UMC: Uninitialized Memory Copy将一个未初始化的值从一个内存区拷贝到另外一个。7、UMR: Uninitialized Memory Read 读取未初始化的内存块的值。8、MSE:Memory Segment Error 内存段错9、PLK:Potential Leak 潜在的内存泄露10、SOF:Stack Overflow 栈溢出三、兰色提示信息1、BOX: MessageBox如果程序中用到了MessageBox()或者MessageBoxEx()两个函数,Purify运行结束后就会出现此项提示信息。2、EXC: Continued Exception3、EXH: Handled Exception4、EXI: Ignored Exception5、HIU: Handle In Use 句柄被分配后,没有释放。6、MAF: Memory Allocation Failure 内存分配失败。7、MIU: Memory In Use 正要分配的堆内存上已经有指针了。8、MPK: Potential Memory Leak堆内存可能泄露。在内存块的开始没有指针,但在块的内部看起来有指针指向。9、ODS: OutputDebugString 程序中调用了OutputDebugString函数。10、FIU: File Descriptors In Use 文件描述符被使用11、SIG:Signal 信号12、WPF:Watchpoint Free 释放被监控的内存13、WPM: Watchpoint Malloc 被监控的内存分配14、WPN:Watchpoint Entry 被监控的内存15、WPR:Watchpoint Read 被监控的内存16、WPW:Watchpoint Write 被监控的内存写17、WPX:Watchpoint Exit 退出被监控的内存【在windows中使用Purify】在windows中使用Purify,其实很简单。步骤如下:运行Purify 【File】,选【Run】,就会出现如下所示的对话框:只需在【Program name】一栏中,选择所需要调试的程序(注意,程序应该是Debug版本,不能是Release版本,因为Release版本调试不出全部错误)。【Collect】栏选第一个。其他的默认即可。然后点击【Run】按钮,即可开始运行程序调试。下面是错误的Hello world程序在Purify下调试结果,注意调试的是Debug版本的程序:Hello world.cpp/时间:2013年1月11日19:48:05/编译器:VC+6.0/数据组织:./功能:错误的Hello world/错误如下:/1.内存越界/2.内存泄漏#include #include #include int main(void)char * sPrintBuff = (char *)malloc(sizeof(char) * strlen(Hello world!);/ 12字节strncpy(sPrintBuff, Hello world!, strlen(Hello world!);/ 12个字符printf(%sn,sPrintBuff);return 0;调试结果
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 口腔实操考试题库及答案
- 针灸基础考试题库及答案
- 主管药师考试题库及答案
- 2025年新疆农作物制种项目验收合同协议
- 太原地理结业考试题及答案
- 技术类合同模板和要点解释文档
- 软件面试笔试题目及答案
- 入党笔试考试试题及答案
- 人行法律笔试题库及答案
- 券商暑期笔试题库及答案
- 消防法律知识培训课件
- 小学生防电信诈骗课件
- 向上级招反诈技术人员的申请
- 《玻璃纤维湿法制品》课件
- DB63T 2374-2024 微型消防站建设管理
- 新版质量管理体系标准之组织的知识
- 符号学角度分析设计案例
- 指南解读肾癌治疗方案
- 《电气基础知识培训》课件
- 职业技术学院《财务大数据分析》课程标准
- 大数据分析方法与应用 课件全套 耿秀丽 第1-9章 大数据概述-神经网络
评论
0/150
提交评论