内存泄漏监控方法、装置及电子设备与流程

文档序号:20163675发布日期:2020-03-24 21:16阅读:182来源:国知局
内存泄漏监控方法、装置及电子设备与流程

本发明涉及计算机技术领域,具体涉及一种内存泄漏监控方法、装置及电子设备。



背景技术:

电子设备中的软件程序可能存在内存泄漏的问题,会导致程序运行不稳定,最严重的情况会导致程序崩溃。而定位内存泄漏却不是一件容易的事情。程序代码逻辑越复杂,内存泄漏的地方就可能越隐蔽。当发生内存泄漏,会影响软件运行的稳定性。



技术实现要素:

本发明实施例提供了一种内存泄漏监控方法、装置及电子设备,可对程序中的内存泄漏的代码进行定位,从而提高程序运行的稳定性。

本发明实施例第一方面提供了一种内存泄漏监控方法,应用于电子设备,包括:

获取目标程序运行过程中的内存分配信息以及内存释放信息;

若所述内存分配信息与所述内存释放信息不一致,确定存在内存泄漏;

获取所述目标程序对应的函数调用栈信息;

根据所述函数调用栈信息对所述目标程序中存在内存泄漏的位置进行定位,得到至少一个目标函数。

结合本发明实施例的第一方面,在第一方面的第一种可能的实施方式中,所述内存分配信息包括多个分配内存地址以及多个分配内存大小,每一所述分配内存地址对应一个所述分配内存大小,所述内存释放信息包括多个释放内存地址以及多个释放内存大小,每一所述释放内存地址对应一个所述释放内存大小,所述方法还包括:

若所述多个分配内存地址与所述多个释放内存地址一一对应,将所述多个分配内存地址中每一分配内存地址的分配内存大小与所述每一分配内存地址对应的释放内存地址的释放内存大小进行对比;

若所述多个分配内存地址中所述每一分配内存地址的分配内存大小与进行对比的释放内存大小一致,确定所述内存分配信息与所述内存释放信息一致;否则,确定所述内存分配信息与所述内存释放信息不一致。

结合本发明实施例的第一方面或第一方面的第一种可能实施方式,在第一方面的第二种可能的实施方式中,所述函数调用栈信息还包括多个调用栈标识,每一所述调用栈标识对应一个函数调用链包括的至少一个调用函数对应的至少一个函数地址,每一所述调用函数对应一个函数地址,所述根据所述函数调用栈信息对所述目标程序中存在内存泄漏的位置进行定位,得到至少一个目标函数,包括:

根据预设的内存地址与调用栈标识之间的映射关系确定所述目标程序中存在内存泄漏的目标分配内存地址或目标释放内存地址对应的目标调用栈标识;

根据所述目标调用栈标识查找所述函数调用栈信息,得到与所述目标调用栈标识对应的至少一个目标函数地址;

确定所述至少一个目标函数地址中每一目标函数地址对应的目标函数,得到至少一个目标函数。

结合本发明实施例的第一方面的第二种可能的实施方式,在第一方面的第三种可能的实施方式中,所述确定存在内存泄漏的分配内存地址或释放内存地址对应的目标调用栈标识,包括:

根据预设的分配内存地址和调用栈标识之间的第一映射关系确定与所述目标分配内存地址对应的目标调用栈标识;或者,

根据预设的释放内存地址和调用栈标识之间的第二映射关系确定与所述目标释放内存地址对应的目标调用栈标识。

结合本发明实施例的第一方面的第二种可能的实施方式,在第一方面的第四种可能的实施方式中,所述方法还包括:

在所述目标程序运行过程中,监控所述目标程序中的预设函数,所述预设函数为所述多个函数中的一个函数;

在所述预设函数被调用时,记录所述目标程序的内存分配信息和内存释放信息;根据所述内存分配信息和所述内存释放信息生成目标记录文件;

所述获取目标程序运行过程中的内存分配信息以及内存释放信息,包括:

读取所述目标记录文件,得到所述内存分配信息以及所述内存释放信息。

结合本发明实施例的第一方面或第一方面的第一种可能实施方式,在第一方面的第五种可能的实施方式中,所述方法还包括:

