[发明专利]一种内存泄露检测的方法和设备有效
申请号: | 202011445457.5 | 申请日: | 2020-12-11 |
公开(公告)号: | CN112463632B | 公开(公告)日: | 2022-06-07 |
发明(设计)人: | 闫利华 | 申请(专利权)人: | 苏州浪潮智能科技有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 北京连和连知识产权代理有限公司 11278 | 代理人: | 刘小峰;张腾 |
地址: | 215100 江苏省苏州市吴*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 内存 泄露 检测 方法 设备 | ||
本发明提供了一种内存泄露检测的方法和设备,该方法包括:遍历项目中包含的类,并记录可能存在内存泄露风险的类及类中存在风险的成员变量以形成风险类图;遍历项目中包含的所有函数,并根据函数之间的调用关系构造函数调用之间的链表以形成函数链表;基于风险类图和函数链表,检测项目中存在的内存泄露。通过使用本发明的方案,能够降低对内存泄露检测中的漏报和误报,提高扫描和审核内存泄露的质量和效率。
技术领域
本领域涉及计算机领域,并且更具体地涉及一种内存泄露检测的方法和设备。
背景技术
内存泄露是程序中已动态分配的堆内存由于某种原因未能释放或无法释放,从而造成内存的浪费。内存泄露可能会因为减少可用内存的数量从而降低计算机的性能,甚至导致全部或部分设备停止正常工作或应用程序崩溃,给企业、客户带来严重的安全风险。
内存泄露具有隐蔽性、积累性的特征,且更难检测。随着计算机应用需求的日益增加,进行有效的内存分配和释放,防止内存泄露的问题也越来越突出。检测内存泄露常见的有静态扫描方式和动态执行方式,但这两种方式存在漏报或误报的情况。为了确认是否是误报,需要开发人员对其进行二次的核实确认,从而降低开发人员的工作效率,漏报会降低计算机的性能等。因此,提高内存泄露检测的准确性是非常有必要的。
发明内容
有鉴于此,本发明实施例的目的在于提出一种内存泄露检测的方法和设备,通过使用本发明的技术方案,能够降低对内存泄露检测中的漏报和误报,提高扫描和审核内存泄露的质量和效率。
基于上述目的,本发明的实施例的一个方面提供了一种内存泄露检测的方法,包括以下步骤:
遍历项目中包含的类,并记录可能存在内存泄露风险的类及类中存在风险的成员变量以形成风险类图;
遍历项目中包含的所有函数,并根据函数之间的调用关系构造函数调用之间的链表以形成函数链表;
基于风险类图和函数链表,检测项目中存在的内存泄露。
根据本发明的一个实施例,遍历项目中包含的类,并记录可能存在内存泄露风险的类及类中存在风险的成员变量以形成风险类图包括:
遍历项目中的所有类,并记录类中包含指针或结构类成员变量且没有析构函数的类;
记录类中包含指针或结构类成员变量并且在析构函数中没有被释放的类。
根据本发明的一个实施例,遍历项目中包含的所有函数,并根据函数之间的调用关系构造函数调用之间的链表以形成函数链表包括:
获取项目中未遍历的函数,判断未遍历的函数的入参是否包含指针或结构类变量;
响应于未遍历的函数的入参不包含指针或结构类变量,判断未遍历的函数为链表起始端;
响应于未遍历的函数的入参包含指针或结构类变量且已遍历的函数链表中调用了未遍历的函数,将未遍历的函数插入到函数链表后;
响应于未遍历的函数调用了已遍历的函数链表中函数,则把未遍历的函数插入到已遍历的函数链表中的函数前;
响应于未遍历的函数未调用已遍历的函数链表中函数,判断未遍历的函数为链表的起始端。
根据本发明的一个实施例,基于风险类图和函数链表,检测项目中存在的内存泄露包括:
遍历链表中的每个函数,判断函数中是否包含指针或结构类变量;
响应于函数中不包含指针或结构类变量,判断函数不存在内存泄露;
响应于函数中存在指针或结构类变量,对变量进行校验并记录存在的内存泄露。
根据本发明的一个实施例,对变量进行校验包括对指针类变量校验、类对象校验和结构类变量校验。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于苏州浪潮智能科技有限公司,未经苏州浪潮智能科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202011445457.5/2.html,转载请声明来源钻瓜专利网。