本申请涉及计算机,特别是涉及内存泄漏检测方法、装置、电子装置和移动设备。
背景技术:
1、目前,在进行内存泄漏检测时,往往是在程序申请内存时记录相应的内存申请信息,并在程序释放内存时删除对应的内存申请信息。在程序运行完成后,通过解析未释放的内存申请信息判断是否存在内存泄漏问题。由于内存申请信息包含的信息较多,分辨较为困难,需要对内存申请信息逐条分析,以判断是否存在泄漏风险,因此目前内存泄漏风险判断的效率较低。
2、针对相关技术中存在内存泄漏风险判断的效率较低的问题,目前还没有提出有效的解决方案。
技术实现思路
1、在本实施例中提供了一种内存泄漏检测方法、装置、电子装置和移动设备,以解决相关技术中内存泄漏风险判断的效率较低的问题。
2、第一个方面,在本实施例中提供了一种内存泄漏检测方法,包括:
3、在目标测试程序调用入口函数时,基于重定向跳转执行预设的标记函数;其中,所述标记函数用于执行所述入口函数,并在执行完所述入口函数时标记未释放的内存申请信息;
4、在所述标记函数执行结束后,根据所有的所述内存申请信息的标记,确定所述目标测试程序中发生内存泄漏的风险等级。
5、在其中的一些实施例中,所述标记函数用于循环执行所述入口函数,并在每次循环执行完所述入口函数之后,标记未释放的内存申请信息。
6、在其中的一些实施例中,所述标记函数用于在每次循环执行完所述入口函数之后,检测未释放的内存申请信息中未标记的新内存申请信息;以及对所述新内存申请信息设置新的标记。
7、在其中的一些实施例中,所述检测未释放的内存申请信息中未标记的新内存申请信息包括:
8、遍历未释放的内存申请信息;
9、在所有所述未释放的内存申请信息中,筛选标记为空值的内存申请信息;
10、将标记为空值的内存申请信息识别为未标记的新内存申请信息。
11、在其中的一些实施例中,所述对所述新内存申请信息设置新的标记包括:
12、根据循环次数确定当前循环对应的标记形式;
13、根据当前循环对应的标记形式,为当前循环检测到的所述新内存申请信息设置新的标记。
14、在其中的一些实施例中,所述标记函数用于通过二进制数组,在每次循环结束时标记未释放的内存申请信息。
15、在其中的一些实施例中,所述二进制数组的位数与所述标记函数的循环次数对应,所述二进制数组中不同位置的数值对应所述标记函数的循环轮次。
16、在其中的一些实施例中,所述在所述标记函数执行结束后,根据所有的所述内存申请信息的标记,确定所述目标测试程序中发生内存泄漏的风险等级,包括:
17、在所述标记函数执行结束后,获取所有的所述内存申请信息,以及所述标记函数在执行过程中为所有的所述内存申请信息设置的所有标记;其中,具有相同堆栈信息和相同内存大小的内存申请信息,对应至少一种标记;
18、基于所述内存申请信息的堆栈信息和内存大小,对所述内存申请信息以及与所述内存申请信息对应的所述所有标记进行合并,得到合并后的内存申请信息,以及与所述合并后的内存申请信息对应的合并标记;
19、基于所述合并标记确定所述堆栈信息对应的目标测试程序发生内存泄漏的风险等级。
20、在其中的一些实施例中,所述基于所述合并标记确定所述堆栈信息对应的目标测试程序发生内存泄漏的风险等级,包括:
21、在所述内存申请信息的合并标记通过二进制数组表示的情况下,基于所述二进制数组的值确定所述堆栈信息对应的目标测试程序发生内存泄漏的风险等级。
22、在其中的一些实施例中,所述基于所述合并标记确定所述堆栈信息对应的目标测试程序发生内存泄漏的风险等级,包括:
23、基于所述合并标记,确定所述内存申请信息中每个堆栈地址在所有循环次数中的内存申请次数;
24、基于所述每个堆栈地址在所有循环次数中的内存申请次数,确定所述目标测试程序中发生内存泄漏的风险等级。
25、第二个方面,在本实施例中提供了一种内存泄漏检测装置,包括:标记模块以及检测模块;其中:
26、所述标记模块,用于在目标测试程序调用入口函数时,基于重定向跳转执行预设的标记函数;其中,所述标记函数用于执行所述入口函数,并在执行完所述入口函数时标记未释放的内存申请信息;
27、所述检测模块,用于在所述标记函数执行结束后,根据所有的所述内存申请信息的标记,确定所述目标测试程序中发生内存泄漏的风险等级。
28、第三个方面,在本实施例中提供了一种电子装置,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述第一个方面所述的内存泄漏检测方法。
29、第四个方面,在本实施例中提供了一种移动设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行上述第一个方面所述的内存泄漏检测方法。
30、第五个方面,在本实施例中提供了一种存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述第一个方面所述的内存泄漏检测方法。
31、与相关技术相比,在本实施例中提供的内存泄漏检测方法、装置、电子装置和移动设备,首先在目标测试程序调用入口函数时,基于重定向跳转执行预设的标记函数;其中,标记函数用于执行入口函数,并在执行完入口函数时标记未释放的内存申请信息;之后,在标记函数执行结束后,根据所有的内存申请信息的标记,确定目标测试程序中发生内存泄漏的风险等级。其能够基于对入口函数的执行和内存申请信息的标记,实现对内存泄漏风险的判断,无需对内存申请信息进行逐条分析判断,进而提高内存泄漏风险判断的效率。
32、本申请的一个或多个实施例的细节在以下附图和描述中提出,以使本申请的其他特征、目的和优点更加简明易懂。
1.一种内存泄漏检测方法,其特征在于,包括:
2.根据权利要求1所述的内存泄漏检测方法,其特征在于,所述标记函数用于循环执行所述入口函数,并在每次循环执行完所述入口函数之后,标记未释放的内存申请信息。
3.根据权利要求2所述的内存泄漏检测方法,其特征在于,所述标记函数用于在每次循环执行完所述入口函数之后,检测未释放的内存申请信息中未标记的新内存申请信息;以及对所述新内存申请信息设置新的标记。
4.根据权利要求3所述的内存泄漏检测方法,其特征在于,所述检测未释放的内存申请信息中未标记的新内存申请信息包括:
5.根据权利要求3所述的内存泄漏检测方法,其特征在于,所述对所述新内存申请信息设置新的标记包括:
6.根据权利要求2至5中任一项所述的内存泄漏检测方法,其特征在于,所述标记函数用于通过二进制数组,在每次循环结束时标记未释放的内存申请信息。
7.根据权利要求6所述的内存泄漏检测方法,其特征在于,所述二进制数组的位数与所述标记函数的循环次数对应,所述二进制数组中不同位置的数值对应所述标记函数的循环轮次。
8.根据权利要求1所述的内存泄漏检测方法,其特征在于,所述在所述标记函数执行结束后,根据所有的所述内存申请信息的标记,确定所述目标测试程序中发生内存泄漏的风险等级,包括:
9.根据权利要求8所述的内存泄漏检测方法,其特征在于,所述基于所述合并标记确定所述堆栈信息对应的目标测试程序发生内存泄漏的风险等级,包括:
10.根据权利要求8所述的内存泄漏检测方法,其特征在于,所述基于所述合并标记确定所述堆栈信息对应的目标测试程序发生内存泄漏的风险等级,包括:
11.一种内存泄漏检测装置,其特征在于,包括:标记模块以及检测模块;其中:
12.一种电子装置,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行权利要求1至10中任一项所述的内存泄漏检测方法。
13.一种移动设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行权利要求1至10中任一项所述的内存泄漏检测方法。
14.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至10中任一项所述的内存泄漏检测方法的步骤。