在所述目标程序运行过程中,监控所述目标程序中的预设函数,所述预设函数为所述多个函数中的一个函数;

在所述预设函数被调用时,记录所述目标程序的内存分配信息和内存释放信息;根据所述内存分配信息和所述内存释放信息生成目标记录文件;

所述获取目标程序运行过程中的内存分配信息以及内存释放信息,包括:

读取所述目标记录文件,得到所述内存分配信息以及所述内存释放信息。

本发明实施例第二方面提供了一种内存泄漏监控装置,包括:

获取单元,用于获取目标程序运行过程中的内存分配信息以及内存释放信息;

确定单元,用于若所述内存分配信息与所述内存释放信息不一致,确定存在内存泄漏;

所述获取单元,还用于获取所述目标程序对应的函数调用栈信息;

定位单元,用于根据所述函数调用栈信息对所述目标程序中存在内存泄漏的位置进行定位,得到至少一个目标函数。

结合本发明实施例的第二方面,在第二方面的第一种可能的实施方式中,所述函数调用栈信息还包括多个调用栈标识,每一所述调用栈标识对应一个函数调用链包括的至少一个调用函数对应的至少一个函数地址,每一所述调用函数对应一个函数地址,所述定位单元具体用于:

根据预设的内存地址与调用栈标识之间的映射关系确定所述目标程序中存在内存泄漏的目标分配内存地址或目标释放内存地址对应的目标调用栈标识;

根据所述目标调用栈标识查找所述函数调用栈信息,得到与所述目标调用栈标识对应的至少一个目标函数地址;

确定所述至少一个目标函数地址中每一目标函数地址对应的目标函数,得到至少一个目标函数。

结合本发明实施例的第二方面或第二方面的第一种可能的实施方式中,在第二方面的第二种可能的实施方式中,在所述确定存在内存泄漏的分配内存地址或释放内存地址对应的目标调用栈标识方面,所述定位单元具体用于:

根据预设的分配内存地址和调用栈标识之间的第一映射关系确定与所述目标分配内存地址对应的目标调用栈标识;或者,

根据预设的释放内存地址和调用栈标识之间的第二映射关系确定与所述目标释放内存地址对应的目标调用栈标识。

结合本发明实施例第二方面的第二种可能的实施方式中,在第二方面的第三种可能的实施方式中,所述内存分配信息包括多个分配内存地址以及多个分配内存大小,每一所述分配内存地址对应一个所述分配内存大小,所述内存释放信息包括多个释放内存地址以及多个释放内存大小,每一所述释放内存地址对应一个所述释放内存大小,所述确定单元还用于:

若所述多个分配内存地址与所述多个释放内存地址一一对应,将所述多个分配内存地址中每一分配内存地址的分配内存大小与所述每一分配内存地址对应的释放内存地址的释放内存大小进行对比;

若所述多个分配内存地址中所述每一分配内存地址的分配内存大小与进行对比的释放内存大小一致,确定所述内存分配信息与所述内存释放信息一致;否则,确定所述内存分配信息与所述内存释放信息不一致。

结合本发明实施例的第二方面的第二种可能的实施方式,在第二方面的第四种可能的实施方式中,所述获取单元,还用于:

在所述目标程序运行过程中,监控所述目标程序中的预设函数,所述预设函数为所述多个函数中的一个函数;

在所述预设函数被调用时,记录所述目标程序的内存分配信息和内存释放信息;根据所述内存分配信息和所述内存释放信息生成目标记录文件;

在所述获取目标程序运行过程中的内存分配信息以及内存释放信息方面,所述获取单元具体用于:

读取所述目标记录文件,得到所述内存分配信息以及所述内存释放信息。

本发明实施例第三方面提供了一种电子设备,包括:

处理器和存储器;

其中,所述处理器通过调用所述存储器中的代码或指令以用于执行一种内存泄漏监控方法;其中,所述方法包括:

获取目标程序运行过程中的内存分配信息以及内存释放信息;

若所述内存分配信息与所述内存释放信息不一致,确定存在内存泄漏;

