CN111274155B - 动态库的内存操作记录方法、装置、设备及存储介质 - Google Patents
动态库的内存操作记录方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN111274155B CN111274155B CN202010116208.5A CN202010116208A CN111274155B CN 111274155 B CN111274155 B CN 111274155B CN 202010116208 A CN202010116208 A CN 202010116208A CN 111274155 B CN111274155 B CN 111274155B
- Authority
- CN
- China
- Prior art keywords
- function
- memory operation
- memory
- dynamic library
- address
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3644—Software debugging by instrumenting at runtime
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/366—Software debugging using diagnostics
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请是关于一种动态库的内存操作记录方法、装置、计算机设备及存储介质。该方法包括:在被测应用运行过程中,响应于对内存操作函数的调用,获取调用的函数地址,以及本次的内存操作信息;通过所述函数地址获取本次发起调用所述内存操作函数的动态库的标识;将所述动态库的标识以及所述内存操作信息写入内存操作日志。由于本方案获取到的内存操作日志中同时包含了内存操作信息以及发起调用的动态库的标识,相比于简单的PSS能够从更细的粒度上体现出被测应用的运行过程中,各个动态库各自的内存占用情况,从而提高内存占用分析的效果。
Description
技术领域
本申请实施例涉及计算机技术领域,特别涉及一种动态库的内存操作记录方法、装置、计算机设备及存储介质。
背景技术
在应用程序开发中,为了避免应用程序占用过多的内存资源而影响应用的正常运行,通常需要测试应用程序的内存占用。
在相关技术中,应用程序的开发者可以通过应用程序开发工具中的内存分析功能来测试应用程序的内存占用情况。以开发手机应用为例,开发者在开发一个应用之后,将该应用在手机中运行,同时通过通用串行总线(Universal Serial Bus,USB)连接手机和电脑,并在电脑中启动应用程序开发工具中的内存分析功能,之后,应用程序开发工具可以连续获取手机在运行上述应用过程中实际使用的物理内存(Proportional Set Size,PSS)。
然而,相关技术所示的方案只能获取到应用运行过程中的实际使用的物理内存PSS,而PSS只能指示内存占用是否异常,无法辅助分析内存占用异常的原因,导致内存占用分析的效果较差。
发明内容
本申请实施例提供了一种动态库的内存操作记录方法、装置、计算机设备及存储介质,可以提高内存占用分析的效果,该技术方案如下:
一方面,提供了一种动态库的内存操作记录方法,所述方法由运行被测应用的计算机设备执行,所述方法包括:
在被测应用运行过程中,响应于对内存操作函数的调用,获取调用的函数地址,以及本次的内存操作信息;
通过所述函数地址获取本次发起调用所述内存操作函数的动态库的标识;
将所述动态库的标识以及所述内存操作信息写入内存操作日志。
另一方面,提供了一种动态库的内存操作记录装置,用于运行被测应用的计算机设备中,所述装置包括:
第一获取模块,用于在被测应用运行过程中,响应于对内存操作函数的调用,获取调用的函数地址,以及本次的内存操作信息;
第二获取模块,用于通过所述函数地址获取本次发起调用所述内存操作函数的动态库的标识;
写入模块,用于将所述动态库的标识以及所述内存操作信息写入内存操作日志。
在一种可能的实现方式中,所述第一获取模块,包括:
拦截单元,用于通过钩子函数拦截对所述内存操作函数的调用;
回溯单元,用于回溯所述内存操作函数的函数调用栈,得到所述函数地址;
调用执行单元,用于执行对所述内存操作函数的调用,得到所述内存操作信息。
在一种可能的实现方式中,所述回溯单元,用于,
通过展开操作进行堆栈回溯,将回溯得到所述函数调用栈保存为第一数组;
将所述第一数组中的元素提取为所述函数地址。
在一种可能的实现方式中,所述第二获取模块,包括:
符号信息获取单元,用于通过调用地址符号获取函数,获得所述函数地址的符号信息;
标识获取单元,用于从所述符号信息中获取所述动态库的标识。
在一种可能的实现方式中,所述符号信息获取单元,用于,
通过调用所述地址符号获取函数,将所述函数地址转化为指定数据结构;
将所述指定数据结构获取为所述符号信息;
所述标识获取单元,用于将所述指定数据结构中的目标字段提取为所述动态库的标识。
在一种可能的实现方式中,所述内存操作信息包括内存大小、目标内存地址以及所述内存操作函数的标识;
所述写入模块,用于将所述内存大小、所述目标内存地址、所述内存操作函数的标识以及所述动态库的标识存储为所述内存操作日志中的一条日志数据。
在一种可能的实现方式中,所述写入模块,用于响应于所述动态库是指定动态库,将所述动态库的标识以及所述内存操作信息写入所述内存操作日志。
在一种可能的实现方式中,所述装置还包括:
第一界面展示模块,用于在所述第一获取模块在被测应用运行过程中,响应于对内存操作函数的调用,获取调用的函数地址,以及本次的内存操作信息之前,展示动态库设置界面;
动态库设置模块,用于响应于在所述动态库设置界面中的设置操作,设置所述指定动态库。
在一种可能的实现方式中,所述装置还包括:
输出模块,用于响应于所述被测应用运行结束,将所述内存操作日志输出至目标设备。
在一种可能的实现方式中,所述输出模块,用于,
通过通用串行总线USB接口将所述内存操作日志输出至所述目标设备;
或者,
通过所述目标设备对应的互联网地址,将所述内存操作日志输出至所述目标设备。
在一种可能的实现方式中,所述装置还包括:
第二界面展示模块,用于在所述输出设备通过所述目标设备对应的互联网地址,将所述内存操作日志输出至所述目标设备之前,展示地址设置界面;
地址设置模块,用于响应于在所述地址设置界面中的设置操作,设置所述目标设备对应的互联网地址。
在一种可能的实现方式中,所述内存操作函数包括以下函数中的至少一种:
动态内存分配函数malloc、动态内存分配并做初始化函数calloc、动态内存调整函数realloc、队列对齐内存分配函数memalign、内存释放函数free。
另一方面,提供了一种计算机设备,所述计算机设备包含处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如上所述的动态库的内存操作记录方法。
另一方面,提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如上所述的动态库的内存操作记录方法。
本申请提供的技术方案可以包括以下有益效果:
通过在运行被测应用的过程中,在内存操作函数被调用时,获取函数地址和内存操作信息,通过函数地址获取发起调用的动态库的标识,并将动态库的标识以及内存操作信息一并写入内存操作日志,由于本方案获取到的内存操作日志中同时包含了内存操作信息以及发起调用的动态库的标识,相比于简单的PSS能够从更细的粒度上体现出被测应用的运行过程中,各个动态库各自的内存占用情况,从而提高内存占用分析的效果。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
图1是本申请各个实施例涉及的一种应用开发测试系统的系统构成图;
图2是根据一示例性实施例示出的一种动态库的内存操作记录方法的流程图;
图3是根据一示例性实施例示出的一种动态库的内存操作记录方法的流程图;
图4是图3所示实施例涉及的回溯函数调用栈的函数关系图;
图5是图3所示实施例涉及的内存操作日志的数据格式示意图;
图6是图3所示实施例涉及的动态库设置界面示意图;
图7是图3所示实施例涉及的内存操作记录示意图;
图8是根据一示例性实施例示出的动态库的内存操作记录装置的结构方框图;
图9是根据一示例性实施例示出的一种计算机设备的结构示意图;
图10是根据一示例性实施例示出的一种计算机设备的结构示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
本申请实施例提出了一种内存操作的记录方案,该方案能够在相比于PSS更细粒度的记录应用运行过程中的内存操作。为了便于理解,下面对本申请涉及的名词进行解释。
1)动态库
动态库是一种不可执行的二进制程序文件,允许程序共享执行特殊任务所必需的代码和其它资源。
动态库又称为动态链接库(Dynamic Link Library,或者,Dynamic-linkLibrary,DLL),是在操作系统中实现共享函数库概念的一种方式。
动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个DLL文件中,该DLL包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。DLL还有助于共享数据和资源。多个应用程序可同时访问内存中单个DLL副本的内容。
使用动态链接库可以更为容易地将更新应用于各个模块,而不会影响该程序的其他部分。例如,有一个大型网络游戏,如果把整个数百MB甚至数GB的游戏的代码都放在一个应用程序里,日后的修改工作将会十分费时,而如果把不同功能的代码分别放在数个动态链接库中,无需重新生成或安装整个程序就可以应用更新。
动态链接库文件,是一种不可执行的二进制程序文件,它允许程序共享执行特殊任务所必需的代码和其他资源。
2)钩子函数
钩子(Hook)函数是一种用于改变api执行结果的技术,通过修改api函数入口点,改变它的地址指向新的自定义函数。
钩子函数是操作系统消息处理机制的一部分,通过设置“钩子”,应用程序可以在系统级对所有消息、事件进行过滤,访问在正常情况下无法访问的消息。钩子的本质是一段用以处理系统消息的程序,通过系统调用,将其挂入系统。
请参考图1,其示出了本申请各个实施例涉及的一种应用开发测试系统的系统构成图。如图1所示,该系统包括应用开发设备120以及应用运行设备140。
其中,应用开发设备120是开发人员开发应用程序的计算机设备。比如,该应用开发设备120可以是个人计算机、移动工作站等等。
应用运行设备140可以是运行开发人员开发出的应用程序的计算机设备。比如,该应用运行设备140可以是智能手机、平板电脑、电子书阅读器、智能眼镜、智能手表、MP3播放器(Moving Picture Experts Group Audio Layer III,动态影像专家压缩标准音频层面3)、MP4(Moving Picture Experts Group Audio Layer IV,动态影像专家压缩标准音频层面4)播放器、笔记本电脑或台式电脑等等。可选的,该应用运行设备140还可能被称为用户设备、便携式终端、膝上型终端、台式终端等。
应用开发设备120和应用运行设备140之间可以通过有线方式连接。比如,可以应用开发设备120和应用运行设备140之间可以通过USB连接。
或者,应用开发设备120和应用运行设备140之间可以通过通信网络相连。可选的,该通信网络是有线网络或无线网络。
可选的,上述的无线网络或有线网络使用标准通信技术和/或协议。网络通常为因特网、但也可以是任何网络,包括但不限于局域网(Local Area Network,LAN)、城域网(Metropolitan Area Network,MAN)、广域网(Wide Area Network,WAN)、移动、有线或者无线网络、专用网络或者虚拟专用网络的任何组合)。在一些实施例中,使用包括超文本标记语言(Hyper Text Mark-up Language,HTML)、可扩展标记语言(Extensible MarkupLanguage,XML)等的技术和/或格式来代表通过网络交换的数据。此外还可以使用诸如安全套接字层(Secure Socket Layer,SSL)、传输层安全(Transport Layer Security,TLS)、虚拟专用网络(Virtual Private Network,VPN)、网际协议安全(Internet ProtocolSecurity,IPsec)等常规加密技术来加密所有或者一些链路。在另一些实施例中,还可以使用定制和/或专用数据通信技术取代或者补充上述数据通信技术。
图2是根据一示例性实施例示出的一种动态库的内存操作记录方法的流程图,该动态库的内存操作记录方法可以用于运行被测应用的计算机设备,比如上述图1所示应用运行设备140中。如图2所示,该动态库的内存操作记录方法可以包括如下步骤:
步骤21,在被测应用运行过程中,响应于对内存操作函数的调用,获取调用的函数地址,以及本次的内存操作信息。
其中,该内存操作函数可以是分配或者释放内存的函数。
比如,上述内存操作函数可以包括以下函数中的至少一种:
动态内存分配函数malloc、动态内存分配并做初始化函数calloc、动态内存调整函数realloc、队列对齐内存分配函数memalign、内存释放函数free。
可选的,上述内存操作信息可以包括以下信息中的至少一种:
内存大小、目标内存地址以及内存操作函数的标识。
步骤22,通过该函数地址获取本次发起调用内存操作函数的动态库的标识。
步骤23,将该动态库的标识以及该内存操作信息写入内存操作日志。
综上所述,本申请实施例所示的方案,在运行被测应用的过程中,计算机设备在内存操作函数被调用时,获取函数地址和内存操作信息,通过函数地址获取发起调用的动态库的标识,并将动态库的标识以及内存操作信息一并写入内存操作日志,由于本方案获取到的内存操作日志中同时包含了内存操作信息以及发起调用的动态库的标识,相比于简单的PSS能够从更细的粒度上体现出被测应用的运行过程中,各个动态库各自的内存占用情况,从而提高内存占用分析的效果。
图3是根据一示例性实施例示出的一种动态库的内存操作记录方法的流程图,该动态库的内存操作记录方法可以用于运行被测应用的计算机设备,比如上述图1所示应用运行设备140中。如图3所示,该动态库的内存操作记录方法可以包括如下步骤:
步骤301,在被测应用运行过程中,通过钩子函数拦截对内存操作函数的调用。
在本申请实施例中,被测应用运行过程中,当某个动态库需要执行内存操作,比如,占用或者释放内存时,可以调用相应的内存操作函数。
相应的,计算机设备可以通过Hook函数监测操作系统中对内存操作函数的调用,当操作系统中发生对内存操作函数的调用事件时,通过Hook函数将该调用指向自定义函数,由该自定义函数执行函数地址获取以及函数调用等步骤。其中,该自定义函数的执行过程可以参考后续步骤。
步骤302,回溯该内存操作函数的函数调用栈,得到该函数地址。
可选的,计算机设备可以通过展开操作进行堆栈回溯,将回溯得到该函数调用栈保存为第一数组;并将该第一数组中的元素提取为该函数地址。
其中,上述展开操作可以是unwind操作。
程序的执行过程可看作连续的函数调用。当一个函数执行完毕时,程序要回到调用指令的下一条指令(紧接call指令)处继续执行。函数调用过程通常使用堆栈实现,每个用户态进程对应一个调用栈结构(call stack)。编译器使用堆栈传递函数参数、保存返回地址、临时保存寄存器原有值(即函数调用的上下文)以备恢复以及存储本地局部变量。
其中,不同处理器和编译器的堆栈布局、函数调用方法都可能不同,但堆栈的基本概念是一样的。
函数调用通常是嵌套的,在同一时刻,堆栈中会有多个函数的信息。每个未完成运行的函数占用一个独立的连续区域,称作栈帧(Stack Frame)。栈帧是堆栈的逻辑片段,当调用函数时逻辑栈帧被压入堆栈,当函数返回时逻辑栈帧被从堆栈中弹出。栈帧存放着函数参数,局部变量及恢复前一栈帧所需要的数据等。
编译器利用栈帧,使得函数参数和函数中局部变量的分配与释放透明。编译器将控制权移交函数本身之前,插入特定代码将函数参数压入栈帧中,并分配足够的内存空间用于存放函数中的局部变量。使用栈帧的一个好处是使得递归变为可能,因为对函数的每次递归调用,都会分配给该函数一个新的栈帧,这样就可以隔离当前调用与上次调用。
本申请所示的方案,通过unwind操作来回溯内存操作函数的函数调用栈,从而得到函数地址。
步骤303,执行对该内存操作函数的调用,得到该内存操作信息。
其中,计算机设备可以通过hook运行时的内存分配调用malloc、calloc、realloc、memalign、free等函数,替换为自定义函数,并在自定义函数中使用unwind回溯函数调用堆栈。
其中,自定义函数指开发人员自己实现的包装函数,比如将malloc调用替换为自定义的myMalloc函数,在函数中先执行unwind回溯调用堆栈,再执行真正的malloc函数。
举例来说:
自定义函数myMalloc()的执行过程如下:
1)使用unwind回溯堆栈,将函数调用栈保存为数组,数组中的元素为函数地址;
2)调用真正的malloc分配内存。
通常情况下,精简指令集计算机微处理器(Advanced Reduced Instruction SetComputing Machines,ARM)的调用栈是从高地址向低地址扩张。在ARM中,函数调用栈从高地址向低地址增长,当函数调用时,分别将PC,LR,IP和FP寄存器压入栈中,然后移动sp指针,为当前程序开辟栈空间。
其中,PC,LR,IP和FP寄存器,其含义如下:
PC,program counter,程序计数器。程序当前运行的指令会放入到PC寄存器中。
IP,Instruction Pointer,指令指针,用于控制程序中指令的执行顺序。
FP,即frame pointer,帧指针。通常指向一个函数的栈帧底部,表示一个函数栈的开始位置。
LR,link register,链接寄存器。在进行函数调用时,会将函数返回后要执行的下一条指令放入LR寄存器中,对应x86架构下的返回地址。
调用栈从高地址向低地址增长,当函数调用时,分别将PC,LR,IP和FP寄存器压入栈中,然后移动栈顶指针(stack pointer,SP),为当前程序开辟栈空间。其中,SP指向当前栈空间的顶部位置,当进行push和pop时会一起移动。
在本申请实施例中,计算机设备可以通过Unwind_Backtrace函数获取每层函数调用堆栈的PC值,获得函数调用栈每层函数的地址,通过dladdr对函数地址解引用,获得函数所在的动态库名字。其中,请参考图4,其示出了本申请实施例涉及的回溯函数调用栈的函数关系图。
步骤304,通过该函数地址获取本次发起调用该内存操作函数的动态库的标识。
可选的,计算机设备可以通过调用地址符号获取函数,获得该函数地址的符号信息;并从该符号信息中获取该动态库的标识。
可选的,在通过调用地址符号获取函数,获得该函数地址的符号信息时,计算机设备可以通过调用该地址符号获取函数,将该函数地址转化为指定数据结构;将该指定数据结构获取为该符号信息。
相应的,在从该符号信息中获取该动态库的标识时,计算机设备可以将该指定数据结构中的目标字段提取为该动态库的标识。
可选的,以计算机设备的操作系统是安卓系统为例,上述地址符号获取函数可以是dladdr,其中,dladdr是linux系统调用,其可以将一个函数地址转换为Dl_info数据结构。计算机设备可以通过dladdr解析函数调用栈中的函数地址,然后通过Dl_info结构中的dli_fname字段获取到函数调用发起的动态库的名称,继而得到动态库的标识。
在linux系统中,每当某进程中调用dlopen打开动态链接库的同时,都会相应的维护该进程的一个链接link,加入新载入的这个动态库的名称在进程内的地址空间等基本信息,然后更新符号symbol。因此,只要遍历这个link,得知查找的函数地址address是在哪一个项目item的地址范围内,就可以找到该动态库的名称,然后减去进程载入的起始地址就得到了在动态库内的相对地址,这也就是dladdr的原理。因此,通过dladdr,可以从函数指针中解析出符号名称和所在的文件,也就是解析得到动态库的标识。
步骤305,将该动态库的标识以及该内存操作信息写入内存操作日志。
可选的,该内存操作信息包括内存大小、目标内存地址以及该内存操作函数的标识。
在将该动态库的标识以及该内存操作信息写入内存操作日志时,计算机设备可以将该内存大小、该目标内存地址、该内存操作函数的标识以及该动态库的标识存储为该内存操作日志中的一条日志数据。
请参考图5,其示出了本申请实施例涉及的内存操作日志的数据格式示意图。
例如,如图5所示,第一个char单字节代表使用的是malloc、calloc、realloc、memalign、free中的哪个函数;第二个int四字节代表分配的内存大小;第三个int四字节代表操作目标内存地址;第四个int四字节代表本次内存操作源动态库名字在hook列表中是第几个。通过上述图5所示的数据结构,一次内存操作日志,只需要13个字节即可完成记录。
可选的,上述内存操作信息还可以进一步包括其它信息,比如,可以进一步包括内存操作的时间信息。
可选的,在将该动态库的标识以及该内存操作信息写入内存操作日志时,计算机设备可以响应于该动态库是指定动态库,将该动态库的标识以及该内存操作信息写入该内存操作日志。
其中,开发人员可以预先设置一个或多个指定动态库,在进行内存分析时,计算机设备可以只记录指定动态库的内存操作日志,避免对所有的内存操作都进行记录。
可选的,在取调用的函数地址,以及本次的内存操作信息之前,计算机设备可以展示动态库设置界面;响应于在该动态库设置界面中的设置操作,设置该指定动态库。
在本申请实施例中,计算机设备可以提供指定动态库的设置界面,以便开发人员选择需要进行内存操作记录的指定动态库。
例如,请参考图6,其示出了本申请实施例涉及的动态库设置界面示意图。如图6所示,开发人员在设置指定动态库时,可以打开动态库设置界面61,该动态库设置界面中包含若干种动态库的设置选项62,比如,在图6中,包含libunity.so、libmono.so、libpandora.so以及libGCloudVoice.so等动态库的设置选项,开发人员可以通过各个设置选项62,来选择一个或者多个指定动态库,比如,开发人员可以将一个或者多个指定动态库的设置选项设置为勾选状态。经过上述设置后,计算机设备即可以将否选的指定动态库设置为通过钩子函数沟渠并分析的目标动态库,其配置代码可以如下:
PlayerPrefs.SetString(“hkkoTarget”,“libunitty|libmono”)。
步骤306,响应于该被测应用运行结束,将该内存操作日志输出至目标设备。
可选的,计算机设备可以通过通用串行总线USB接口将该内存操作日志输出至该目标设备。
测试用例(即上述被测应用)运行完毕后,在计算机设备上会形成一个内存操作日志文件。开发人员可以将该日志文件从计算机设备拉取到本地目标设备的,后续可以使用解析工具,即可自动生成动态库的内存审核测试报告。
在另一种可能的实现方式中,计算机设备也可以通过该目标设备对应的互联网地址,将该内存操作日志输出至该目标设备。
其中,计算机设备也可以在生成内存操作日志后,将该内存操作日志自动通过网络发送给目标设备。
可选的,在通过该目标设备对应的互联网地址,将该内存操作日志输出至该目标设备之前,计算机设备还可以展示地址设置界面;响应于在该地址设置界面中的设置操作,设置该目标设备对应的互联网地址。
在本申请实施例中,开发人员也可以在计算机设备提供的地址设置界面中设置目标设备对应的互联网地址,以便计算机设备在被测应用运行结束生成内存操作日志后,将该内存操作日志按照开发人员设置的互联网地址自动发送给目标设备。
在另一种可能的实现方式中,上述计算机设备也可以将生成的内存操作日志实时发送给目标设备,比如,计算机设备在每次调用内存操作函数并生成一条日志数据后,即将生成的该日志数据自动发送给目标设备。
以计算机应用通过用于进行内存操作记录的指定应用程序,上述被测应用是游戏应用为例,在启动被测应用之前,开发人员可以预先在计算机设备中,通过指定应用程序的设置界面设置以下信息:需要分析的指定动态库、日志输出的互联网地址等。之后,请参考图7,其示出了本申请实施例涉及的内存操作记录示意图。如图7所示,计算机设备在通过指定应用程序检测到游戏应用启动时,可以读取配置记录配置,首先根据该记录配置判断是否需要HOOK内存进行采样(S71),若不需要HOOK内存进行采样,则结束,若需要HOOK内存进行采样,则进一步读取配置,获得需要HOOK的指定动态库列表(S72),并根据该动态库列表执行HOOK(S73),即上述步骤301至步骤304,并通过mmap方式映射一块内存用于存储内存操作日志(S74),之后在HOOK到指定动态库发起的内存操作时,在内存操作日志中写入一条日志数据(S75),判断是否游戏应用运行结束,或者,开发人员关闭指定应用程序(S76),若否,则返回S75,若是,则将内存操作日志发送给目标设备(S77)。可选的,在另一种可能的实现方式中,在上述S75之后,计算机设备也可以将新生成的内存操作日志实时发送给目标设备。
综上所述,本申请实施例所示的方案,在运行被测应用的过程中,计算机设备在内存操作函数被调用时,获取函数地址和内存操作信息,通过函数地址获取发起调用的动态库的标识,并将动态库的标识以及内存操作信息一并写入内存操作日志,由于本方案获取到的内存操作日志中同时包含了内存操作信息以及发起调用的动态库的标识,相比于简单的PSS能够从更细的粒度上体现出被测应用的运行过程中,各个动态库各自的内存占用情况,从而提高内存占用分析的效果。
此外,本申请所示的方案不需要时刻保持计算机设备与目标设备之间的USB连接,稳定性较高。
另外,本申请所示的方案可以由开发人员自行设置所需要的指定动态库,可以根据测试需要进行定制,灵活性较高。
并且,本申请实施例所示的方案,采集数据负载较小,对被测应用的运行的影响较小,可以适用于对运行资源需求较高的应用,从而具有较大的适用范围较大。
以游戏类应用程序的内存分析为例,在相关技术中,测试组只能采集游戏的整体PSS占用。当内存占用发生异常增长时,无法定位增长来源模块。而通过本申请实施例所示的方案,测试组直接就可以报告发生内存占用增长的动态库名字,大大提高问题定位和解决效率。
除此之外,通过该方案,还能发现某个动态库持续不断分配内存而不释放的异常行为,发现内存泄漏,定位泄漏来源动态库。
图8是根据一示例性实施例示出的一种动态库的内存操作记录装置的结构方框图。该动态库的内存操作记录装置可以用于运行被测应用的计算机设备中,执行图2或图3所示实施例中的全部或者部分步骤。该动态库的内存操作记录装置可以包括:
第一获取模块801,用于在被测应用运行过程中,响应于对内存操作函数的调用,获取调用的函数地址,以及本次的内存操作信息;
第二获取模块802,用于通过所述函数地址获取本次发起调用所述内存操作函数的动态库的标识;
写入模块803,用于将所述动态库的标识以及所述内存操作信息写入内存操作日志。
在一种可能的实现方式中,所述第一获取模块801,包括:
拦截单元,用于通过钩子函数拦截对所述内存操作函数的调用;
回溯单元,用于回溯所述内存操作函数的函数调用栈,得到所述函数地址;
调用执行单元,用于执行对所述内存操作函数的调用,得到所述内存操作信息。
在一种可能的实现方式中,所述回溯单元,用于,
通过展开操作进行堆栈回溯,将回溯得到所述函数调用栈保存为第一数组;
将所述第一数组中的元素提取为所述函数地址。
在一种可能的实现方式中,所述第二获取模块802,包括:
符号信息获取单元,用于通过调用地址符号获取函数,获得所述函数地址的符号信息;
标识获取单元,用于从所述符号信息中获取所述动态库的标识。
在一种可能的实现方式中,所述符号信息获取单元,用于,
通过调用所述地址符号获取函数,将所述函数地址转化为指定数据结构;
将所述指定数据结构获取为所述符号信息;
所述标识获取单元,用于将所述指定数据结构中的目标字段提取为所述动态库的标识。
在一种可能的实现方式中,所述内存操作信息包括内存大小、目标内存地址以及所述内存操作函数的标识;
所述写入模块803,用于将所述内存大小、所述目标内存地址、所述内存操作函数的标识以及所述动态库的标识存储为所述内存操作日志中的一条日志数据。
在一种可能的实现方式中,所述写入模块803,用于响应于所述动态库是指定动态库,将所述动态库的标识以及所述内存操作信息写入所述内存操作日志。
在一种可能的实现方式中,所述装置还包括:
第一界面展示模块,用于在所述第一获取模块801在被测应用运行过程中,响应于对内存操作函数的调用,获取调用的函数地址,以及本次的内存操作信息之前,展示动态库设置界面;
动态库设置模块,用于响应于在所述动态库设置界面中的设置操作,设置所述指定动态库。
在一种可能的实现方式中,所述装置还包括:
输出模块,用于响应于所述被测应用运行结束,将所述内存操作日志输出至目标设备。
在一种可能的实现方式中,所述输出模块,用于,
通过通用串行总线USB接口将所述内存操作日志输出至所述目标设备;
或者,
通过所述目标设备对应的互联网地址,将所述内存操作日志输出至所述目标设备。
在一种可能的实现方式中,所述装置还包括:
第二界面展示模块,用于在所述输出设备通过所述目标设备对应的互联网地址,将所述内存操作日志输出至所述目标设备之前,展示地址设置界面;
地址设置模块,用于响应于在所述地址设置界面中的设置操作,设置所述目标设备对应的互联网地址。
在一种可能的实现方式中,所述内存操作函数包括以下函数中的至少一种:
动态内存分配函数malloc、动态内存分配并做初始化函数calloc、动态内存调整函数realloc、队列对齐内存分配函数memalign、内存释放函数free。
综上所述,本申请实施例所示的方案,在运行被测应用的过程中,计算机设备在内存操作函数被调用时,获取函数地址和内存操作信息,通过函数地址获取发起调用的动态库的标识,并将动态库的标识以及内存操作信息一并写入内存操作日志,由于本方案获取到的内存操作日志中同时包含了内存操作信息以及发起调用的动态库的标识,相比于简单的PSS能够从更细的粒度上体现出被测应用的运行过程中,各个动态库各自的内存占用情况,从而提高内存占用分析的效果。
此外,本申请所示的方案不需要时刻保持计算机设备与目标设备之间的USB连接,稳定性较高。
另外,本申请所示的方案可以由开发人员自行设置所需要的指定动态库,可以根据测试需要进行定制,灵活性较高。
并且,本申请实施例所示的方案,采集数据负载较小,对被测应用的运行的影响较小,可以适用于对运行资源需求较高的应用,从而具有较大的适用范围较大。
图9是根据一示例性实施例示出的一种计算机设备的结构示意图。该计算机设备可以实现为上述图1所示系统中的应用运行设备140。
所述计算机设备900包括中央处理单元901、包括随机存取存储器902和只读存储器903的系统存储器904,以及连接系统存储器904和中央处理单元901的系统总线905。所述计算机设备900还包括帮助计算机内的各个器件之间传输信息的基本输入/输出系统(I/O系统)906,和用于存储操作系统913、应用程序914和其他程序模块915的大容量存储设备907。
所述大容量存储设备907通过连接到系统总线905的大容量存储控制器(未示出)连接到中央处理单元901。所述大容量存储设备907及其相关联的计算机可读介质为计算机设备900提供非易失性存储。也就是说,所述大容量存储设备907可以包括诸如硬盘或者CD-ROM驱动器之类的计算机可读介质(未示出)。
不失一般性,所述计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括RAM、ROM、EPROM、EEPROM、闪存或其他固态存储其技术,CD-ROM、DVD或其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储设备。当然,本领域技术人员可知所述计算机存储介质不局限于上述几种。上述的系统存储器904和大容量存储设备907可以统称为存储器。
计算机设备900可以通过连接在所述系统总线905上的网络接口单元911连接到互联网或者其它网络设备。
所述存储器还包括一个或者一个以上的程序,所述一个或者一个以上程序存储于存储器中,中央处理器901通过执行该一个或一个以上程序来实现图2或图3所示的方法的全部或者部分步骤。
图10示出了本发明一个示例性实施例提供的计算机设备1000的结构框图。该计算机设备1000可以是:智能手机、平板电脑、MP3播放器(Moving Picture Experts GroupAudio Layer III,动态影像专家压缩标准音频层面3)、MP4(Moving Picture ExpertsGroup Audio Layer IV,动态影像专家压缩标准音频层面4)播放器、笔记本电脑或台式电脑。计算机设备1000还可能被称为用户设备、便携式终端、膝上型终端、台式终端等其他名称。或者,计算机设别1000也可以是网络侧的服务器。
通常,计算机设备1000包括有:处理器1001和存储器1002。
处理器1001可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器1001可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器1001也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(Central ProcessingUnit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器1001可以在集成有GPU(Graphics Processing Unit,图像处理器),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器1001还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器1002可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器1002还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器1002中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器1001所执行以实现本申请中方法实施例提供的方法。
在一些实施例中,计算机设备1000还可选包括有:外围设备接口1003和至少一个外围设备。处理器1001、存储器1002和外围设备接口1003之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口1003相连。具体地,外围设备包括:射频电路1004、触摸显示屏1005、摄像头1006、音频电路1007、定位组件1008和电源1009中的至少一种。
外围设备接口1003可被用于将I/O(Input/Output,输入/输出)相关的至少一个外围设备连接到处理器1001和存储器1002。在一些实施例中,处理器1001、存储器1002和外围设备接口1003被集成在同一芯片或电路板上;在一些其他实施例中,处理器1001、存储器1002和外围设备接口1003中的任意一个或两个可以在单独的芯片或电路板上实现,本实施例对此不加以限定。
射频电路1004用于接收和发射RF(Radio Frequency,射频)信号,也称电磁信号。射频电路1004通过电磁信号与通信网络以及其他通信设备进行通信。射频电路1004将电信号转换为电磁信号进行发送,或者,将接收到的电磁信号转换为电信号。可选地,射频电路1004包括:天线系统、RF收发器、一个或多个放大器、调谐器、振荡器、数字信号处理器、编解码芯片组、用户身份模块卡等等。射频电路1004可以通过至少一种无线通信协议来与其它计算机设备进行通信。该无线通信协议包括但不限于:万维网、城域网、内联网、各代移动通信网络(2G、3G、4G及5G)、无线局域网和/或WiFi(Wireless Fidelity,无线保真)网络。在一些实施例中,射频电路1004还可以包括NFC(Near Field Communication,近距离无线通信)有关的电路,本申请对此不加以限定。
显示屏1005用于显示UI(UserInterface,用户界面)。该UI可以包括图形、文本、图标、视频及其它们的任意组合。当显示屏1005是触摸显示屏时,显示屏1005还具有采集在显示屏1005的表面或表面上方的触摸信号的能力。该触摸信号可以作为控制信号输入至处理器1001进行处理。此时,显示屏1005还可以用于提供虚拟按钮和/或虚拟键盘,也称软按钮和/或软键盘。在一些实施例中,显示屏1005可以为一个,设置计算机设备1000的前面板;在另一些实施例中,显示屏1005可以为至少两个,分别设置在计算机设备1000的不同表面或呈折叠设计;在再一些实施例中,显示屏1005可以是柔性显示屏,设置在计算机设备1000的弯曲表面上或折叠面上。甚至,显示屏1005还可以设置成非矩形的不规则图形,也即异形屏。显示屏1005可以采用LCD(Liquid Crystal Display,液晶显示屏)、OLED(OrganicLight-Emitting Diode,有机发光二极管)等材质制备。
摄像头组件1006用于采集图像或视频。可选地,摄像头组件1006包括前置摄像头和后置摄像头。通常,前置摄像头设置在计算机设备的前面板,后置摄像头设置在计算机设备的背面。在一些实施例中,后置摄像头为至少两个,分别为主摄像头、景深摄像头、广角摄像头、长焦摄像头中的任意一种,以实现主摄像头和景深摄像头融合实现背景虚化功能、主摄像头和广角摄像头融合实现全景拍摄以及VR(Virtual Reality,虚拟现实)拍摄功能或者其它融合拍摄功能。在一些实施例中,摄像头组件1006还可以包括闪光灯。闪光灯可以是单色温闪光灯,也可以是双色温闪光灯。双色温闪光灯是指暖光闪光灯和冷光闪光灯的组合,可以用于不同色温下的光线补偿。
音频电路1007可以包括麦克风和扬声器。麦克风用于采集用户及环境的声波,并将声波转换为电信号输入至处理器1001进行处理,或者输入至射频电路1004以实现语音通信。出于立体声采集或降噪的目的,麦克风可以为多个,分别设置在计算机设备1000的不同部位。麦克风还可以是阵列麦克风或全向采集型麦克风。扬声器则用于将来自处理器1001或射频电路1004的电信号转换为声波。扬声器可以是传统的薄膜扬声器,也可以是压电陶瓷扬声器。当扬声器是压电陶瓷扬声器时,不仅可以将电信号转换为人类可听见的声波,也可以将电信号转换为人类听不见的声波以进行测距等用途。在一些实施例中,音频电路1007还可以包括耳机插孔。
定位组件1008用于定位计算机设备1000的当前地理位置,以实现导航或LBS(Location Based Service,基于位置的服务)。定位组件1008可以是基于美国的GPS(Global Positioning System,全球定位系统)、中国的北斗系统或欧洲的伽利略系统的定位组件。
电源1009用于为计算机设备1000中的各个组件进行供电。电源1009可以是交流电、直流电、一次性电池或可充电电池。当电源1009包括可充电电池时,该可充电电池可以是有线充电电池或无线充电电池。有线充电电池是通过有线线路充电的电池,无线充电电池是通过无线线圈充电的电池。该可充电电池还可以用于支持快充技术。
在一些实施例中,计算机设备1000还包括有一个或多个传感器1010。该一个或多个传感器1010包括但不限于:加速度传感器1011、陀螺仪传感器1012、压力传感器1013、指纹传感器1013、光学传感器1015以及接近传感器1016。
加速度传感器1011可以检测以计算机设备1000建立的坐标系的三个坐标轴上的加速度大小。比如,加速度传感器1011可以用于检测重力加速度在三个坐标轴上的分量。处理器1001可以根据加速度传感器1011采集的重力加速度信号,控制触摸显示屏1005以横向视图或纵向视图进行用户界面的显示。加速度传感器1011还可以用于游戏或者用户的运动数据的采集。
陀螺仪传感器1012可以检测计算机设备1000的机体方向及转动角度,陀螺仪传感器1012可以与加速度传感器1011协同采集用户对计算机设备1000的3D动作。处理器1001根据陀螺仪传感器1012采集的数据,可以实现如下功能:动作感应(比如根据用户的倾斜操作来改变UI)、拍摄时的图像稳定、游戏控制以及惯性导航。
压力传感器1013可以设置在计算机设备1000的侧边框和/或触摸显示屏1005的下层。当压力传感器1013设置在计算机设备1000的侧边框时,可以检测用户对计算机设备1000的握持信号,由处理器1001根据压力传感器1013采集的握持信号进行左右手识别或快捷操作。当压力传感器1013设置在触摸显示屏1005的下层时,由处理器1001根据用户对触摸显示屏1005的压力操作,实现对UI界面上的可操作性控件进行控制。可操作性控件包括按钮控件、滚动条控件、图标控件、菜单控件中的至少一种。
指纹传感器1014用于采集用户的指纹,由处理器1001根据指纹传感器1014采集到的指纹识别用户的身份,或者,由指纹传感器1014根据采集到的指纹识别用户的身份。在识别出用户的身份为可信身份时,由处理器1001授权该用户执行相关的敏感操作,该敏感操作包括解锁屏幕、查看加密信息、下载软件、支付及更改设置等。指纹传感器1014可以被设置计算机设备1000的正面、背面或侧面。当计算机设备1000上设置有物理按键或厂商Logo时,指纹传感器1014可以与物理按键或厂商Logo集成在一起。
光学传感器1015用于采集环境光强度。在一个实施例中,处理器1001可以根据光学传感器1015采集的环境光强度,控制触摸显示屏1005的显示亮度。具体地,当环境光强度较高时,调高触摸显示屏1005的显示亮度;当环境光强度较低时,调低触摸显示屏1005的显示亮度。在另一个实施例中,处理器1001还可以根据光学传感器1015采集的环境光强度,动态调整摄像头组件1006的拍摄参数。
接近传感器1016,也称距离传感器,通常设置在计算机设备1000的前面板。接近传感器1016用于采集用户与计算机设备1000的正面之间的距离。在一个实施例中,当接近传感器1016检测到用户与计算机设备1000的正面之间的距离逐渐变小时,由处理器1001控制触摸显示屏1005从亮屏状态切换为息屏状态;当接近传感器1016检测到用户与计算机设备1000的正面之间的距离逐渐变大时,由处理器1001控制触摸显示屏1005从息屏状态切换为亮屏状态。
本领域技术人员可以理解,图10中示出的结构并不构成对计算机设备1000的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括计算机程序(指令)的存储器,上述程序(指令)可由计算机设备的处理器执行以完成本申请各个实施例所示的方法的全部或者部分步骤。例如,所述非临时性计算机可读存储介质可以是只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random AccessMemory,RAM)、光盘只读存储器(Compact Disc Read-Only Memory,CD-ROM)、磁带、软盘和光数据存储设备等。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由下面的权利要求指出。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。
Claims (14)
1.一种动态库的内存操作记录方法,其特征在于,所述方法由运行被测应用的计算机设备执行,所述方法包括:
在被测应用运行过程中,响应于对内存操作函数的调用,获取调用的函数地址,以及本次的内存操作信息;
通过调用地址符号获取函数,获得所述函数地址的符号信息;
从所述符号信息中获取动态库的标识;
将所述动态库的标识以及所述内存操作信息写入内存操作日志。
2.根据权利要求1所述的方法,其特征在于,所述响应于对内存操作函数的调用,获取调用的函数地址,以及本次的内存操作信息,包括:
通过钩子函数拦截对所述内存操作函数的调用;
回溯所述内存操作函数的函数调用栈,得到所述函数地址;
执行对所述内存操作函数的调用,得到所述内存操作信息。
3.根据权利要求2所述的方法,其特征在于,所述回溯所述内存操作函数的函数调用栈,得到所述函数地址,包括:
通过展开操作进行堆栈回溯,将回溯得到所述函数调用栈保存为第一数组;
将所述第一数组中的元素提取为所述函数地址。
4.根据权利要求1所述的方法,其特征在于,
所述通过调用地址符号获取函数,获得所述函数地址的符号信息,包括:
通过调用所述地址符号获取函数,将所述函数地址转化为指定数据结构;
将所述指定数据结构获取为所述符号信息;
所述从所述符号信息中获取所述动态库的标识,包括:
将所述指定数据结构中的目标字段提取为所述动态库的标识。
5.根据权利要求1所述的方法,其特征在于,所述内存操作信息包括内存大小、目标内存地址以及所述内存操作函数的标识;
所述将所述动态库的标识以及所述内存操作信息写入内存操作日志,包括:
将所述内存大小、所述目标内存地址、所述内存操作函数的标识以及所述动态库的标识存储为所述内存操作日志中的一条日志数据。
6.根据权利要求1所述的方法,其特征在于,所述将所述动态库的标识以及所述内存操作信息写入内存操作日志,包括:
响应于所述动态库是指定动态库,将所述动态库的标识以及所述内存操作信息写入所述内存操作日志。
7.根据权利要求6所述的方法,其特征在于,所述在被测应用运行过程中,响应于对内存操作函数的调用,获取调用的函数地址,以及本次的内存操作信息之前,还包括:
展示动态库设置界面;
响应于在所述动态库设置界面中的设置操作,设置所述指定动态库。
8.根据权利要求1所述的方法,其特征在于,所述方法还包括:
响应于所述被测应用运行结束,将所述内存操作日志输出至目标设备。
9.根据权利要求8所述的方法,其特征在于,所述将所述内存操作日志输出至目标设备,包括:
通过通用串行总线USB接口将所述内存操作日志输出至所述目标设备;
或者,
通过所述目标设备对应的互联网地址,将所述内存操作日志输出至所述目标设备。
10.根据权利要求9所述的方法,其特征在于,所述通过所述目标设备对应的互联网地址,将所述内存操作日志输出至所述目标设备之前,还包括:
展示地址设置界面;
响应于在所述地址设置界面中的设置操作,设置所述目标设备对应的互联网地址。
11.根据权利要求1至10任一所述的方法,其特征在于,所述内存操作函数包括以下函数中的至少一种:
动态内存分配函数malloc、动态内存分配并做初始化函数calloc、动态内存调整函数realloc、队列对齐内存分配函数memalign、内存释放函数free。
12.一种动态库的内存操作记录装置,其特征在于,用于运行被测应用的计算机设备中,所述装置包括:
第一获取模块,用于在被测应用运行过程中,响应于对内存操作函数的调用,获取调用的函数地址,以及本次的内存操作信息;
第二获取模块,用于通过所述函数地址获取本次发起调用所述内存操作函数的动态库的标识;
写入模块,用于将所述动态库的标识以及所述内存操作信息写入内存操作日志;
其中,所述第二获取模块包括符号信息获取单元,以及标识获取单元;
所述符号信息获取单元,用于通过调用地址符号获取函数,获得所述函数地址的符号信息;
所述标识获取单元,用于从所述符号信息中获取所述动态库的标识。
13.一种计算机设备,其特征在于,所述计算机设备包含处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如权利要求1至11任一所述的动态库的内存操作记录方法。
14.一种计算机可读存储介质,其特征在于,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如权利要求1至11任一所述的动态库的内存操作记录方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010116208.5A CN111274155B (zh) | 2020-02-25 | 2020-02-25 | 动态库的内存操作记录方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010116208.5A CN111274155B (zh) | 2020-02-25 | 2020-02-25 | 动态库的内存操作记录方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111274155A CN111274155A (zh) | 2020-06-12 |
CN111274155B true CN111274155B (zh) | 2021-08-06 |
Family
ID=70997283
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010116208.5A Active CN111274155B (zh) | 2020-02-25 | 2020-02-25 | 动态库的内存操作记录方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111274155B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114253825A (zh) * | 2020-09-22 | 2022-03-29 | 腾讯科技(深圳)有限公司 | 内存泄漏检测方法、装置、计算机设备和存储介质 |
CN112579295B (zh) * | 2020-12-25 | 2024-05-24 | 百果园技术(新加坡)有限公司 | 图像内存分析方法、装置、电子设备和存储介质 |
CN112860444B (zh) * | 2021-04-26 | 2021-08-20 | 腾讯科技(深圳)有限公司 | 内存调用信息的确定方法和装置、存储介质及电子设备 |
CN113448655B (zh) * | 2021-07-09 | 2022-06-17 | 赞同科技股份有限公司 | C标准动态库的调用方法与装置 |
CN114398296B (zh) * | 2022-03-24 | 2022-09-27 | 荣耀终端有限公司 | 用于问题定位的方法和终端设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103033702A (zh) * | 2012-12-03 | 2013-04-10 | 桂林赛普电子科技有限公司 | 多功能手持防雷器测试仪 |
CN103870208A (zh) * | 2012-12-17 | 2014-06-18 | 联想(北京)有限公司 | 信息处理的方法及电子设备 |
CN104375828A (zh) * | 2014-10-27 | 2015-02-25 | 小米科技有限责任公司 | 内存优化方法及装置 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7216352B2 (en) * | 2002-12-12 | 2007-05-08 | Sun Microsystems, Inc. | Method of reducing interference among applications co-located in a process when using dynamic libraries |
CN103294588A (zh) * | 2012-02-22 | 2013-09-11 | 深圳富泰宏精密工业有限公司 | 内存检测系统及方法 |
US9697150B2 (en) * | 2013-09-04 | 2017-07-04 | Jory Schwach | Real-time embedded system |
CN106933733B (zh) * | 2015-12-30 | 2020-03-10 | 华为技术有限公司 | 一种确定内存泄露位置的方法和装置 |
CN106648893A (zh) * | 2016-12-20 | 2017-05-10 | 北京匡恩网络科技有限责任公司 | 一种内存管理方法及设备 |
CN110781075B (zh) * | 2019-09-19 | 2022-08-30 | 深圳震有科技股份有限公司 | 一种内存泄漏的检测方法、装置、系统及存储介质 |
-
2020
- 2020-02-25 CN CN202010116208.5A patent/CN111274155B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103033702A (zh) * | 2012-12-03 | 2013-04-10 | 桂林赛普电子科技有限公司 | 多功能手持防雷器测试仪 |
CN103870208A (zh) * | 2012-12-17 | 2014-06-18 | 联想(北京)有限公司 | 信息处理的方法及电子设备 |
CN104375828A (zh) * | 2014-10-27 | 2015-02-25 | 小米科技有限责任公司 | 内存优化方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111274155A (zh) | 2020-06-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111274155B (zh) | 动态库的内存操作记录方法、装置、设备及存储介质 | |
CN109359262B (zh) | 动画播放方法、装置、终端及存储介质 | |
CN109491924B (zh) | 代码检测方法、装置、终端及存储介质 | |
CN111752666B (zh) | 窗口显示方法、装置和终端 | |
CN111338910B (zh) | 日志数据处理、显示方法、装置、设备及存储介质 | |
CN108132790B (zh) | 检测无用代码的方法、装置及计算机存储介质 | |
CN113867848A (zh) | 图形接口的调用方法、装置、设备及可读存储介质 | |
CN113409427A (zh) | 动画播放方法、装置、电子设备及计算机可读存储介质 | |
CN112257006A (zh) | 页面信息的配置方法、装置、设备及计算机可读存储介质 | |
CN111737100A (zh) | 数据获取方法、装置、设备及存储介质 | |
CN110968815A (zh) | 页面刷新方法、装置、终端及存储介质 | |
CN107943484B (zh) | 执行业务功能的方法和装置 | |
CN112052167A (zh) | 生成测试脚本代码的方法和装置 | |
CN112363950A (zh) | 应用程序的调试方法及装置 | |
CN109634872B (zh) | 应用测试方法、装置、终端及存储介质 | |
CN108132817B (zh) | 对象管理方法及装置 | |
CN113688043B (zh) | 应用程序测试方法、装置、服务器、iOS设备及介质 | |
CN112965911B (zh) | 界面异常检测方法、装置、计算机设备及存储介质 | |
CN110417931B (zh) | 域名解析记录获取方法、装置、计算机设备及存储介质 | |
CN113268234A (zh) | 页面生成方法、装置、终端和存储介质 | |
CN113342635A (zh) | 差异代码覆盖率的获取、差异代码文件发送方法及装置 | |
CN113312249A (zh) | 日志数据生成方法、日志数据显示方法及装置 | |
CN112860261A (zh) | 静态代码检查方法、装置、计算机设备及可读存储介质 | |
CN113971123A (zh) | 应用程序测试方法、装置、测试终端和存储介质 | |
CN112988177A (zh) | 应用安装包的发布、应用程序的运行方法、服务器及终端 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40024103 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant |