动态库的内存操作记录方法、装置、设备及存储介质制造方法及图纸

技术编号:24497534 阅读:24 留言:0更新日期:2020-06-13 03:38
本申请是关于一种动态库的内存操作记录方法、装置、计算机设备及存储介质。该方法包括:在被测应用运行过程中,响应于对内存操作函数的调用,获取调用的函数地址,以及本次的内存操作信息;通过所述函数地址获取本次发起调用所述内存操作函数的动态库的标识;将所述动态库的标识以及所述内存操作信息写入内存操作日志。由于本方案获取到的内存操作日志中同时包含了内存操作信息以及发起调用的动态库的标识,相比于简单的PSS能够从更细的粒度上体现出被测应用的运行过程中,各个动态库各自的内存占用情况,从而提高内存占用分析的效果。

Memory operation recording method, device, equipment and storage medium of dynamic library

【技术实现步骤摘要】
动态库的内存操作记录方法、装置、设备及存储介质
本申请实施例涉及计算机
,特别涉及一种动态库的内存操作记录方法、装置、计算机设备及存储介质。
技术介绍
在应用程序开发中,为了避免应用程序占用过多的内存资源而影响应用的正常运行,通常需要测试应用程序的内存占用。在相关技术中,应用程序的开发者可以通过应用程序开发工具中的内存分析功能来测试应用程序的内存占用情况。以开发手机应用为例,开发者在开发一个应用之后,将该应用在手机中运行,同时通过通用串行总线(UniversalSerialBus,USB)连接手机和电脑,并在电脑中启动应用程序开发工具中的内存分析功能,之后,应用程序开发工具可以连续获取手机在运行上述应用过程中实际使用的物理内存(ProportionalSetSize,PSS)。然而,相关技术所示的方案只能获取到应用运行过程中的实际使用的物理内存PSS,而PSS只能指示内存占用是否异常,无法辅助分析内存占用异常的原因,导致内存占用分析的效果较差。
技术实现思路
本申请实施例提供了一种动态库的内存操作记录方法、装置、计算机设备及存储介质,可以提高内存占用分析的效果,该技术方案如下:一方面,提供了一种动态库的内存操作记录方法,所述方法由运行被测应用的计算机设备执行,所述方法包括:在被测应用运行过程中,响应于对内存操作函数的调用,获取调用的函数地址,以及本次的内存操作信息;通过所述函数地址获取本次发起调用所述内存操作函数的动态库的标识;将所述动态库的标识以及所述内存操作信息写入内存操作日志。另一方面,提供了一种动态库的内存操作记录装置,用于运行被测应用的计算机设备中,所述装置包括:第一获取模块,用于在被测应用运行过程中,响应于对内存操作函数的调用,获取调用的函数地址,以及本次的内存操作信息;第二获取模块,用于通过所述函数地址获取本次发起调用所述内存操作函数的动态库的标识;写入模块,用于将所述动态库的标识以及所述内存操作信息写入内存操作日志。在一种可能的实现方式中,所述第一获取模块,包括:拦截单元,用于通过钩子函数拦截对所述内存操作函数的调用;回溯单元,用于回溯所述内存操作函数的函数调用栈,得到所述函数地址;调用执行单元,用于执行对所述内存操作函数的调用,得到所述内存操作信息。在一种可能的实现方式中,所述回溯单元,用于,通过展开操作进行堆栈回溯,将回溯得到所述函数调用栈保存为第一数组;将所述第一数组中的元素提取为所述函数地址。在一种可能的实现方式中,所述第二获取模块,包括:符号信息获取单元,用于通过调用地址符号获取函数,获得所述函数地址的符号信息;标识获取单元,用于从所述符号信息中获取所述动态库的标识。在一种可能的实现方式中,所述符号信息获取单元,用于,通过调用所述地址符号获取函数,将所述函数地址转化为指定数据结构;将所述指定数据结构获取为所述符号信息;所述标识获取单元,用于将所述指定数据结构中的目标字段提取为所述动态库的标识。在一种可能的实现方式中,所述内存操作信息包括内存大小、目标内存地址以及所述内存操作函数的标识;所述写入模块,用于将所述内存大小、所述目标内存地址、所述内存操作函数的标识以及所述动态库的标识存储为所述内存操作日志中的一条日志数据。在一种可能的实现方式中,所述写入模块,用于响应于所述动态库是指定动态库,将所述动态库的标识以及所述内存操作信息写入所述内存操作日志。在一种可能的实现方式中,所述装置还包括:第一界面展示模块,用于在所述第一获取模块在被测应用运行过程中,响应于对内存操作函数的调用,获取调用的函数地址,以及本次的内存操作信息之前,展示动态库设置界面;动态库设置模块,用于响应于在所述动态库设置界面中的设置操作,设置所述指定动态库。在一种可能的实现方式中,所述装置还包括:输出模块,用于响应于所述被测应用运行结束,将所述内存操作日志输出至目标设备。在一种可能的实现方式中,所述输出模块,用于,通过通用串行总线USB接口将所述内存操作日志输出至所述目标设备;或者,通过所述目标设备对应的互联网地址,将所述内存操作日志输出至所述目标设备。在一种可能的实现方式中,所述装置还包括:第二界面展示模块,用于在所述输出设备通过所述目标设备对应的互联网地址,将所述内存操作日志输出至所述目标设备之前,展示地址设置界面;地址设置模块,用于响应于在所述地址设置界面中的设置操作,设置所述目标设备对应的互联网地址。在一种可能的实现方式中,所述内存操作函数包括以下函数中的至少一种:动态内存分配函数malloc、动态内存分配并做初始化函数calloc、动态内存调整函数realloc、队列对齐内存分配函数memalign、内存释放函数free。另一方面,提供了一种计算机设备,所述计算机设备包含处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如上所述的动态库的内存操作记录方法。另一方面,提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如上所述的动态库的内存操作记录方法。本申请提供的技术方案可以包括以下有益效果:通过在运行被测应用的过程中,在内存操作函数被调用时,获取函数地址和内存操作信息,通过函数地址获取发起调用的动态库的标识,并将动态库的标识以及内存操作信息一并写入内存操作日志,由于本方案获取到的内存操作日志中同时包含了内存操作信息以及发起调用的动态库的标识,相比于简单的PSS能够从更细的粒度上体现出被测应用的运行过程中,各个动态库各自的内存占用情况,从而提高内存占用分析的效果。应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。附图说明此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。图1是本申请各个实施例涉及的一种应用开发测试系统的系统构成图;图2是根据一示例性实施例示出的一种动态库的内存操作记录方法的流程图;图3是根据一示例性实施例示出的一种动态库的内存操作记录方法的流程图;图4是图3所示实施例涉及的回溯函数调用栈的函数关系图;图5是图3所示实施例涉及的内存操作日志的数据格式示意图;图6是图3所示实施例涉及的动态库设置界面示意图;图7是图3所示实施例涉及的内存操作记录示意图;图8是根据一示例性实施例示出的动态库的内存操作记录装置的结构方框图;图9是根据一示例性实施例本文档来自技高网...