获取所述目标程序对应的函数调用栈信息;

根据所述函数调用栈信息对所述目标程序中存在内存泄漏的位置进行定位,得到至少一个目标函数。

本发明实施例第四方面提供一种计算机程序产品,其中,当所述计算机程序产品中的指令被处理器执行时,执行本发明实施例所述的一种内存泄漏监控方法。

本发明实施例第五方面提供一种计算机可读存储介质,其中,当所述存储介质中的指令被电子设备的处理器执行时,使得所述电子设备执行本发明实施例的所述的一种内存泄漏监控方法。

实施本发明实施例,具有如下有益效果:

可以看出,通过本发明实施例获取目标程序运行过程中的内存分配信息以及内存释放信息;若内存分配信息与内存释放信息不一致,确定存在内存泄漏;获取目标程序对应的函数调用栈信息;根据函数调用栈信息对目标程序中存在内存泄漏的位置进行定位,得到至少一个目标函数。如此,可通过监控程序运行时产生的内存分配信息以及内存释放信息,对程序中的内存泄漏的代码进行定位,从而提高程序运行的稳定性。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1a是本发明实施例提供的一种内存泄漏监控方法的第一实施例流程示意图;

图1b是本发明中函数调用栈中存储函数调用栈信息的示例图;

图2是本发明实施例提供的一种内存泄漏监控方法的第二实施例流程示意图;

图3是本发明实施例提供的一种内存泄漏监控装置的实施例结构示意图;

图4是本发明实施例提供的一种电子设备的实施例结构示意图。

具体实施方式

本发明实施例提供了一种用于内存泄漏监控方法、装置及电子设备,可快速读取锁屏信息卡片。

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明的说明书和权利要求书及所述附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本发明的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。

本发明实施例提供了一种内存泄漏监控方法,应用于电子设备,本发明实施例所描述的电子设备可以包括智能手机(如android手机)、平板电脑、掌上电脑、笔记本电脑、移动互联网设备(mid,mobileinternetdevices)或穿戴式设备等,上述设备仅是举例,而非穷举,包含但不限于上述电子设备。

请参阅图1a,为本发明实施例提供的一种内存泄漏监控方法的第一实施例流程示意图。本实施例中所描述的内存泄漏监控方法,应用于电子设备,包括以下步骤:

101、获取目标程序运行过程中的内存分配信息以及内存释放信息。

其中,上述内存分配信息可包括:多个分配内存地址以及多个分配内存大小,每一所述分配内存地址对应一个所述分配内存大小,上述内存释放信息可以包括多个释放内存地址以及多个释放内存大小,每一释放内存地址对应一个释放内存大小。

可选地,在执行上述步骤101之前,还可包括以下步骤:

在所述目标程序运行过程中,监控所述目标程序中的预设函数,所述预设函数为所述多个函数中的一个函数;

在所述预设函数被调用时,记录所述目标程序的内存分配信息和内存释放信息;根据所述内存分配信息和所述内存释放信息生成目标记录文件;

所述获取目标程序运行过程中的内存分配信息以及内存释放信息,包括:

读取所述目标记录文件,得到所述内存分配信息以及所述内存释放信息。

其中,上述预设函数可以是内存分配和内存释放的系统函数。本发明实施例中,可在进行内存分配时,监控内存分配的系统函数,并记录程序运行过程中已经分配的多个分配内存地址,以及,在进行内存释放时,监控内存释放的系统函数,并记录已经释放的多个释放内存地址。然后,可根据记录的多个分配内存地址和释放内存地址生存目标记录文件。

进而,可在需要确定是否存在内存泄露时,读取目标记录文件中的多个分配内存地址和释放内存地址。

102、若所述内存分配信息与所述内存释放信息不一致,确定存在内存泄漏。

其中,在获取内存分配信息与所述内存释放信息之后,可根据内存分配信息与内存释放信息确定是否存在内存泄露,具体地,可将内存分配信息与内存释放信息进行对比,确定内存分配信息与内存释放信息是否一致,若是,可确定不存在内存泄露,进而可终止本流程,若内存分配信息与内存释放信息不一致,可确定存在内存泄露。

