[发明专利]一种基于符号执行的内存泄漏检测方法有效
申请号: | 201610184888.8 | 申请日: | 2016-03-29 |
公开(公告)号: | CN105808369B | 公开(公告)日: | 2018-11-23 |
发明(设计)人: | 王兵;邓波;刘宇;李海龙;战茅;许帅;施寅生;洪斌;周严;王林章 | 申请(专利权)人: | 北京系统工程研究所;南京大学 |
主分类号: | G06F11/07 | 分类号: | G06F11/07 |
代理公司: | 南京知识律师事务所 32207 | 代理人: | 张苏沛 |
地址: | 100101 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明针对内存泄漏缺陷,提出一种基于符号执行的内存泄漏检测方法,首先对于被测试的源代码,使用静态分析工具处理,得到静态内存泄漏警报;然后,把用源代码和内存泄漏警报,同时输入插桩器,得到插桩后的代码。接着,把插桩后的代码输入测试用例生成模块,生成大量测试用例并执行所有测试用例。每个测试用例运行结束后都有对目标内存对象泄漏情况汇报,最后综合所有测试执行的输出,对内存泄漏测试结果进行判定。本方法解决了静态内存泄漏分析的误报问题和动态测试的漏报问题,并利用符号执行技术生成测试用例,减少了静态分析内存泄漏结果的人工验证工作。提高了动态执行的效率。 | ||
搜索关键词: | 一种 基于 符号 执行 内存 泄漏 检测 方法 | ||
【主权项】:
1.一种基于符号执行的内存泄漏检测方法,其特征在于,包括以下步骤:步骤1,对于被测试的源代码,使用静态分析工具处理,得到内存泄漏警报;步骤2,对被测代码插桩:读取所述内存泄漏警报,在代码中可能发生内存泄漏的位置进行插桩,记录所有内存的创建、访问和释放信息;步骤3,通过对被测代码插桩,对程序的执行路径进行跟踪,来检查程序执行时经过了哪些目标路径;步骤4,根据插桩的输出结果,用一个状态机来判断在一次测试执行后,该目标内存是否被访问和释放;步骤5,基于符号执行技术生成能够覆盖内存泄漏路径的测试用例,并运行测试用例,对内存泄漏的测试结果进行判定;内存泄漏判定结果包括:MUST‑LEAK,LIKELY‑NOT‑LEAK,BLOAT和MAY‑LEAK;其中MAY‑LEAK类别需要人工验证;MUST‑LEAK类型表示“该内存一定泄漏”;LIKELY‑NOT‑LEAK表示“该泄漏很可能是错的”;BLOAT表示“虽然该内存不太可能泄漏,但在疑似泄漏点之后没有访问,应该提前释放”;最后“没有测试用例覆盖到其路径的泄漏”归为MAY‑LEAK;内存泄漏判定步骤为:对所述内存泄漏警报,检查内存分配点a分配的目标内存在程序的结尾是否释放:若存在一个测试用例的运行,经过完整的目标路径p之后,a点分配的目标内存在程序结尾处没有释放,则其一定发生内存泄漏,该警报就被归类为MUST‑LEAK;若对每个测试用例的执行,在a点分配的目标内存在疑似的泄漏点e之后仍然被访问到,并且在程序结尾处都释放了,那么其有较低的可能性发生泄漏,称为LIKELY‑NOT‑LEAK;若a点分配的目标内存最终释放,但在疑似的泄漏点e之后没有访问过,这类内存对象占据着有限的内存资源却没有使用,也会对程序的运行效率造成影响,称为BLOAT;若所有的测试用例均没有完整地覆盖所述内存泄漏警报对应的内存泄漏路径,则称为MAY‑LEAK。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京系统工程研究所;南京大学,未经北京系统工程研究所;南京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201610184888.8/,转载请声明来源钻瓜专利网。