一种内存泄露检测的方法和设备技术

技术编号:27620660 阅读:15 留言:0更新日期:2021-03-10 11:01
本发明专利技术提供了一种内存泄露检测的方法和设备,该方法包括:遍历项目中包含的类,并记录可能存在内存泄露风险的类及类中存在风险的成员变量以形成风险类图;遍历项目中包含的所有函数,并根据函数之间的调用关系构造函数调用之间的链表以形成函数链表;基于风险类图和函数链表,检测项目中存在的内存泄露。通过使用本发明专利技术的方案,能够降低对内存泄露检测中的漏报和误报,提高扫描和审核内存泄露的质量和效率。效率。效率。

【技术实现步骤摘要】
一种内存泄露检测的方法和设备


[0001]本领域涉及计算机领域,并且更具体地涉及一种内存泄露检测的方法和设备。

技术介绍

[0002]内存泄露是程序中已动态分配的堆内存由于某种原因未能释放或无法释放,从而造成内存的浪费。内存泄露可能会因为减少可用内存的数量从而降低计算机的性能,甚至导致全部或部分设备停止正常工作或应用程序崩溃,给企业、客户带来严重的安全风险。
[0003]内存泄露具有隐蔽性、积累性的特征,且更难检测。随着计算机应用需求的日益增加,进行有效的内存分配和释放,防止内存泄露的问题也越来越突出。检测内存泄露常见的有静态扫描方式和动态执行方式,但这两种方式存在漏报或误报的情况。为了确认是否是误报,需要开发人员对其进行二次的核实确认,从而降低开发人员的工作效率,漏报会降低计算机的性能等。因此,提高内存泄露检测的准确性是非常有必要的。

技术实现思路