可选地,本发明实施例中,还可包括以下步骤:

若所述多个分配内存地址与所述多个释放内存地址一一对应,将所述多个分配内存地址中每一分配内存地址的分配内存大小与所述每一分配内存地址对应的释放内存地址的释放内存大小进行对比;

若所述多个分配内存地址中所述每一分配内存地址的分配内存大小与进行对比的释放内存大小一致,确定所述内存分配信息与所述内存释放信息一致;否则,确定所述内存分配信息与所述内存释放信息不一致。

其中,可先将多个分配内存地址与多个释放内存地址进行对比,若多个分配内存地址与多个释放内存地址不一一对应,可确定内存分配信息与内存释放信息不一致,例如,程序执行了10次内存分配操作,产生了10个内存分配地址,但程序仅执行了8次内存释放操作,产生了8个内存分配地址,则有2个内存分配地址没有被释放,可确定内存分配信息与内存释放信息不一致。

若多个分配内存地址与多个释放内存地址一一对应,可进一步将多个分配内存地址中每一分配内存地址的分配内存大小与每一分配内存地址对应的释放内存地址的释放内存大小进行对比,若多个分配内存地址中每一分配内存地址的分配内存大小与进行对比的释放内存大小一致,确定内存分配信息与内存释放信息一致,进而,可确定不存在内存泄漏,若存在至少一个分配内存大小和释放内存大小不一致,可确定内存分配信息与内存释放信息不一致,进而,可确定存在内存泄露。

103、获取所述目标程序对应的函数调用栈信息。

本发明实施例中,在程序运行过程中,会调用多个函数,可将多个函数之间的调用关系记录在函数调用栈中,如图1b所示,为本发明中函数调用栈中存储函数调用栈信息的示例图,其中,存在函数调用关系之间的多个函数形成一个函数调用链,例如,函数a调用函数b,函数b调用预设函数,预设函数可以是进行内存分配的系统函数或进行内存释放的系统函数,函数a、函数b和预设函数之间存在函数调用关系,形成一个函数调用链。针对每一个存在函数调用关系的函数调用链中的多个调用函数,可生成该函数调用链对应的调用栈标识,并将该调用栈标识和函数调用链中的多个调用函数的多个函数地址存储在函数调用栈中,从而,函数调用栈中包括的函数调用栈信息可包括多个调用栈标识,以及多个函数地址,其中,每一调用栈标识对应一个函数调用链中的多个调用函数的多个函数地址,每一调用函数对应一个函数地址。

104、根据所述函数调用栈信息对所述目标程序中存在内存泄漏的位置进行定位,得到至少一个目标函数。

其中,对目标程序中存在内存泄漏的位置进行定位,具体可定位程序代码中存在内存泄漏的至少一个目标函数对应的代码。首先,可确定内存分配信息以及内存释放信息进行对比,然后根据对比结果确定哪些内存地址存在内存泄漏,例如哪些内存地址未被释放,进而,可根据存在内存泄漏的内存地址确定函数调用栈信息中的至少一个目标函数,该至少一个目标函数为在调用过程中产生内存泄漏的函数。

从而,可以准确地对存在内存泄漏的至少一个目标函数进行定位,辅助开发人员针对目标程序中存在内存泄漏的至少一个目标函数对应的程序代码进行修复,从而提高软件运行的稳定性。

可选地,上述步骤104中,所述函数调用栈信息还包括多个调用栈标识,每一所述调用栈标识对应一个函数调用链包括的至少一个调用函数对应的至少一个函数地址,每一所述调用函数对应一个函数地址,根据所述函数调用栈信息对所述目标程序中存在内存泄漏的位置进行定位,得到至少一个目标函数,可包括如下步骤:

根据预设的内存地址与调用栈标识之间的映射关系确定所述目标程序中存在内存泄漏的目标分配内存地址或目标释放内存地址对应的目标调用栈标识;

根据所述目标调用栈标识查找所述函数调用栈信息,得到与所述目标调用栈标识对应的至少一个目标函数地址;

