内存泄漏定位方法、装置、电子设备及可读存储介质与流程

未命名 09-17 阅读:101 评论:0


1.本技术涉及计算机技术领域,尤其涉及一种内存泄漏定位方法、装置、电子设备及可读存储介质。


背景技术:

2.内存资源在设备中是非常宝贵的,对软件工程师来说,会花很多时间和精力在如何高效和重复使用内存上。在重复使用内存的过程中,伴随着大量的内存申请和内存释放,在此过程中有可能会因为申请后忘记释放或者错误释放导致内存泄漏。目前的内存泄漏定位方法,一般是在应用程序的内存申请和内存释放处保存内存申请或释放信息,然后通过匹配内存申请和内存释放信息,将无法匹配的内存申请信息作为内存泄漏点。
3.但是由于嵌入式设备的内存资源和处理能力都十分有限,如果在应用程序的运行过程中同时定位内存泄漏点,会占用大量内存资源,消耗cpu性能,严重影响应用程序的正常运行,甚至无法运行。


技术实现要素:

4.为了不影响应用程序的正常运行,减少内存泄漏定位程序对内存资源的占用,本技术提供一种内存泄漏定位方法、装置、电子设备及可读存储介质。
5.第一方面,本技术提供一种内存泄漏定位方法,包括接收嵌入式设备中运行的应用程序发送的内存申请或释放信息;将所述内存申请或释放信息保存为内存使用文件;所述内存使用文件保存在所述嵌入式设备的内存之外的存储设备中,所述存储设备与所述嵌入式设备通过通信或挂载方式连接;读取所述内存使用文件进行内存泄漏分析,得到可疑内存泄漏点。
6.在上述实现过程中,通过接收嵌入式设备中应用程序发送的内存申请或释放信息,并将内存申请或释放信息保存在嵌入式设备的内存之外的存储设备的方式,一方面能够减少占用嵌入式设备的内存资源,另一方面,能够将内存泄漏定位方法与应用程序的运行相互剥离,避免影响应用程序的运行。
7.可选地,所述将所述内存申请或释放信息保存为内存使用文件,包括将所述内存申请或释放信息写入内存使用文件,每当所述内存使用文件大小超过预设大小时,关闭当前在写的内存使用文件,然后,重新创建一个新的内存使用文件,用于继续保存。所述预设大小不大于所述存储设备文件系统支持的最大文件大小。
8.在上述实现过程中,将内存使用文件保存为适度大小的文件形式,一方面可以提高内存泄漏定位程序查找单个内存使用文件的效率,另一方面,也有利于实现多线程并行分析。另一方面,存在内存泄漏的程序,在内存泄漏到一定程序时,容易发生异常,当设备异常退出时,最后一个内存使用文件来不及关闭,可能会无法读取,从而导致该文件数据丢失。但只要内存使用文件预设大小设置为合适范围,即使最后一个文件数据全丢失,也能通过前面所保存的内存使用文件得到可能的内存泄漏点。
9.可选地,在创建所述内存使用文件时,其文件名按照保存时间的先后顺序进行从小到大的顺序编号。
10.在上述实现过程中,通过对内存使用文件按照保存时间先后顺序对文件名进行从小到大的编号,从内存使用文件的编号即可反映出内存使用文件的时间属性,能够更加方便的对内存使用文件进行相关处理,例如根据文件名所包含的编号对文件按照编号顺序从小到大进行分组,然后,对各分组进行并行处理。
11.可选地,所述内存申请或释放信息包括内存申请或释放类型标识、内存地址及内存申请或释放位置,所述读取所述内存使用文件进行内存泄漏分析,得到可疑内存泄漏点,包括将所述内存使用文件分组,给每个分组分配一个组号,所述组号按分配的先后顺序进行编号;创建多个线程,并给每个线程按创建的前后顺序进行编号;所述线程的数量与所述内存使用文件分组的组数一致;所述线程编号和所述内存使用文件分组的组号对应;所述多个线程中的每个线程获取所述内存使用文件分组后的对应组号的一组内存使用文件,按文件名中所包含的编号从小到大顺序,针对每个内存使用文件,依次读取每条内存申请或释放信息;针对每条内存申请或释放信息,若所述内存申请或释放信息为内存释放信息,则保存该内存释放信息到缓存;若所述内存申请或释放信息为内存申请信息,依次读取后续内存释放信息,若所述后续内存释放信息的内存地址不能与所述内存申请信息的内存地址匹配,保存该内存申请信息到缓存;若能够匹配,从所述内存使用文件中删除与之匹配的内存释放信息。
12.当所有线程都处理完对应的一组内存使用文件后,主线程按线程编号从小到大顺序合并各所述线程中所述缓存中的内存申请信息与内存释放信息,对所述内存申请信息与内存释放信息按照内存地址进行匹配,删除匹配成功的内存申请信息及与之对应的内存释放信息;将缓存中的剩余的内存申请信息的内存申请位置确定为可疑内存泄漏点。
13.在上述实现过程中,通过使用多线程并行分析内存泄漏点的方式,能够极大提高内存泄漏定位程序的处理效率。并且通过按照内存使用文件的文件名的编号大小的方式进行内存申请信息和内存释放信息的处理和合并,由于内存使用文件是按照时间先后顺序生成的,其文件名也是根据文件生成时间先后顺序从小到大编号的,因此,根据编号从小到大的顺序合并内存申请信息和内存释放信息,能够更加方便的正确合并保存在缓存中的内存申请或释放信息。
14.可选地,所述内存申请信息与所述内存释放信息包括内存大小,当所述内存申请信息与所述内存释放信息匹配成功后,还包括校验所述内存申请信息与内存释放信息的内存大小是否一致,若不一致,进行报错。
15.在上述实现过程中,通过进一步校验内存申请信息与内存释放信息的内存大小是否一致,能够准确地判断保存内存资源申请和释放信息的程序本身是否存在错误。
16.第二方面,本技术提供一种内存泄漏定位装置,包括接收模块,用于接收嵌入式设备中运行的应用程序发送的内存申请或释放信息;存储模块,用于将所述内存申请或释放信息保存为内存使用文件;所述内存使用文件保存在所述嵌入式设备的内存之外的存储设备中,所述存储设备与所述嵌入式设备通过通信或挂载方式连接;分析模块,用于读取所述内存使用文件进行内存泄漏分析,得到可疑内存泄漏点。
17.可选地,所述存储模块,具体用于设置所述内存使用文件的容量为预设大小;所述
预设大小由考虑内存使用文件后续分析效率、设备异常退出导致最后一个文件来不及关闭,仍然可以根据以前保存的文件分析出可疑内存泄漏点、不大于所述存储设备文件系统支持的最大文件大小等因素而定;将所述内存申请或释放信息保存为所述内存使用文件,每当所述内存使用文件大小超过所述预设大小时,就关闭当前在写的内存使用文件,然后,重新创建一个新的内存使用文件,用于继续保存。
18.第三方面,本技术提供一种电子设备,包括处理器及存储器;所述处理器用于执行所述存储器中存储的程序,以实现如第一方面中任一项所述的内存泄漏定位方法。
19.第四方面,本技术提供一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现如第一方面中任一项所述的内存泄漏定位方法。
附图说明
20.为了更清楚地说明本技术实施例的技术方案,下面将对本技术实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本技术的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
21.图1为实施例一提供的一种内存泄漏定位方法流程示意图;
22.图2为实施例一提供的一种内存泄漏定位方法流程示意图;
23.图3为实施例二提供的一种内存泄漏定位装置结构示意图;
24.图4为实施例三提供的一种电子设备结构示意图。
具体实施方式
25.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行描述。
26.为了更好地理解本技术提供的内存泄漏定位方法、装置、电子设备及可读存储介质,下面对相关技术进行介绍。
27.目前定位内存泄漏点的方法一般是在应用程序运行时保存内存申请信息,内存申请信息包括所申请的内存地址及内存申请或释放位置,内存申请或释放位置是指程序代码中内存申请或释放的位置,比如行号、函数名等,程序运行过程中,碰到内存释放操作时,就将所释放的内存地址和前面保存的所有内存申请信息中的内存地址进行匹配,将能够匹配的内存申请信息删除,等程序运行一段时间后,再把剩余无法匹配的内存申请信息读出,其中的内存申请位置就是可疑内存泄漏点。这种方法将内存泄漏点分析与应用程序运行集成在一起,由于内存申请信息会保存在设备内存中,因此,当内存申请操作频繁,而申请的内存很久得不到释放,甚至本身就存在泄漏而根本得不到释放的情况,那保存内存申请信息将会消耗很多内存,当内存释放时,从前面保存的内存申请信息中匹配是否有内存泄漏,即内存泄漏点分析会占用大量处理器资源,严重影响了应用程序的正常运行,甚至无法运行。基于上述缺陷,本技术提供一种内存泄漏定位方法、装置、电子设备及计算机可读存储介质,将内存泄漏定位方法独立于应用程序,且将内存申请或释放信息保存在设备内存之外的存储设备中,减少对内存的占用,降低对应用程序正常运行的影响,只要时间足够长,就可以一次性把所有内存泄漏可疑点找出来。为了更好的理解本技术提供的内存泄漏定位方
法,下面对该方法的应用场景做简要介绍。
28.本技术提供的内存泄漏定位方法,主要应用于内存资源极其有限的电子设备中应用程序的内存泄漏定位场景。例如,嵌入式设备。当然,本技术提供的方法,也可以应用于一般电子设备,如个人电脑,服务器等的内存泄漏定位场景。
29.下面结合具体实施例对本技术提供的内存泄漏定位方法做详细介绍。
30.实施例一
31.为了降低内存泄漏定位方法对设备内存的占用,同时避免影响应用程序的正常运行,本技术实施例提供一种内存泄漏定位方法,该方法可以在个人电脑、服务器等独立于嵌入式设备的电子设备上实施,如图1所示,该方法包括:
32.s101:接收嵌入式设备中运行的应用程序发送的内存申请或释放信息。
33.其中,内存申请或释放信息分为内存申请信息与内存释放信息,内存申请信息与内存释放信息包括申请或释放的内存申请或释放的类型标识、内存地址、内存申请或释放位置、内存申请时间,可选地,还可以包括内存大小。只有申请和释放的是同一块内存地址,才说明申请的内存已经被成功释放,此处没有内存泄漏。内存申请或释放位置表征申请或释放的内存在程序中的位置,用于定位内存泄露点。内存申请或释放位置不做具体限定,可以根据实际需求来确定需要的信息。示例性地,可以包括内存申请或释放代码所在的行号、函数名、文件名、线程号、线程名等。内存申请时间可以辅助判断申请的内存是否是可疑内存泄露点。内存申请时间越久,且一直没有释放,该申请的内存越可能成为内存泄露点。内存大小可以在申请和释放内存的内存地址匹配的前提下,辅助校验是否存在内存管理上的错误,一般实现中,申请和释放内存的地址和大小都应相同,出现地址相同,而大小不同,说明存在内存管理或使用上的错误,会导致内存释放错误。
34.具体地,接收嵌入式设备中运行的应用程序发送的内存申请或释放信息的程序集成在应用程序中,一般放在申请或释放内存成功后。等内存申请或释放成功后,应用程序就将内存申请或释放信息发送给接收内存申请或释放信息的程序,接收内存申请或释放信息的程序接收该内存申请或释放信息。
35.示例性地,嵌入式设备申请内存的函数有:malloc,calloc,realloc等,释放内存的函数有free。接收内存申请或释放信息的程序可以放在这些申请或释放内存函数后调用。
36.s102:将内存申请或释放信息保存为内存使用文件。内存使用文件保存在嵌入式设备的内存之外的存储设备中,存储设备与嵌入式设备通过通信或挂载方式连接。
37.其中,该存储设备可以是嵌入式设备的挂载存储设备或者是独立于嵌入式设备之外的存储设备或具有存储设备的电子设备,如sd卡、外挂硬盘、个人电脑、服务器等。其中,sd卡需要设备有sd卡接口,外挂硬盘需要设备有usb或sata等接口,而使用个人电脑和服务器,需要设备有网络支持,目前功能稍微复杂的嵌入式设备,一般都具有网络。目前嵌入式设备常用nfs(network file system)挂载个人电脑和服务器共享的目录到设备中的某个目录,这样访问个人电脑和服务器共享的目录就像访问设备自带的目录一样。windows操作系统还常用cifs(common internet file system),这些都是现有公开的技术,这里不做赘述。
38.具体地,将内存申请或释放信息保存为内存使用文件,存储在上述存储设备中,可
以减少内存申请或释放信息对内存资源的占用。
39.在一种可行的实施方式中,步骤s102将内存申请或释放信息保存为内存使用文件,包括:
40.将内存申请或释放信息写入内存使用文件,每当内存使用文件大小超过预设大小时,关闭当前在写的内存使用文件,然后,重新创建一个新的内存使用文件,用于继续保存。所述预设大小由考虑内存使用文件后续分析效率、设备异常退出导致最后一个文件来不及关闭,仍然可以根据以前保存的文件分析出可疑内存泄漏点、不大于所述存储设备文件系统支持的最大文件大小等因素而定。
41.具体地,内存泄漏定位程序在将内存申请或释放信息写入内存使用文件前,判断内存申请或释放信息写入当前内存使用文件后,内存使用文件是否会超过预设大小,若超过,则关闭当前在写的内存使用文件,然后,重新创建一个内存使用文件写入传入的内存申请或释放信息,以后都按前述方法,重复操作。由于在进行内存泄漏定位时,要进行内存申请信息与其后面的内存释放信息的逐条匹配,内存使用文件过大,查找效率会比较低下,因此,保存为多个小文件的方式,有利于提高查找和匹配效率。
42.在一种可行的实施方式中,内存使用文件创建时文件名按照从小到大的顺序编号。
43.由于同一内存资源,需要先申请后释放,因此,将内存使用文件的文件名按照从小到大的顺序编号,先申请或释放的内存信息写入编号小的内存使用文件中,后申请或释放的内存信息写入编号大的内存使用文件中,编号较小的内存申请信息仅与编号相同或编号更大的内存释放信息进行匹配,这样能够较为简单方便的实现内存申请信息与内存释放信息的正确匹配。
44.在上述实现过程中,将内存使用文件保存为小文件的形式,一方面可以提高内存泄漏定位程序处理单个内存使用文件的效率,另一方面,也有利于实现多线程并行分析。
45.s103:读取内存使用文件进行内存泄漏分析,得到可疑内存泄漏点。
46.具体地,若内存使用文件仅为一个,从内存使用文件中依次获取每条内存申请或释放信息,若当前内存申请或释放信息为内存申请信息,则读取后续的内存释放信息,若内存申请信息能与后续内存释放信息的内存地址匹配,则将与之对应的内存释放信息删除,若不能匹配,则将该内存申请信息保存在缓存中。读取完全部的内存使用文件后,将缓存中保存的内存申请信息中包含的内存申请位置作为可疑内存泄漏点。
47.若内存使用文件为多个,那么按照上述方法按文件名包含的编号从小到大依次对每个内存使用文件中的内存申请信息及内存释放信息进行匹配,并将每个内存使用文件中无法匹配的内存申请信息和内存释放信息保存在同一个缓存中,处理完所有内存使用文件后,将保存在缓存中的所有内存申请信息和内存释放信息再次匹配,最后将缓存中所有无法相互匹配的内存申请信息的内存申请位置作为可疑内存泄漏点。
48.在一种可行的实施方式中,内存申请或释放信息包括内存申请或释放类型标识、内存地址及内存申请或释放位置,步骤s103当有多个内存使用文件需要处理时,读取内存使用文件进行内存泄漏分析,得到可疑内存泄漏点,如图2所示,包括:
49.s1031:将内存使用文件分组;给每个分组分配一个组号,所述组号按所分配的前后顺序进行编号。
50.其中,预设组数根据内存使用文件的数量和用于分析内存泄漏的计算机cpu核数而定,具体数量不做限定,原则上以提高内存泄漏分析效率而定。
51.具体地,为了充分利用计算机的多核cpu处理能力,具体预设组数可根据计算机的cpu核数确定,分组时使得每个分组的内存使用文件数目尽量平均。简单做法,用内存使用文件总数除以预设组数,得到每个分组文件数,如果不能整除,假设余数为n,则分别给其中(比如,最前面的)n个分组的文件数加1。算出每个分组的文件个数后,接下来给每个分组按所分配的前后顺序进行编号,并指派内存使用文件;指派内存使用文件时,按文件名中所包含的编号从小到大进行,也就是每个分组的文件名中所包含的编号是从小到大连续的。
52.在上述实现过程中,将内存使用文件进行分组,这样适合于计算机创建多个线程进行并行处理,提高处理的效率,减少分析的时间;另外,确保每个分组中的内存使用文件按文件名中所包含的编号或文件保存时间从小到大排序,这样每个分组中的内存使用文件逐个解析后,内存申请和释放地址相同的信息项相互删除后,残余的内存信息根据解析的前后顺序合并在一起,仍然是符合实际的申请和释放顺序的。
53.s1032:创建多个线程,并给每个线程按创建的前后顺序进行编号。线程数量与内存使用文件分组的组数一致;所述线程编号和所述内存使用文件分组的组号对应。
54.线程数量与内存使用文件分组的组数一致,也就是实际线程数量根据内存使用文件的数量和用于分析内存泄漏的计算机cpu核数而定,具体线程数量不做限定,原则上以提高内存泄漏分析效率而定。
55.s1033:多个线程中的每个线程获取所述内存使用文件分组后的对应组号的一组内存使用文件。
56.具体地,启动每个线程时,会把分配给它处理的一组内存使用文件名传给它,这组内存使用文件前面步骤已经按其文件名所包含的编号进行排序,这里只需要按顺序读取到缓存中进行处理。
57.在上述实现过程中,先把整个内存使用文件读取到缓存中,而不是逐条读取再分析,可有效提交内存泄漏分析的效率。
58.s1034:按文件名中所包含的编号从小到大顺序,针对每个内存使用文件,对应线程依次读取每条内存申请或释放信息。
59.具体地,线程从缓存中依次读取每条内存申请或释放信息。
60.s1035:针对每条内存申请或释放信息,若为内存申请信息,依次读取后续内存释放信息,若后续内存释放信息的内存地址不能与内存申请信息的内存地址匹配,保留该内存申请信息。若能够匹配,从缓存中删除该内存申请信息及与之匹配的内存释放信息。
61.s1036:当所有线程都处理完对应的一组内存使用文件后,主线程按线程编号从小到大顺序合并各所述线程中所述缓存中的内存申请信息与内存释放信息,对该新缓存中的内存申请信息与内存释放信息按照内存地址进行匹配,删除匹配成功的内存申请信息及与之对应的内存释放信息。
62.在一种可行的实施方式中,内存申请信息与内存释放信息包括内存大小,步骤s1035当内存申请信息与内存释放信息匹配成功后,还包括:
63.校验内存申请信息与内存释放信息的内存大小是否一致,若不一致,进行报错。
64.具体地,在内存申请信息与内存释放信息的内存地址相互匹配的前提下,继续校
验内存申请或释放信息的内存大小,若不相同,则说明存在内存管理或使用上的错误,一般实现中,申请和释放内存的地址和大小都应相同,出现地址相同,而大小不同,说明存在内存管理或使用上的错误,会导致内存释放错误。
65.在上述实现过程中,通过进一步校验内存申请信息与内存释放信息的内存大小是否一致,能够辅助判断内存资源是否泄漏。
66.s1037:将缓存中的剩余的内存申请信息的内存申请位置确定为可疑内存泄漏点。
67.在上述实现过程中,通过使用多线程并行分析内存泄漏点的方式,能够极大提高内存泄漏定位程序的处理效率。
68.在上述实现过程中,通过将接收嵌入式设备中应用程序发送的内存申请或释放信息,并将内存申请或释放信息保存在嵌入式设备的内存之外的存储设备的方式,一方面能够减少占用嵌入式设备的内存资源,另一方面,能够将内存泄漏定位方法与应用程序的运行相互剥离,避免影响应用程序的运行。
69.实施例二
70.基于同一发明构思,本技术实施例提供一种内存泄漏定位装置200,如图3所示,内存泄漏定位装置200包括:
71.接收模块201,用于接收嵌入式设备中运行的应用程序发送的内存申请或释放信息。
72.存储模块202,用于将内存申请或释放信息保存为内存使用文件。内存使用文件保存在嵌入式设备的内存之外的存储设备中,存储设备与嵌入式设备通过通信或挂载方式连接。
73.分析模块203,用于读取内存使用文件进行内存泄漏分析,得到可疑内存泄漏点。
74.存储模块202,具体用于将所述内存申请或释放信息写入内存使用文件,每当所述内存使用文件大小超过预设大小时,就关闭当前在写的内存使用文件,然后,重新创建一个新的内存使用文件,用于继续保存。所述预设大小由考虑内存使用文件后续分析效率、设备异常退出导致最后一个文件来不及关闭,仍然可以根据以前保存的文件分析出可疑内存泄漏点、不大于所述存储设备文件系统支持的最大文件大小等因素而定。
75.存储模块202,具体用于内存使用文件创建时文件名按照从小到大的顺序编号。
76.分析模块203,具体用于将所述内存使用文件分组;给每个分组分配一个组号,所述组号按所分配的前后顺序进行编号;创建多个线程,并给每个线程按创建的前后顺序进行编号;所述线程数量与所述内存使用文件分组的组数一致;所述多个线程中的每个线程获取所述内存使用文件分组后的对应组号的一组内存使用文件,按文件名中所包含的编号从小到大顺序,针对每个内存使用文件,对应线程依次读取每条内存申请或释放信息;针对每条内存申请或释放信息,若所述内存申请或释放信息为内存申请信息,依次读取后续内存释放信息,若所述后续内存释放信息的内存地址不能与所述内存申请信息的内存地址匹配,保留该内存申请信息;若能够匹配,从所述内存使用文件中删除该内存申请信息及与之匹配的内存释放信息;当所有线程都处理完对应的一组内存使用文件后,按线程编号从小到大顺序,合并各所述线程中所述缓存中的内存申请信息与内存释放信息,对所述内存申请信息与内存释放信息按照内存地址进行匹配,删除匹配成功的内存申请信息及与之对应的内存释放信息;将缓存中的剩余的内存申请信息的内存申请位置确定为可疑内存泄漏
点。
77.分析模块203,还用于校验所述内存申请信息与内存释放信息的内存大小是否一致,若不一致,进行报错。
78.实施例三
79.本技术实施例提供一种电子设备300,如图4所示,电子设备300包括:处理器301及存储器302。处理器301用于执行存储器302中存储的程序,以实现如实施例一中任一项所述的内存泄漏定位方法。
80.可以理解,图4所示的结构仅为示意,电子设备还可包括比图4中所示更多或者更少的组件,或者具有与图4所示不同的配置。
81.例如,处理器301和存储器302之间可以是通过通信总线的方式进行的连接。又例如,电子设备还可包括诸如显示器、鼠标、键盘等部件。
82.在本技术实施例中,处理器301可以为中央处理器、微处理器、单片机等,但不作为限制。存储器302可以为随机存取存储器,只读存储器,可编程只读存储器,可擦除只读存储器,电可擦除只读存储器等,但不作为限制。
83.在本技术实施例中,电子设备可以是,但不限于台式机、笔记本电脑、智能手机、智能穿戴设备、车载设备等实体设备,还可以是虚拟机等虚拟设备。另外,电子设备也不一定是单台设备,还可以是多台设备的组合,例如服务器集群,等等。
84.本实施例还提供了一种计算机可读存储介质,如软盘、光盘、硬盘、闪存、u盘、sd(secure digital memory card,安全数码卡)卡、mmc(multimedia card,多媒体卡)卡等,在该计算机可读存储介质中存储有实现上述各个步骤的一个或者多个程序,这一个或者多个程序可被一个或者多个处理器执行,以实现上述实施例一所述的内存泄漏定位方法。在此不再赘述。
85.在本技术所提供的实施例中,应该理解到,所揭露装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。
86.在本技术各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
87.在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。
88.在本文中,多个是指两个或两个以上。
89.以上仅为本技术的实施例而已,并不用于限制本技术的保护范围,对于本领域的技术人员来说,本技术可以有各种更改和变化。凡在本技术的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本技术的保护范围之内。

