[发明专利]一种内存泄露检测的方法和设备有效

专利信息
申请号: 202011445457.5 申请日: 2020-12-11
公开(公告)号: CN112463632B 公开(公告)日: 2022-06-07
发明(设计)人: 闫利华 申请(专利权)人: 苏州浪潮智能科技有限公司
主分类号: G06F11/36 分类号: G06F11/36
代理公司: 北京连和连知识产权代理有限公司 11278 代理人: 刘小峰;张腾
地址: 215100 江苏省苏州市吴*** 国省代码: 江苏;32
权利要求书: 查看更多 说明书: 查看更多
摘要:
搜索关键词: 一种 内存 泄露 检测 方法 设备
【权利要求书】:

1.一种内存泄露检测的方法,其特征在于,包括以下步骤:

遍历项目中包含的类,并记录可能存在内存泄露风险的类及类中存在风险的成员变量以形成风险类图;

遍历所述项目中包含的所有函数,并根据函数之间的调用关系构造函数调用之间的链表以形成函数链表;

基于所述风险类图和所述函数链表,检测所述项目中存在的内存泄露;

遍历项目中包含的类,并记录可能存在内存泄露风险的类及类中存在风险的成员变量以形成风险类图包括:

遍历所述项目中的所有类,并记录类中包含指针或结构类成员变量且没有析构函数的类;

记录类中包含指针或结构类成员变量并且在析构函数中没有被释放的类;

遍历所述项目中包含的所有函数,并根据函数之间的调用关系构造函数调用之间的链表以形成函数链表包括:

获取项目中未遍历的函数,判断所述未遍历的函数的入参是否包含指针或结构类变量;

响应于所述未遍历的函数的入参不包含指针或结构类变量,判断所述未遍历的函数为链表起始端;

响应于所述未遍历的函数的入参包含指针或结构类变量且已遍历的函数链表中调用了所述未遍历的函数,将所述未遍历的函数插入到所述函数链表后;

响应于所述未遍历的函数调用了已遍历的函数链表中函数,则把所述未遍历的函数插入到已遍历的函数链表中的函数前;

响应于所述未遍历的函数未调用已遍历的函数链表中函数,判断所述未遍历的函数为链表的起始端;

基于所述风险类图和所述函数链表,检测所述项目中存在的内存泄露包括:

遍历链表中的每个函数,判断函数中是否包含指针或结构类变量;

响应于函数中不包含指针或结构类变量,判断函数不存在内存泄露;

响应于函数中存在指针或结构类变量,对变量进行校验并记录存在的内存泄露;

对变量进行校验包括对指针类变量校验、类对象校验和结构类变量校验;

其中,指针类变量的检测:

(1)是单例或全局变量,不存在内存泄露;

(2)变量被传递出去,根据函数链表,追踪变量走向,若变量被释放,则不存在内存泄露;否则存在内存泄露;

(3)若变量未被赋值且未释放,则存在内存泄露;若变量被循环赋值且变量被赋值之前未释放,则存在内存泄露;

类对象的检测:

(1)遍历风险类图,若该类没有在风险类中,则不存在内存泄露;

(2)若存在风险类中,变量未释放或释放之前发生异常,则存在内存泄露;

(3)若变量被循环赋值,在赋值之前变量没有被释放,或在是否之前发生异常,则存在内存泄露;

结构类变量的检测:判断过程与类对象的检测过程相同。

2.一种内存泄露检测的设备,其特征在于,所述设备包括:

记录模块,所述记录模块配置为遍历项目中包含的类,并记录可能存在内存泄露风险的类及类中存在风险的成员变量以形成风险类图;

构造模块,所述构造模块配置为遍历所述项目中包含的所有函数,并根据函数之间的调用关系构造函数调用之间的链表以形成函数链表;

检测模块,所述检测模块配置为基于所述风险类图和所述函数链表,检测所述项目中存在的内存泄露;

所述记录模块还配置为:

遍历所述项目中的所有类,并记录类中包含指针或结构类成员变量且没有析构函数的类;

记录类中包含指针或结构类成员变量并且在析构函数中没有被释放的类;

所述构造模块还配置为:

获取项目中未遍历的函数,判断所述未遍历的函数的入参是否包含指针或结构类变量;

响应于所述未遍历的函数的入参不包含指针或结构类变量,判断所述未遍历的函数为链表起始端;

响应于所述未遍历的函数的入参包含指针或结构类变量且已遍历的函数链表中调用了所述未遍历的函数,将所述未遍历的函数插入到所述函数链表后;

响应于所述未遍历的函数调用了已遍历的函数链表中函数,则把所述未遍历的函数插入到已遍历的函数链表中的函数前;

响应于所述未遍历的函数未调用已遍历的函数链表中函数,判断所述未遍历的函数为链表的起始端;

所述检测模块还配置为:

遍历链表中的每个函数,判断函数中是否包含指针或结构类变量;

响应于函数中不包含指针或结构类变量,判断函数不存在内存泄露;

响应于函数中存在指针或结构类变量,对变量进行校验并记录存在的内存泄露;

对变量进行校验包括对指针类变量校验、类对象校验和结构类变量校验;

其中,指针类变量的检测:

(1)是单例或全局变量,不存在内存泄露;

(2)变量被传递出去,根据函数链表,追踪变量走向,若变量被释放,则不存在内存泄露;否则存在内存泄露;

(3)若变量未被赋值且未释放,则存在内存泄露;若变量被循环赋值且变量被赋值之前未释放,则存在内存泄露;

类对象的检测:

(1)遍历风险类图,若该类没有在风险类中,则不存在内存泄露;

(2)若存在风险类中,变量未释放或释放之前发生异常,则存在内存泄露;

(3)若变量被循环赋值,在赋值之前变量没有被释放,或在是否之前发生异常,则存在内存泄露;

结构类变量的检测:判断过程与类对象的检测过程相同。

下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。

该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于苏州浪潮智能科技有限公司,未经苏州浪潮智能科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服

本文链接:http://www.vipzhuanli.com/pat/books/202011445457.5/1.html,转载请声明来源钻瓜专利网。

×

专利文献下载

说明:

1、专利原文基于中国国家知识产权局专利说明书;

2、支持发明专利 、实用新型专利、外观设计专利(升级中);

3、专利数据每周两次同步更新,支持Adobe PDF格式;

4、内容包括专利技术的结构示意图流程工艺图技术构造图

5、已全新升级为极速版,下载速度显著提升!欢迎使用!

请您登陆后,进行下载,点击【登陆】 【注册】

关于我们 寻求报道 投稿须知 广告合作 版权声明 网站地图 友情链接 企业标识 联系我们

钻瓜专利网在线咨询

周一至周五 9:00-18:00

咨询在线客服咨询在线客服
tel code back_top