确定所述至少一个目标函数地址中每一目标函数地址对应的目标函数,得到至少一个目标函数。

其中,可预先设定内存地址与调用栈标识之间的映射关系,进而,可在确定存在内存泄漏的目标分配内存地址或目标释放内存地址之后,确定目标分配内存地址或目标释放内存地址对应的目标调用栈标识,进而,根据目标调用栈标识查找函数调用栈信息中与目标调用栈标识对应的至少一个目标函数地址,最后确定与至少一个目标函数地址对应的至少一个目标函数。从而,可根据函数调用栈信息确定存在内存泄漏的至少一个目标函数。

可选地,上述步骤,确定存在内存泄漏的分配内存地址或释放内存地址对应的目标调用栈标识,可包括如下步骤:

根据预设的分配内存地址和调用栈标识之间的第一映射关系确定与所述目标分配内存地址对应的目标调用栈标识;或者,

根据预设的释放内存地址和调用栈标识之间的第二映射关系确定与所述目标释放内存地址对应的目标调用栈标识。

其中,本发明实施例可预先设定分配内存地址和调用栈标识之间的第一映射关系,进而,可根据第一映射关系确定与分配内存地址对应的目标调用栈标识,或者,可预先设定释放内存地址和调用栈标识之间的第二映射关系,进而,可根据第二映射关系确定与分配内存地址对应的目标调用栈标识,从而,可准确地根据存在内存泄漏的分配内存地址或释放内存地址确定与存在内存泄漏的分配内存地址或释放内存地址有关的至少一个目标函数。

举例说明,假定根据内存分配信息以及内存释放信息对比的结果,得到多个分配内存地址中的目标分配内存地址ad1存在内存泄漏,即在程序运行过程中,分配了内存地址ad1,但未对内存地址ad1进行释放操作,则可根据预设的第一映射关系确定目标分配内存地址ad1对应的目标调用栈标识id1,进而,可根据目标调用栈标识id1查找函数调用栈信息的函数a、函数b和进行内存分配的系统函数f,其中,函数a调用函数b,函数b调用系统函数f,则可确定函数a、函数b和系统函数f为存在内存泄漏的目标函数。

可以看出,通过本发明实施例获取目标程序运行过程中的内存分配信息以及内存释放信息;若内存分配信息与内存释放信息不一致,确定存在内存泄漏;获取目标程序对应的函数调用栈信息;根据函数调用栈信息对目标程序中存在内存泄漏的位置进行定位,得到至少一个目标函数。如此,可通过监控程序运行时产生的内存分配信息以及内存释放信息,对程序中的内存泄漏的代码进行定位,从而提高程序运行的稳定性。

请参阅图2,为本发明实施例提供的一种内存泄漏监控方法的第二实施例流程示意图。本实施例中所描述的内存泄漏监控方法,应用于电子设备,包括以下步骤:

201、获取目标程序运行过程中的内存分配信息以及内存释放信息。

202、若所述内存分配信息与所述内存释放信息不一致,确定存在内存泄漏。

203、若所述多个分配内存地址中所述每一分配内存地址的分配内存大小与进行对比的释放内存大小一致,确定所述内存分配信息与所述内存释放信息一致;否则,确定所述内存分配信息与所述内存释放信息不一致。

204、获取所述目标程序对应的函数调用栈信息,所述函数调用栈信息还包括多个调用栈标识,每一所述调用栈标识对应一个函数调用链包括的至少一个调用函数对应的至少一个函数地址,每一所述调用函数对应一个函数地址。

205、根据预设的内存地址与调用栈标识之间的映射关系确定所述目标程序中存在内存泄漏的目标分配内存地址或目标释放内存地址对应的目标调用栈标识。

206、根据所述目标调用栈标识查找所述函数调用栈信息,得到与所述目标调用栈标识对应的至少一个目标函数地址。

207、确定所述至少一个目标函数地址中每一目标函数地址对应的目标函数,得到至少一个目标函数。

其中,上述步骤201-步骤207可参照图1a所描述的内存泄漏监控方法的对应步骤,在此不再赘述。

