本发明涉及测试,具体涉及内存溢出处理方法、装置、电子设备和存储介质。
背景技术:
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、基于自定义的内存溢出测试条件中的内存大小子条件,获取所述内存申请信息中的所述内存申请大小;
33、将所述内存申请大小与所述内存大小子条件进行匹配。
34、可选的,本发明实施例提供的内存溢出处理装置还包括内存分配单元,用于若匹配失败,基于所述内存申请信息和所述内存申请函数,为所述目标测试程序分配内存。
35、相应的,本发明实施例还提供一种电子设备,包括存储器和处理器;所述存储器存储有应用程序,所述处理器用于运行所述存储器内的应用程序,以执行本发明实施例所提供的任一种内存溢出处理方法中的步骤。
36、相应的,本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有多条指令,所述指令适于处理器进行加载,以执行本发明实施例所提供的任一种内存溢出处理方法中的步骤。
37、此外,本发明实施例还提供一种计算机程序产品,包括计算机程序或指令,所述计算机程序或指令被处理器执行时实现本发明实施例所提供的任一种内存溢出处理方法中的步骤。
38、采用本发明实施例的方案,可以接收目标测试程序对于内存申请函数的调用请求,该调用请求包括内存申请信息,从该调用请求中获取该内存申请信息,基于该内存申请信息与自定义的内存溢出测试条件进行匹配,若匹配成功,不为该目标测试程序分配内存,而基于该内存申请信息获取出现内存溢出时需要返回的溢出错误信息,将该溢出错误信息返回给该目标测试程序,触发该目标测试程序根据该溢出错误信息进行内存溢出处理;由于在本发明实施例中,每当有对于内存申请函数的调用请求,会先将调用请求中的内存申请信息与自定义的内存溢出测试条件匹配,若匹配成功则说明此处调用内存的代码即为需要进行内存溢出测试的代码,针对需要进行内存溢出测试的代码不进行申请内存的过程,而是将内存溢出时会返回的错误信息直接提供给代码,因此,可以无需测试人员根据实验和测试经验设置程序申请内存的参数,使测试人员能够通过设置内存溢出测试条件的方式,准确地控制想要进行内存溢出测试的程序位置和测试时机,提升内存溢出测试的效率和效果。