System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本申请涉及数据处理,尤其涉及一种内存泄露检测方法、装置、设备及介质。
技术介绍
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、第二方面,本申请提供了一种内存泄露检测装置,该内存泄露检测装置具有实现上述第一方面的方本文档来自技高网...
【技术保护点】
1.一种内存泄露检测方法,其特征在于,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,所述基于每个调用线程所占用的内存大小以及预设的内存阈值,确定是否存在内存泄露,包括:
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
4.根据权利要求3所述的方法,其特征在于,所述获得通过该中间函数调用所述内存申请函数的次数之后,所述方法还包括:
5.根据权利要求4所述的方法,其特征在于,所述根据所述每个中间函数对应的次数,确定导致发生内存泄露的异常函数,包括:
6.根据权利要求4所述的方法,其特征在于,所述根据所述每个中间函数对应的次数,确定导致发生内存泄露的异常函数,包括:
7.根据权利要求1-5任一项所述的方法,其特征在于,确定所述目标应用程序的过程包括:
8.根据权利要求7所述的方法,其特征在于,添加所述调用节点标记的过程包括:
9.根据权利要求8所述的方法,其特征在于,所述方法还包括:
10.一种电子设备,其特征在于,所述电子设备至少包括处理器和存储器,所述
...【技术特征摘要】
1.一种内存泄露检测方法,其特征在于,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,所述基于每个调用线程所占用的内存大小以及预设的内存阈值,确定是否存在内存泄露,包括:
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
4.根据权利要求3所述的方法,其特征在于,所述获得通过该中间函数调用所述内存申请函数的次数之后,所述方法还包括:
5.根据权利要求4所述的方法,其特征在于,所述根据所述每个中间函数对应的次数,确定导致发生内存泄露的异常函数,包括:
6.根据权利...
【专利技术属性】
技术研发人员:代松,朱春,张昊,罗青松,
申请(专利权)人:宁畅信息产业北京有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。