可以看出,通过本发明实施例获取目标程序运行过程中的内存分配信息以及内存释放信息;若内存分配信息与内存释放信息不一致,确定存在内存泄漏;获取目标程序对应的函数调用栈信息;根据预设的内存地址与调用栈标识之间的映射关系确定目标程序中存在内存泄漏的目标分配内存地址或目标释放内存地址对应的目标调用栈标识;根据目标调用栈标识查找函数调用栈信息,得到与目标调用栈标识对应的至少一个目标函数地址;确定至少一个目标函数地址中每一目标函数地址对应的目标函数,得到至少一个目标函数,如此,可通过监控程序运行时产生的内存分配信息以及内存释放信息,对程序中的内存泄漏的代码进行定位,从而提高程序运行的稳定性。

请参阅图3,为本发明实施例提供的一种内存泄漏监控装置的实施例结构示意图。本实施例中所描述的装置,包括:获取单元301、确定单元302和定位单元303,具体如下:

所述获取单元301,用于获取目标程序运行过程中的内存分配信息以及内存释放信息;

所述确定单元302,用于若所述内存分配信息与所述内存释放信息不一致,确定存在内存泄漏;

所述获取单元301,还用于获取所述目标程序对应的函数调用栈信息;

所述定位单元303,用于根据所述函数调用栈信息对所述目标程序中存在内存泄漏的位置进行定位,得到至少一个目标函数。

可选地,所述函数调用栈信息还包括多个调用栈标识,每一所述调用栈标识对应一个函数调用链包括的至少一个调用函数对应的至少一个函数地址,每一所述调用函数对应一个函数地址,所述定位单元303具体用于:

根据预设的内存地址与调用栈标识之间的映射关系确定所述目标程序中存在内存泄漏的目标分配内存地址或目标释放内存地址对应的目标调用栈标识;

根据所述目标调用栈标识查找所述函数调用栈信息,得到与所述目标调用栈标识对应的至少一个目标函数地址;

确定所述至少一个目标函数地址中每一目标函数地址对应的目标函数,得到至少一个目标函数。

可选地,在所述确定存在内存泄漏的分配内存地址或释放内存地址对应的目标调用栈标识方面,所述定位单元303具体用于:

根据预设的分配内存地址和调用栈标识之间的第一映射关系确定与所述目标分配内存地址对应的目标调用栈标识;或者,

根据预设的释放内存地址和调用栈标识之间的第二映射关系确定与所述目标释放内存地址对应的目标调用栈标识。

可选地,所述内存分配信息包括多个分配内存地址以及多个分配内存大小,每一所述分配内存地址对应一个所述分配内存大小,所述内存释放信息包括多个释放内存地址以及多个释放内存大小,每一所述释放内存地址对应一个所述释放内存大小,所述确定单元302还用于:

若所述多个分配内存地址与所述多个释放内存地址一一对应,将所述多个分配内存地址中每一分配内存地址的分配内存大小与所述每一分配内存地址对应的释放内存地址的释放内存大小进行对比;

若所述多个分配内存地址中所述每一分配内存地址的分配内存大小与进行对比的释放内存大小一致,确定所述内存分配信息与所述内存释放信息一致;否则,确定所述内存分配信息与所述内存释放信息不一致。

可选地,所述获取单元301还用于:

在所述目标程序运行过程中,监控所述目标程序中的预设函数,所述预设函数为所述多个函数中的一个函数;

在所述预设函数被调用时,记录所述目标程序的内存分配信息和内存释放信息;根据所述内存分配信息和所述内存释放信息生成目标记录文件;

在所述获取目标程序运行过程中的内存分配信息以及内存释放信息方面,所述获取单元具体用于:

读取所述目标记录文件,得到所述内存分配信息以及所述内存释放信息。

可以看出,通过本发明实施例获取目标程序运行过程中的内存分配信息以及内存释放信息;若内存分配信息与内存释放信息不一致,确定存在内存泄漏;获取目标程序对应的函数调用栈信息;根据函数调用栈信息对目标程序中存在内存泄漏的位置进行定位,得到至少一个目标函数。如此,可通过监控程序运行时产生的内存分配信息以及内存释放信息,对程序中的内存泄漏的代码进行定位,从而提高程序运行的稳定性。