[0004]有鉴于此,本专利技术实施例的目的在于提出一种内存泄露检测的方法和设备,通过使用本专利技术的技术方案,能够降低对内存泄露检测中的漏报和误报,提高扫描和审核内存泄露的质量和效率。
[0005]基于上述目的,本专利技术的实施例的一个方面提供了一种内存泄露检测的方法,包括以下步骤:
[0006]遍历项目中包含的类,并记录可能存在内存泄露风险的类及类中存在风险的成员变量以形成风险类图;
[0007]遍历项目中包含的所有函数,并根据函数之间的调用关系构造函数调用之间的链表以形成函数链表;
[0008]基于风险类图和函数链表,检测项目中存在的内存泄露。
[0009]根据本专利技术的一个实施例,遍历项目中包含的类,并记录可能存在内存泄露风险的类及类中存在风险的成员变量以形成风险类图包括:
[0010]遍历项目中的所有类,并记录类中包含指针或结构类成员变量且没有析构函数的类;
[0011]记录类中包含指针或结构类成员变量并且在析构函数中没有被释放的类。
[0012]根据本专利技术的一个实施例,遍历项目中包含的所有函数,并根据函数之间的调用关系构造函数调用之间的链表以形成函数链表包括:
[0013]获取项目中未遍历的函数,判断未遍历的函数的入参是否包含指针或结构类变量;
[0014]响应于未遍历的函数的入参不包含指针或结构类变量,判断未遍历的函数为链表起始端;
[0015]响应于未遍历的函数的入参包含指针或结构类变量且已遍历的函数链表中调用
了未遍历的函数,将未遍历的函数插入到函数链表后;
[0016]响应于未遍历的函数调用了已遍历的函数链表中函数,则把未遍历的函数插入到已遍历的函数链表中的函数前;
[0017]响应于未遍历的函数未调用已遍历的函数链表中函数,判断未遍历的函数为链表的起始端。
[0018]根据本专利技术的一个实施例,基于风险类图和函数链表,检测项目中存在的内存泄露包括:
[0019]遍历链表中的每个函数,判断函数中是否包含指针或结构类变量;
[0020]响应于函数中不包含指针或结构类变量,判断函数不存在内存泄露;
[0021]响应于函数中存在指针或结构类变量,对变量进行校验并记录存在的内存泄露。
[0022]根据本专利技术的一个实施例,对变量进行校验包括对指针类变量校验、类对象校验和结构类变量校验。
[0023]本专利技术的实施例的另一个方面,还提供了一种内存泄露检测的设备,设备包括:
[0024]记录模块,记录模块配置为遍历项目中包含的类,并记录可能存在内存泄露风险的类及类中存在风险的成员变量以形成风险类图;
[0025]构造模块,构造模块配置为遍历项目中包含的所有函数,并根据函数之间的调用关系构造函数调用之间的链表以形成函数链表;
[0026]检测模块,检测模块配置为基于风险类图和函数链表,检测项目中存在的内存泄露。
[0027]根据本专利技术的一个实施例,记录模块还配置为:
[0028]遍历项目中的所有类,并记录类中包含指针或结构类成员变量且没有析构函数的类;
[0029]记录类中包含指针或结构类成员变量并且在析构函数中没有被释放的类。
[0030]根据本专利技术的一个实施例,构造模块还配置为:
[0031]获取项目中未遍历的函数,判断未遍历的函数的入参是否包含指针或结构类变量;
[0032]响应于未遍历的函数的入参不包含指针或结构类变量,判断未遍历的函数为链表起始端;
[0033]响应于未遍历的函数的入参包含指针或结构类变量且已遍历的函数链表中调用了未遍历的函数,将未遍历的函数插入到函数链表后;
[0034]响应于未遍历的函数调用了已遍历的函数链表中函数,则把未遍历的函数插入到已遍历的函数链表中的函数前;
[0035]响应于未遍历的函数未调用已遍历的函数链表中函数,判断未遍历的函数为链表的起始端。
[0036]根据本专利技术的一个实施例,检测模块还配置为:
[0037]遍历链表中的每个函数,判断函数中是否包含指针或结构类变量;
[0038]响应于函数中不包含指针或结构类变量,判断函数不存在内存泄露;
[0039]响应于函数中存在指针或结构类变量,对变量进行校验并记录存在的内存泄露。
[0040]根据本专利技术的一个实施例,对变量进行校验包括对指针类变量校验、类对象校验
和结构类变量校验。
[0041]本专利技术具有以下有益技术效果:本专利技术实施例提供的内存泄露检测的方法,通过遍历项目中包含的类,并记录可能存在内存泄露风险的类及类中存在风险的成员变量以形成风险类图;遍历项目中包含的所有函数,并根据函数之间的调用关系构造函数调用之间的链表以形成函数链表;基于风险类图和函数链表,检测项目中存在的内存泄露的技术方案,能够降低对内存泄露检测中的漏报和误报,提高扫描和审核内存泄露的质量和效率。
附图说明
[0042]为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的实施例。
[0043]图1为根据本专利技术一个实施例的内存泄露检测的方法的示意性流程图;
[0044]图2为根据本专利技术一个实施例的内存泄露检测的设备的示意图;
[0045]图3为根据本专利技术一个实施例的构造风险类图的示意性流程图;
[0046]图4为根据本专利技术一个实施例的构造函数列表的示意性流程图;
[0047]图5为根据本专利技术一个实施例的内存泄露检测的示意性流程图;
[0048]图6为根据本专利技术一个实施例的对函数中指针或结构类变量进行校验的示意性流程图。
具体实施方式
[0049]为使本专利技术的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本专利技术实施例进一步详细说明。<本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种内存泄露检测的方法,其特征在于,包括以下步骤:遍历项目中包含的类,并记录可能存在内存泄露风险的类及类中存在风险的成员变量以形成风险类图;遍历所述项目中包含的所有函数,并根据函数之间的调用关系构造函数调用之间的链表以形成函数链表;基于所述风险类图和所述函数链表,检测所述项目中存在的内存泄露。2.根据权利要求1所述的方法,其特征在于,遍历项目中包含的类,并记录可能存在内存泄露风险的类及类中存在风险的成员变量以形成风险类图包括:遍历所述项目中的所有类,并记录类中包含指针或结构类成员变量且没有析构函数的类;记录类中包含指针或结构类成员变量并且在析构函数中没有被释放的类。3.根据权利要求1所述的方法,其特征在于,遍历所述项目中包含的所有函数,并根据函数之间的调用关系构造函数调用之间的链表以形成函数链表包括:获取项目中未遍历的函数,判断所述未遍历的函数的入参是否包含指针或结构类变量;响应于所述未遍历的函数的入参不包含指针或结构类变量,判断所述未遍历的函数为链表起始端;响应于所述未遍历的函数的入参包含指针或结构类变量且已遍历的函数链表中调用了所述未遍历的函数,将所述未遍历的函数插入到所述函数链表后;响应于所述未遍历的函数调用了已遍历的函数链表中函数,则把所述未遍历的函数插入到已遍历的函数链表中的函数前;响应于所述未遍历的函数未调用已遍历的函数链表中函数,判断所述未遍历的函数为链表的起始端。4.根据权利要求1所述的方法,其特征在于,基于所述风险类图和所述函数链表,检测所述项目中存在的内存泄露包括:遍历链表中的每个函数,判断函数中是否包含指针或结构类变量;响应于函数中不包含指针或结构类变量,判断函数不存在内存泄露;响应于函数中存在指针或结构类变量,对变量进行校验并记录存在的内存泄露。5.根据权利要求4所述的方法,其特征在于,对变量进行校验包括对指针类...

【专利技术属性】
技术研发人员:闫利华
申请(专利权)人:苏州浪潮智能科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1