【技术保护点】
1.一种动态库的内存操作记录方法,其特征在于,所述方法由运行被测应用的计算机设备执行,所述方法包括:/n在被测应用运行过程中,响应于对内存操作函数的调用,获取调用的函数地址,以及本次的内存操作信息;/n通过所述函数地址获取本次发起调用所述内存操作函数的动态库的标识;/n将所述动态库的标识以及所述内存操作信息写入内存操作日志。/n

【技术特征摘要】
1.一种动态库的内存操作记录方法,其特征在于,所述方法由运行被测应用的计算机设备执行,所述方法包括:
在被测应用运行过程中,响应于对内存操作函数的调用,获取调用的函数地址,以及本次的内存操作信息;
通过所述函数地址获取本次发起调用所述内存操作函数的动态库的标识;
将所述动态库的标识以及所述内存操作信息写入内存操作日志。


2.根据权利要求1所述的方法,其特征在于,所述响应于对内存操作函数的调用,获取调用的函数地址,以及本次的内存操作信息,包括:
通过钩子函数拦截对所述内存操作函数的调用;
回溯所述内存操作函数的函数调用栈,得到所述函数地址;
执行对所述内存操作函数的调用,得到所述内存操作信息。


3.根据权利要求2所述的方法,其特征在于,所述回溯所述内存操作函数的函数调用栈,得到所述函数地址,包括:
通过展开操作进行堆栈回溯,将回溯得到所述函数调用栈保存为第一数组;
将所述第一数组中的元素提取为所述函数地址。


4.根据权利要求1所述的方法,其特征在于,所述通过所述函数地址获取本次发起调用所述内存操作函数的动态库的标识,包括:
通过调用地址符号获取函数,获得所述函数地址的符号信息;
从所述符号信息中获取所述动态库的标识。


5.根据权利要求4所述的方法,其特征在于,
所述通过调用地址符号获取函数,获得所述函数地址的符号信息,包括:
通过调用所述地址符号获取函数,将所述函数地址转化为指定数据结构;
将所述指定数据结构获取为所述符号信息;
所述从所述符号信息中获取所述动态库的标识,包括:
将所述指定数据结构中的目标字段提取为所述动态库的标识。


6.根据权利要求1所述的方法,其特征在于,所述内存操作信息包括内存大小、目标内存地址以及所述内存操作函数的标识;
所述将所述动态库的标识以及所述内存操作信息写入内存操作日志,包括:
将所述内存大小、所述目标内存地址、所述内存操作函数的标识以及所述动态库的标识存储为所述内存操作日志中的一条日志数据。


7.根据权利要求1所述的方法,其特征在于,所述将所述动态库的标识以及所述内存操作信息写入内存操作日志,包括:
响应于所述动态库是指定动态库,将所述动态库的标识以及所述内存操作信息写入所述内存操作日志。


8.根据权利要求7所述的方法,其特征...

【专利技术属性】
技术研发人员:叶前乾
申请(专利权)人:腾讯科技深圳有限公司
类型:发明
国别省市:广东;44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1