文档介绍:北京邮电大学
硕士学位论文
内存泄漏静态检测模型的设计与实现
姓名:柯平
申请学位级别:硕士
专业:计算机科学与技术
指导教师:陈俊亮
20090201
内存泄漏静态检测模型的设计与实现摘要绦蛑心诖嫘孤┑募觳馐荂程序软件测试的重点和难点之一。积累,程序的整体性能会下降,严重时会导致死机或异常退出。因此由于绦蚓哂辛榛罡咝У挠诺悖覥语言的诞生到现在,都作为一种主流程序设计语言北还惴菏褂谩语言使得用户能够直接控制程序内存资源的使用,这对于实现运行程序的高性能或提高计算机资源的利用率是至关重要的。但正是因为镅灾辛榛畹哪诖婀芾机制,使绦蚝苋菀撞诖嫘孤┑饶诖娣矫娴某绦虼砦蟆D诖泄漏故障在惺欠浅NO盏模ǔD岩怨鄄斓降模孀殴收系内存泄漏的检测至关重要本文首先研究了内存泄漏检测技术的发展情况以及内存泄漏的特征和产生原因,并分析了国内外常见的内存泄漏检测方法,包括静态检测法、动态检测法等,并对比他们的优缺点。之后本文实现了静态检测工具,实现了对程序的语法分析,词法分析,生成符号表和控制流图,并在此之上实现了对程序中各个变量的区间分析,使得分析的准确性大大提高。之后实现了拓展性强的缺陷模式状态机,搭建了一个针对故障的强有力的静态检测平台。然后通过研究言中内存泄漏故障产生的错误代码,总结出产生内存泄漏代码的模式。根据这些的模式设计并实现的内存泄漏模型,并用该模型对绦蚪屑觳狻W詈螅疚慕ḿ觳饨峁牍饩蔡觳夤ぞ叩检测结果进行比较,分析和内存泄漏模型的优点和不足,并完善内存泄漏模型,提出改进方案。关键词:内存泄漏;静态测试;区间分析;缺陷模式;状态机北京邮电大学硕士研究生学位论文
咖舡硼—.,..’,瑃琣甌,,琤瑃琩
;;,琣北京邮电大学硕士研究生学位论文
日期:.碓。ヒ鬻啉肝孓抖娇盈娟密叁拯孕~、一二独创性虼葱滦声明本人声明所呈交的论文是本人在导师指导下进行的研究工作及取得的研究成果。尽我所知,除了文中特别加以标注和致谢中所罗列的内容以外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含为获得北京邮电大学或其他教育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明确的说明并表示了谢意。申请学位论文与资料若有不实之处,本人签名:本人承担一切相关责任。关于论文使用授权的说明学位论文作者完全了解北京邮电大学有关保留和使用学位论文的规定,即:研究生在校攻读学位期间论文工作的知识产权单位属北京邮电大学。学校有权保留并向国家有关部门或机构送交论文的复印件和磁盘,允许学位论文被查阅和借阅;学校可以公布学位论文的全部或部分内容,可以允许采用影印、缩印或其它复制手段保存、汇编学位论文。C艿难宦畚脑诮饷芎笞袷卮斯娑保密论文注释:本学位论文属于保密在一年解密后适用本授权书。非保密论一文注释:本人导师围范保
第一章绪论内存泄漏与静态测试一般常说的内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中动态分配的,大小任意的诖婵榈拇笮】梢栽诔绦蛟诵衅诓啪龆,使用完后必须显式释放的内存【¨。应用程序一般使用,群佣阎蟹峙湟豢槟诖妫用完后,应用程序必须负责相应地调用来释放该内存块,否则,这块内存在当前进程生命周期内就不能被回收以再次使用了,就说这块内存泄漏了。内存泄漏故障在惺欠浅NO盏模ǔ;崾钩绦蛑葱兴俣缺渎钪帐钩序因内存耗尽而崩溃。对于内存较小,而且地址空间是固定的旧机器而言,这种问题更为严重。随着虚拟存储技术的出现,有些人会产生浪费一点内存无所谓的观点,这是非常错误的,因为耗尽虚拟内存空间,意味着己经在实际内存中产生泄漏。内存泄漏故障一般是难以观察到的,但随着故障的积累,程序的整体性能会下降,严重时会导致死机或异常退出。因此内存泄漏的检测至关重要目前检测内存泄漏故障主要有两种方法:动态方法【途蔡椒╗。两者的区别在于是否需要执行程序。需要执行程序的测试方法称为动态方法,不需要执行程序的为静态方法。动态方法的主要缺点是只能依靠运行特定的测试用例来检测故障,因而不能检测所有故障,只能检测测试用例覆盖到的故障。此外,动态测试工具的执行开销也相当高,有时是不可接受的。静态方法不需要执行程序,而是对源代码进行分析,从而找出潜在的故障。有数据表明,对软件进行静态分析可以揭示出大部分软件缺陷。该方法没有执行开销,但要做大量的分析工作。静态测试是软件开发中十分有效的质量控制方式之一。静态测试的主要对象是源程序,源程序中含有大量设计信息,逻辑信息,同时也含有程序异常的信息,对内存泄漏故障有针对性的检测,使得软件测试的目的更加明确。通过扫描源程序,可以从中提取方法调用关系、各模块间数据交互关系等设计信息,检测程序的结构、控制流和数据流,从逻辑的角度对程序进行分析,发现潜在的内存泄漏点。这种方法能更全面的检测出程序