[发明专利]一种内存泄露检测的方法和设备有效
申请号: | 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)若变量被循环赋值,在赋值之前变量没有被释放,或在是否之前发生异常,则存在内存泄露;
结构类变量的检测:判断过程与类对象的检测过程相同。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于苏州浪潮智能科技有限公司,未经苏州浪潮智能科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202011445457.5/1.html,转载请声明来源钻瓜专利网。