- 2
- 0
- 约6.61千字
- 约 14页
- 2018-08-29 发布于福建
- 举报
基于指针分析内存泄露故障测试方法研究
基于指针分析内存泄露故障测试方法研究
摘 要:提出了一种新的指针分析方法,通过静态分析程序中指针的映射关系来检测内存泄漏故障;给出了指针映射代数系统的概念,在此基础上分析了如何构造指针映射集,并详细叙述了测试步骤;最后通过实例分析了该方法的应用效果,讨论了需要进一步解决的问题。该方法还考虑了控制流图和路径条件,提高了测试结果的精度。
关键词:内存泄漏; 软件测试; 指针分析
中图法分类号:TP302.8 文献标识码:A 文章编号:1001-3695(2006)10-0022-03
Research on Memory Leak Faults Testing Method Based on Pointer Analysis
ZHANG Wei,LU Qing??ling,LI Mei,GONG Yun??zhan
(Dept. of Information Engineering, Academy of Armored Force Engineering, Beijing 100072, China)
Abstract:A new pointer analysis method is put forward which detects memory leak faults of software by analyzing static relationship of pointer mapping. The notion of pointer mapping algebraic system is proposed. On the basis of this, it analyzes how to construct pointer mapping sets and describes the detailed testing steps. At last, it brings forth the application effects through example and shows the problems need to be solved next step. This method takes into account the control flow graph and path condition, so it can increase the precision of result.
Key words: Memory Leak; Software Test; Pointer Analysis
许多重要的编程语言均通过指针操作来支持动态内存管理,以提高语言的表达能力,但拥有指针的编程语言也会引起大量的内存故障。检测内存故障是非常困难的,也难以准确识别出程序中的故障源[1]。软件中的内存泄漏故障通常会引起严重问题,它们会逐渐消耗内存资源,在程序长时间运行时更为严重。其表现就是应用程序运行速度变慢,严重时可能因没有足够的内存而崩溃。需要注意的是,内存泄漏故障不能由程序中的后续操作排除。
本文提出的方法基于指针分析,指针分析属于静态技术,通过分析源代码发现程序运行时可能产生的故障。与运行时检测相比,通过指针分析检测,其内存故障代价要小得多。一些研究人员已经对指针分析技术进行了研究[2~4],其基本思路就是开发特定的算法来检测特定的内存问题(如空指针引用、内存泄漏、数组越界等)。这些算法不需要执行程序,也不需要借助程序注释和程序文档,其不足之处主要在于控制流模型不够精确。
1 指针分析
1.1 指针映射代数系统
定义1 令S表示静态变量的集合,V表示指针的集合,H表示所有堆地址的集合,Φ表示特殊地址单元NULL,则广义指针映射集定义为(V∪Φ)×(H∪S∪Φ)={|x∈(V∪Φ)∧y∈(H∪S∪Φ)},记作Ψ。
定义2 广义指针映射集Ψ及定义在该集合上的运算△、☆和⊙称为指针映射代数系统,记作。其中运算定义如下:
△为动态分配运算,△=,其中x∈V,y∈(H∪S∪Φ), z∈H且x≠Φ。
☆为赋值运算,☆=,其中x??1∈V,x??2∈V,y??1∈(H∪S∪Φ),y??2∈(H∪S∪Φ)且x??1≠Φ。
⊙为释放运算,⊙=,其中x∈V,y∈H且x≠Φ。
从定义1、定义2可以看出:
(1)指针只能指向静态变量、堆地址单元或特殊地址单元Φ。
(2)△运算指调用内存分配函数的操作,C++程序设计语言提供的内存分配函数有new,strdup,malloc,calloc,realloc等。该运算实际上是将分配操作与赋值操作组合在一起,因为单纯的分配操作没有任何意义。例如,p=mall
原创力文档

文档评论(0)