请参阅图4,为本发明实施例提供的一种电子设备的实施例结构示意图。本实施例中所描述的电子设备,包括:至少一个输入设备1000;至少一个输出设备2000;至少一个处理器3000,例如cpu;和存储器4000,上述输入设备1000、输出设备2000、处理器3000和存储器4000通过总线5000连接。

其中,上述输入设备1000具体可为触控面板、物理按键或者鼠标。

上述输出设备2000具体可为显示屏。

上述存储器4000可以是高速ram存储器,也可为非不稳定的存储器(non-volatilememory),例如磁盘存储器。上述存储器4000用于存储一组程序代码,上述输入设备1000、输出设备2000和处理器3000用于调用存储器4000中存储的程序代码,执行如下操作:

上述处理器3000,用于:

获取目标程序运行过程中的内存分配信息以及内存释放信息;

若所述内存分配信息与所述内存释放信息不一致,确定存在内存泄漏;

获取所述目标程序对应的函数调用栈信息;

根据所述函数调用栈信息对所述目标程序中存在内存泄漏的位置进行定位,得到至少一个目标函数。

可选地,所述函数调用栈信息还包括多个调用栈标识,每一所述调用栈标识对应一个函数调用链包括的至少一个调用函数对应的至少一个函数地址,每一所述调用函数对应一个函数地址,在所述根据所述函数调用栈信息对所述目标程序中存在内存泄漏的位置进行定位,得到至少一个目标函数方面,上述处理器3000具体用于:

根据预设的内存地址与调用栈标识之间的映射关系确定所述目标程序中存在内存泄漏的目标分配内存地址或目标释放内存地址对应的目标调用栈标识;

根据所述目标调用栈标识查找所述函数调用栈信息,得到与所述目标调用栈标识对应的至少一个目标函数地址;

确定所述至少一个目标函数地址中每一目标函数地址对应的目标函数,得到至少一个目标函数。

可选地,在所述确定存在内存泄漏的分配内存地址或释放内存地址对应的目标调用栈标识方面,上述处理器3000具体用于:

根据预设的分配内存地址和调用栈标识之间的第一映射关系确定与所述目标分配内存地址对应的目标调用栈标识;或者,

根据预设的释放内存地址和调用栈标识之间的第二映射关系确定与所述目标释放内存地址对应的目标调用栈标识。

可选地,所述内存分配信息包括多个分配内存地址以及多个分配内存大小,每一所述分配内存地址对应一个所述分配内存大小,所述内存释放信息包括多个释放内存地址以及多个释放内存大小,每一所述释放内存地址对应一个所述释放内存大小,上述处理器3000还用于:

若所述多个分配内存地址与所述多个释放内存地址一一对应,将所述多个分配内存地址中每一分配内存地址的分配内存大小与所述每一分配内存地址对应的释放内存地址的释放内存大小进行对比;

若所述多个分配内存地址中所述每一分配内存地址的分配内存大小与进行对比的释放内存大小一致,确定所述内存分配信息与所述内存释放信息一致;否则,确定所述内存分配信息与所述内存释放信息不一致。

可选地,上述处理器3000,上述处理器3000还用于:

在所述目标程序运行过程中,监控所述目标程序中的预设函数,所述预设函数为所述多个函数中的一个函数;

在所述预设函数被调用时,记录所述目标程序的内存分配信息和内存释放信息;根据所述内存分配信息和所述内存释放信息生成目标记录文件;

在所述获取目标程序运行过程中的内存分配信息以及内存释放信息方面,所述获取单元具体用于:

读取所述目标记录文件,得到所述内存分配信息以及所述内存释放信息。

本发明实施例还提供一种计算机程序产品,其中,当所述计算机程序产品中的指令被处理器执行时,执行本发明实施例所述的一种内存泄漏监控方法。

本发明实施例还提供一种计算机存储介质,其中,该计算机存储介质可存储有程序,该程序执行时包括上述方法实施例中记载的任意一种内存泄漏监控方法的部分或全部步骤。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

在本发明所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1