技术特征:
1.一种内存泄漏定位方法,其特征在于,包括:接收嵌入式设备中运行的应用程序发送的内存申请或释放信息;将所述内存申请或释放信息保存为内存使用文件;所述内存使用文件保存在所述嵌入式设备的内存之外的存储设备中,所述存储设备与所述嵌入式设备通过通信或挂载方式连接;读取所述内存使用文件进行内存泄漏分析,得到可疑内存泄漏点。2.如权利要求1所述的内存泄漏定位方法,其特征在于,所述将所述内存申请或释放信息保存为内存使用文件,包括:将所述内存申请或释放信息写入内存使用文件,每当所述内存使用文件大小超过预设大小时,就关闭当前在写的内存使用文件,并重新创建一个新的内存使用文件,用于继续保存,所述预设大小不大于所述存储设备文件系统支持的最大文件大小。3.如权利要求2所述的内存泄漏定位方法,其特征在于,在创建所述内存使用文件时,其文件名按照保存时间的先后顺序进行从小到大编号。4.如权利要求3所述的内存泄漏定位方法,其特征在于,所述内存申请或释放信息包括内存申请或释放类型标识、内存地址及内存申请或释放位置,所述读取所述内存使用文件进行内存泄漏分析,得到可疑内存泄漏点,包括:将所述内存使用文件分组;给每个分组分配一个组号,所述组号按分配的先后顺序进行编号;创建多个线程,并给每个线程按创建的前后顺序进行编号;所述多个线程的数量与所述内存使用文件分组的组数一致;所述线程编号和所述内存使用文件分组的组号对应;所述多个线程中的每个线程获取所述内存使用文件分组后的对应组号的一组内存使用文件;按文件名中所包含的编号从小到大顺序,针对每个内存使用文件,依次读取每条内存申请或释放信息;针对每条内存申请或释放信息,若所述内存申请或释放信息为内存释放信息,则保存该内存释放信息到缓存;若所述内存申请或释放信息为内存申请信息,依次读取后续内存释放信息,若所述后续内存释放信息的内存地址不能与所述内存申请信息的内存地址匹配,保存该内存申请信息到缓存;若能够匹配,从所述内存使用文件中删除与之匹配的内存释放信息;当所有线程都处理完对应的一组内存使用文件后,主线程按线程编号从小到大顺序合并各所述线程中所述缓存中的内存申请信息与内存释放信息,对所述内存申请信息与内存释放信息按照内存地址进行匹配,删除匹配成功的内存申请信息及与之对应的内存释放信息;将缓存中的剩余的内存申请信息的内存申请位置确定为可疑内存泄漏点。5.如权利要求4所述的内存泄漏定位方法,其特征在于,所述内存申请信息与所述内存释放信息包括内存大小,当所述内存申请信息与所述内存释放信息匹配成功后,还包括:校验所述内存申请信息与内存释放信息的内存大小是否一致,若不一致,进行报错。6.一种内存泄漏定位装置,其特征在于,包括:接收模块,用于接收嵌入式设备中运行的应用程序发送的内存申请或释放信息;
存储模块,用于将所述内存申请或释放信息保存为内存使用文件;所述内存使用文件保存在所述嵌入式设备的内存之外的存储设备中,所述存储设备与所述嵌入式设备通过通信或挂载方式连接;分析模块,用于读取所述内存使用文件进行内存泄漏分析,得到可疑内存泄漏点。7.如权利要求6所述的内存泄漏定位装置,其特征在于,所述存储模块,具体用于将所述内存申请或释放信息写入内存使用文件,每当所述内存使用文件大小超过预设大小时,就关闭当前在写的内存使用文件,然后,重新创建一个新的内存使用文件,用于继续保存。所述预设大小不大于所述存储设备文件系统支持的最大文件大小。8.一种电子设备,其特征在于,包括:处理器及存储器;所述处理器用于执行所述存储器中存储的程序,以实现如权利要求1至6中任一项所述的内存泄漏定位方法。9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现如权利要求1至6中任一项所述的内存泄漏定位方法。

技术总结
本申请提供一种内存泄漏定位方法、装置、电子设备及可读存储介质,该方法包括:接收嵌入式设备中运行的应用程序发送的内存申请或释放信息;将所述内存申请或释放信息保存为内存使用文件;所述内存使用文件保存在所述嵌入式设备的内存之外的存储设备中,所述存储设备与所述嵌入式设备通过通信或挂载方式连接;读取所述内存使用文件进行内存泄漏分析,得到可疑内存泄漏点。疑内存泄漏点。疑内存泄漏点。


技术研发人员:陈文荣
受保护的技术使用者:杭州杰峰科技有限公司
技术研发日:2023.06.20
技术公布日:2023/9/16
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