应用内存错误检测方法、装置及存储介质与流程
未命名
07-23
阅读:132
评论:0
1.本技术涉及计算机技术领域:
:,尤其涉及应用内存错误检测方法、装置及存储介质。
背景技术:
::2.随着计算机技术的发展,应用开发商为终端设备开发了各种各样的应用,应用在正式投入使用之前都需要进行多种功能测试。3.当前,应用的多种功能在测试中均运行正常的情况下,将应用投入使用。然而,投入使用的应用仍然可能发生内存泄露或内存溢出等内存错误。技术实现要素:4.本技术实施例提供一种应用内存错误检测方法、装置及存储介质,涉及计算机
技术领域:
:,有助于解决当前无法对应用的内存错误进行检测的问题。5.第一方面,本技术实施例提供一种应用内存错误检测方法,应用于终端设备;该方法包括:终端设备将应用中与内存分配相关的函数替换为目标函数;终端设备执行目标函数得到与内存分配相关的第一申请;第一申请设置有第一标记;终端设备在执行包括第一标记的第一申请时,终端设备对第一申请的执行过程进行内存错误检测。6.本技术实施例中,终端设备将应用中与内存分配相关的函数替换为目标函数,终端设备执行目标函数得到的第一申请配置有第一标记,这样终端设备就可以选择对包括第一标记的内存分配相关申请如上述第一申请进行内存错误检测。从而做到了对特定应用或特定库进行内存错误检测。7.可能的实现方式中,终端设备中配置有gwp-asan分配器;gwp-asan分配器用于对所执行的内存分配相关申请进行内存错误检测;方法还包括:终端设备根据内存检查模式配置文件或gwp-asan分配器的配置状态,开启gwp-asan分配器;配置状态用于表征开启gwp-asan分配器;内存检查模式配置文件包括应用的配置项;配置项用于指示对应用进行内存错误检测;上述终端设备对第一申请的执行过程进行内存错误检测,包括:终端设备利用gwp-asan分配器对第一申请的执行过程进行内存错误检测。这样,可以让包括第一标记的内存分配相关申请由gwp-asan分配器执行,利用gwp-asan分配器的内存错误检测功能进行内存错误检测。8.可能的实现方式中,终端设备中运行有应用的进程;上述终端设备根据内存检查模式配置文件或gwp-asan分配器的配置状态,开启gwp-asan分配器,包括:在应用的启动过程中,应用的进程获取内存检查模式配置文件;在内存检查模式配置文件包括应用的配置项的情况下,应用的进程开启gwp-asan分配器。这样,在内存检查模式配置文件中添加待检测应用的配置项,就可以在执行该应用的过程中开始gwp-asan分配器,利用gwp-asan分配器对该应用进行内存错误检测。9.可能的实现方式中,终端设备中运行有系统服务以及孵化器进程,上述终端设备根据内存检查模式配置文件或gwp-asan分配器的配置状态,开启gwp-asan分配器,包括:在应用的启动过程中,系统服务获取gwp-asan分配器的配置状态;配置状态用于表征开始gwp-asan分配器;系统服务向孵化器进程发送进程创建指令;进程创建指令中包括第二标记,第二标记用于指示孵化器进程开启gwp-asan分配器;响应于进程创建指令,孵化器进程创建应用的进程;应用的进程根据第二标记开启gwp-asan分配器。这样,即使不增加根据内存检查模式配置文件开启gwp-asan分配器的逻辑,终端设备也可以根据gwp-asan分配器的配置状态开启gwp-asan分配器。10.可能的实现方式中,终端设备中运行有系统服务以及应用的主线程,上述终端设备将应用中与内存分配相关的函数替换为目标函数,包括:系统服务接收触发指令;响应于触发指令,系统服务调用应用的主线程将应用中与内存分配相关的函数替换为目标函数。这样,系统服务可以根据收到的指令将内存分配相关的函数替换为目标函数。11.可能的实现方式中,触发指令来自命令行接口、java接口、c接口或者c++接口中的任意一种。这样,可以灵活的根据接口或者命令行触发内存分配相关的函数替换为目标函数。12.可能的实现方式中,终端设备中运行有孵化器进程,上述终端设备将应用中与内存分配相关的函数替换为目标函数,包括:孵化器进程创建应用的主线程,在确定内存检查模式配置文件包括应用的配置项的情况下,应用的主线程将应用中与内存分配相关的函数替换为目标函数;配置项用于指示对应用进行内存错误检测。这样,在内存检测模式配置文件中配置了应用的配置项的情况下,应用在启动过程中会自动将内存分配相关的函数替换为目标函数。13.第二方面,本技术实施例提供一种应用内存错误检测装置,包括存储模块和处理模块:所述存储模块中存储有与内存分配相关的函数与目标函数的对应关系;所述处理模块用于:根据所述对应关系将应用中第一函数替换为所述第一函数对应的目标函数;所述第一函数为与内存分配相关的函数;执行所述目标函数得到与内存分配相关的第一申请;所述第一申请设置有第一标记;在执行包括所述第一标记的所述第一申请时,对所述第一申请的执行过程进行内存错误检测。14.可选的,处理模块中配置有gwp-asan分配器;gwp-asan分配器用于对所执行的内存分配相关申请进行内存错误检测;处理模块还用于:根据内存检查模式配置文件或gwp-asan分配器的配置状态,开启gwp-asan分配器;配置状态用于表征开启gwp-asan分配器;内存检查模式配置文件包括应用的配置项;配置项用于指示对应用进行内存错误检测;处理模块具体用于利用gwp-asan分配器对第一申请的执行过程进行内存错误检测。15.可选的,处理模块中运行有应用的进程;在应用的启动过程中,应用的进程用于获取内存检查模式配置文件;在内存检查模式配置文件包括应用的配置项的情况下,应用的进程用于开启gwp-asan分配器。16.可选的,处理模块中运行有系统服务以及孵化器进程,在应用的启动过程中,系统服务用于获取gwp-asan分配器的配置状态;配置状态用于表征开始gwp-asan分配器;系统服务还用于向孵化器进程发送进程创建指令;进程创建指令中包括第二标记,第二标记用于指示孵化器进程开启gwp-asan分配器;响应于进程创建指令,孵化器进程用于创建应用的进程;应用的进程用于根据第二标记开启gwp-asan分配器。17.可选的,终端设备中运行有系统服务以及应用的主线程,系统服务用于接收触发指令;响应于触发指令,系统服务还用于调用应用的主线程将应用中与内存分配相关的函数替换为目标函数。18.可选的,触发指令来自命令行接口、java接口、c接口或者c++接口中的任意一种。19.可选的,终端设备中运行有孵化器进程,孵化器进程用于创建应用的主线程,在确定内存检查模式配置文件包括应用的配置项的情况下,应用的主线程用于将应用中与内存分配相关的函数替换为目标函数;配置项用于指示对应用进行内存错误检测。20.第三方面,本技术实施例提供一种电子设备,包括存储器和处理器,存储器用于存储计算机程序,处理器用于执行所述计算机程序,以执行如第一方面或第一方面的任意一种可能的实现方式中描述的应用内存错误检测方法。21.第四方面,本技术实施例提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机程序或指令,当计算机程序或指令在计算机上运行时,使得计算机执行第一方面或第一方面的任意一种可能的实现方式中描述的应用内存错误检测方法。22.第五方面,本技术实施例提供一种包括计算机程序的计算机程序产品,当计算机程序在计算机上运行时,使得计算机执行第一方面或第一方面的任意一种可能的实现方式中描述的应用内存错误检测方法。23.第六方面,本技术提供一种芯片或者芯片系统,该芯片或者芯片系统包括至少一个处理器和通信接口,通信接口和至少一个处理器通过线路互联,至少一个处理器用于运行计算机程序或指令,以执行第一方面或第一方面的任意一种可能的实现方式中描述的应用内存错误检测方法。其中,芯片中的通信接口可以为输入/输出接口、管脚或电路等。24.在一种可能的实现中,本技术中上述描述的芯片或者芯片系统还包括至少一个存储器,该至少一个存储器中存储有指令。该存储器可以为芯片内部的存储单元,例如,寄存器、缓存等,也可以是该芯片的存储单元(例如,只读存储器、随机存取存储器等)。25.应当理解的是,本技术的第三方面至第六方面分别与本技术的第一方面的技术方案相对应,各方面及对应的可行实施方式所取得的有益效果相似,不再赘述。附图说明26.图1为本技术实施例所适用一种终端设备的结构示意图;27.图2为本技术实施例所适用的终端设备的一种软件结构框图;28.图3为本技术实施例提供的一种应用内存错误检测方法中应用启动流程的示意图;29.图4为本技术实施例提供的一种命令行方式进行应用程序对应代码库中第一函数替换为目标函数的流程示意图;30.图5为本技术实施例提供的一种应用程序启动过程中将第一函数替换为目标函数的流程示意图;31.图6为本技术实施例提供的一种应用内存错误检测方法中应用内存错误检测流程的示意图;32.图7为本技术实施例所提供的一种应用内存错误检测方法的流程示意图;33.图8为本技术实施例所提供的另一种应用内存错误检测方法的流程示意图;34.图9为本技术实施例所提供的一种应用内存错误检测装置的结构示意图;35.图10为本技术实施例所提供的一种芯片的结构示意图。具体实施方式36.在本技术的实施例中,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分。例如,第一芯片和第二芯片仅仅是为了区分不同的芯片,并不对其先后顺序进行限定。本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。37.需要说明的是,本技术实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本技术中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其他实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。38.本技术实施例中,“至少一个”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b的情况,其中a,b可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指的这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b,或c中的至少一项(个),可以表示:a,b,c,a-b,a‑‑c,b-c,或a-b-c,其中a,b,c可以是单个,也可以是多个。39.随着计算机技术的发展,不同应用开发商致力于不同应用的开发。一些应用的开发委托第三方完成,第三方开发完成的应用在交付时通常没有该应用的源码,以下为了方便说明将没有源码的应用简称为无源码应用。示例性的,终端设备厂商的摄像头相关应用委托第三方完成,且此类应用无源码交付给终端设备厂商。40.无源码应用在进行功能测试时,很难发现内存错误,然而在无源码应用投入使用时可能发生内存泄露和内存溢出等内存错误。41.以安卓系统为例,当前可以用于进行内存错误检测的内存错误检测工具可以为gwp-asan,gwp-asan是一种原生内存分配器功能,该功能可以帮助查找内存错误。例如,堆缓冲区溢出错误等。在应用程序的进程启动时(或在zygote派生时),gwp-asan会在一些随机选择的系统应用和平台可执行文件上启用。启用后,gwp-asan会拦截随机选择的内存分配申请。例如,gwp-asan拦截随机选择的内存的堆分配,并将其放入特殊区域,以便捕获难以检测到的堆内存损坏错误。gwp-asan会收集有关它拦截的所有内存分配相关的异常信息。42.但是,gwp-asan工具通过随机选择的方式决定某一内存分配申请是否使用该工具进行检测。由于该工具本身设计目标是在生产环境进行内存错误的检测,因此该工具通过设置随机采样率和最大内存分配数,来限制该工具对终端设备的性能和内存占用的影响。由于系统库存在大量的内存分配申请,因此,该工具真正可以检测到第三方应用或第三方库中的内存分配申请的概率比较低,从而导致第三方应用或第三方库在进行功能测试时,很难发现内存错误。43.有鉴于此,本技术实施例提供应用内存错误检测方法,该方法中终端设备将启用内存检测的代码库中与内存分配相关的函数替换为包括第一标记的函数,这样,终端设备在获取到包括第一标记的内存分配申请的情况下,将该申请由第一内存分配器例如上述gwp-asan执行以进行内存错误检测,从而获取到代码库中的内存错误检测结果。44.本技术实施例提供的应用内存错误检测方法可以应用于终端设备。本技术实施例中终端设备也可以称为终端(terminal)、用户设备(userequipment,ue)、移动台(mobilestation,ms)或移动终端(mobileterminal,mt)等。终端设备可以是手机(mobilephone)、智能电视、穿戴式设备、平板电脑(pad)、台式电脑、虚拟现实(virtualreality,vr)终端设备、增强现实(augmentedreality,ar)终端设备、工业控制(industrialcontrol)中的无线终端、无人驾驶(self-driving)中的车载终端、远程手术(remotemedicalsurgery)中的无线终端、智能电网(smartgrid)中的无线终端、运输安全(transportationsafety)中的无线终端、智慧城市(smartcity)中的无线终端、智慧家庭(smarthome)中的无线终端等等。本技术的实施例对终端设备所采用的具体技术和具体设备形态不做限定。45.为了能够更好地理解本技术实施例,下面对本技术实施例所适用的终端设备的结构进行说明。如图1所示为本技术实施例提供的一种终端设备的结构示意图,图1所示的终端设备10可以包括处理器110,存储器120,通用串行总线(universalserialbus,usb)接口130,电源140,通信模块150,音频模块170,传感器模块180,按键190,摄像头191以及显示屏160等。其中,传感器模块180可以包括压力传感器180a,指纹传感器180b,触摸传感器180c等。46.可以理解的是,本发明实施例示意的结构并不构成对终端设备10的具体限定。在本技术另一些实施例中,终端设备10可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。47.处理器110可以包括一个或多个处理单元,例如:处理器110可以包括应用处理器(applicationprocessor,ap),调制解调处理器,图形处理器(graphicsprocessingunit,gpu),图像信号处理器(imagesignalprocessor,isp),控制器,数字信号处理器(digitalsignalprocessor,dsp),基带处理器)等。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。48.控制器可以根据指令操作码和时序信号,产生操作控制信号,完成取指令和执行指令的控制。49.处理器110中还可以设置存储器,用于存储指令和数据。在一些实施例中,处理器110中的存储器为高速缓冲存储器。该存储器可以保存处理器110刚用过或循环使用的指令或数据。如果处理器110需要再次使用该指令或数据,可从所述存储器中直接调用。避免了重复存取,减少了处理器110的等待时间,因而提高了系统的效率。50.在一些实施例中,处理器110可以包括一个或多个接口。接口可以包括集成电路(inter-integratedcircuit,i2c)接口,集成电路内置音频(inter-integratedcircuitsound,i2s)接口,脉冲编码调制(pulsecodemodulation,pcm)接口,通用异步收发传输器(universalasynchronousreceiver/transmitter,uart)接口,移动产业处理器接口(mobileindustryprocessorinterface,mipi),通用输入输出(general-purposeinput/output,gpio)接口,用户标识模块(subscriberidentitymodule,sim)接口,和/或通用串行总线(universalserialbus,usb)接口等。51.i2c接口是一种双向同步串行总线,包括一根串行数据线(serialdataline,diode,fled),miniled,microled,micro-oled,量子点发光二极管(quantumdotlightemittingdiodes,qled)等。在一些实施例中,终端设备10可以包括1个或n个显示屏160,n为大于1的正整数。62.终端设备10可以通过isp,摄像头191,视频编解码器,gpu,显示屏160以及应用处理器等实现拍摄功能。63.isp用于处理摄像头191反馈的数据。例如,拍照时,打开快门,光线通过镜头被传递到摄像头感光元件上,光信号转换为电信号,摄像头感光元件将所述电信号传递给isp处理,转化为肉眼可见的图像。isp还可以对图像的噪点,亮度,肤色进行算法优化。isp还可以对拍摄场景的曝光,色温等参数优化。在一些实施例中,isp可以设置在摄像头191中。64.摄像头191用于捕获静态图像或视频。物体通过镜头生成光学图像投射到感光元件。感光元件可以是电荷耦合器件(chargecoupleddevice,ccd)或互补金属氧化物半导体(complementarymetal-oxide-semiconductor,cmos)光电晶体管。感光元件把光信号转换成电信号,之后将电信号传递给isp转换成数字图像信号。isp将数字图像信号输出到dsp加工处理。dsp将数字图像信号转换成标准的rgb,yuv等格式的图像信号。在一些实施例中,终端设备10可以包括1个或n个摄像头191,n为大于1的正整数。65.数字信号处理器用于处理数字信号,除了可以处理数字图像信号,还可以处理其他数字信号。例如,当终端设备10在频点选择时,数字信号处理器用于对频点能量进行傅里叶变换等。66.存储器120可以用于存储一个或多个计算机程序,该一个或多个计算机程序包括指令。处理器110可以通过运行存储在存储器120的上述指令,从而使得终端设备10执行各种功能应用以及数据处理等。67.存储器120可以包括存储程序区和存储数据区。其中,存储程序区可存储操作系统;该存储程序区还可以存储一个或多个应用程序(比如图库、联系人等)等。示例性的,存储器120存储程序区可以存储本技术实施例所提供的方法中的目标对应关系以及包括第一标记的目标函数。其中,目标对应关系为通用函数标识与目标函数的标识的对应关系。通用函数标识用于表征与内存分配相关的函数。目标对应关系以及包括第一标记的目标函数可以是预先存储在存储器120中的。68.存储数据区可存储终端设备10使用过程中所创建的数据(比如照片等)等。此外,存储器120可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件,闪存器件,通用闪存存储器(universalflashstorage,ufs)等。在一些实施例中,处理器110可以通过运行存储在存储器120的指令,和/或存储在设置于处理器110中的存储器的指令,来使得终端设备10执行各种功能应用及数据处理。69.终端设备10可以通过音频模块170,扬声器170a,受话器170b,麦克风170c,耳机接口170d,以及应用处理器等实现音频功能。例如音乐播放,录音等。70.音频模块170用于将数字音频信息转换成模拟音频信号输出,也用于将模拟音频输入转换为数字音频信号。音频模块170还可以用于对音频信号编码和解码。在一些实施例中,音频模块170可以设置于处理器110中,或将音频模块170的部分功能模块设置于处理器110中。71.压力传感器180a用于感受压力信号,可以将压力信号转换成电信号。在一些实施例中,压力传感器180a可以设置于显示屏160。压力传感器180a的种类很多,如电阻式压力传感器,电感式压力传感器,电容式压力传感器等。电容式压力传感器可以是包括至少两个具有导电材料的平行板。当有力作用于压力传感器180a,电极之间的电容改变。终端设备10根据电容的变化确定压力的强度。当有触摸操作作用于显示屏160,终端设备10根据压力传感器180a检测所述触摸操作强度。终端设备10也可以根据压力传感器180a的检测信号计算触摸的位置。在一些实施例中,作用于相同触摸位置,但不同触摸操作强度的触摸操作,可以对应不同的操作指令。例如:当有触摸操作强度小于第一压力阈值的触摸操作作用于短消息应用图标时,执行查看短消息的指令。当有触摸操作强度大于或等于第一压力阈值的触摸操作作用于短消息应用图标时,执行新建短消息的指令。72.指纹传感器180b用于采集指纹。终端设备10可以利用采集的指纹特性实现指纹解锁,访问应用锁,指纹拍照,指纹接听来电等。73.触摸传感器180c,也称“触控器件”。触摸传感器180c可以设置于显示屏160,由触摸传感器180c与显示屏160组成触摸屏,也称“触控屏”。触摸传感器180c用于检测作用于其上或附近的触摸操作。触摸传感器可以将检测到的触摸操作传递给应用处理器,以确定触摸事件类型。可以通过显示屏160提供与触摸操作相关的视觉输出。在另一些实施例中,触摸传感器180c也可以设置于终端设备10的表面,与显示屏160所处的位置不同。74.按键190包括开机键,音量键等。按键190可以是机械按键。也可以是触摸式按键。终端设备10可以接收按键输入,产生与终端设备10的用户设置以及功能控制有关的键信号输入。75.终端设备10的软件系统可以采用分层架构,事件驱动架构,微核架构,微服务架构,或云架构。本技术实施例以分层架构的android系统为例,示例性说明终端设备10的软件结构。76.图2为当前终端设备的一种软件结构框图。分层架构将终端设备10的软件系统分成若干个层,每一层都有清晰的角色和分工。层与层之间通过软件接口通信。在一些实施例中,android系统可以包括应用程序层(applications)、应用程序框架层(applicationframework)以及系统库层。77.如图2所示,应用程序层通过调用应用程序框架层所提供的应用程序接口(applicationprogramminginterface,api)运行应用程序。应用程序层可以包括应用程序的二进制库文件(又可以称为应用程序的安装包或应用库)以及预设文件。应用库存储的目录可以为:/数据/应用/*,*.so。其中,*用于表征应用库的标识。应用库中可以包括:程序链接表(procedurelinktable,plt)和全局偏移表(globaloffsettable,got)。其中,plt可以存储跳转函数,跳转函数为可执行程序用于调用外部库的函数,got可以用于存储地址信息,地址信息可以包括可执行程序调用外部库函数的目的地址。预设文件可以包括androidmainfest.xml文件。78.应用程序框架层为应用程序层的应用程序提供api和编程框架。应用程序框架层包括一些预先定义的函数。如图2所示,应用程序框架层可以包括钩子(hook)库。示例性的,钩子库可以包括libgwp_asan_malloc_hooks.so。在终端设备启动后,应用程序框架层运行有孵化器(zygote)进程以及系统服务,系统服务可以包括活动管理服务(activitymanagerservice,ams)以及包管理服务(packagemanagerservice,pms)等。79.ams可以用于统一调度各应用进程。pms可以用于管理应用程序包的安装以及应用程序的卸载等。示例性的,在应用安装时,pms可以用于扫描预设文件,在预设文件中第一内存分配器设置为开启状态的情况下,在ams启动应用程序的过程中,ams可以通过runtimeflags向孵化器进程发送第二标记,并由孵化器进程向应用程序的进程同步第二标记。第二标记用于应用程序的进程在应用程序启动过程中,开启第一内存分配器,第一内存分配器可以为gwp-asan.a。80.钩子库中包括钩子函数。钩子函数为存储器所存储的目标对应关系中目标函数的标识所标识的函数。应用程序启动过程中,应用程序的进程可以基于目标对应关系,将应用程序的二进制库文件中与内存分配相关的函数替换为钩子库中的钩子函数;应用程序的进程执行钩子函数得到的内存分配相关申请包括第一标记。第一标记用于指示该内存分配相关申请由第一内存分配器执行。这样,就可以对该内存分配相关申请进行内存错误检测。81.系统库可以包括标准函数库,内存分配器以及崩溃处理器等。内存分配器可以用于处理内存分配申请和内存释放申请等。内存分配器可以包括第一内存分配器和第二内存分配器。第一内存分配器可以为图2示出的gwp-asan分配器,第二内存分配器可以是不具备内存错误检测功能的普通内存分配器,示例性的,第二内存分配器可以是malloc。82.其中,标准函数库可以为androidbioniclibc。androidbioniclibc包括内存申请分派判断逻辑,也就是内存申请分配方法。内存申请分派判断逻辑包括随机采样分派机制(对应图2中gwp_asan_dispatch)、标记感知分派机制(对应图2中hookcontext)以及property配置文件,随机采样分派机制用于采用随机采样的方式确定内存分配相关申请走gwp-asan.a进行内存分配,标记感知分派机制可以包括第一标记判断功能,该功能可以用于判断内存分配相关的申请是否包括第一标记,在内存分配相关的申请包括第一标记的情况下,该标记感知分派机制将该申请分配给第一内存分配器进行处理。第一内存分配器在执行该内存分配相关的申请的过程中检测内存分配错误。第一内存分配器可以为gwp-asan.a。property配置文件可以用于配置应用程序的第三标记。在property配置文件中包括应用程序的第三标记的情况下,应用程序的启动过程中,应用程序的进程可以根据目标对应关系将与内存分配相关函数替换为对应的目标函数。83.崩溃处理器可以用于获取内存检测的数据。示例性的,图2所示系统库层的tombstoned进程可以用于获取应用进程的检测数据以生成应用的内存崩溃报告。tombstoned进程可以用于执行崩溃处理器以获取应用进程的检测数据。检测数据可以包括应用进程的崩溃类型、分配元数据、关联的分配和取消分配堆栈轨迹的相关信息。示例性的,获取的检测数据可以为gwpasancrashdata。崩溃处理器可以为gwp_asan_crash_handler.a。84.以下结合附图首先对本技术实施例提供的应用启动流程进行说明,图3为本技术实施例提供的一种应用内存错误检测方法中应用启动流程的示意图,图3所示应用启动流程可以包括如下步骤:85.s300:终端设备中桌面启动器接收针对第一应用程序的启动操作。86.本技术实施例中,终端设备启动后,终端设备中运行有桌面启动器(例如:launcher)、系统服务以及孵化器(zygote)进程。87.可能的实现方式中,终端设备中桌面启动器接收用户针对第一应用程序的图标的点击操作。该点击操作用于启动第一应用程序。88.s301:桌面启动器响应于该启动指令向系统服务发送进程创建指令,该进程创建指令用于创建第一应用程序的进程。89.s302:系统服务响应于进程创建指令,获取第一内存分配器的配置状态。90.本技术实施例中,第一内存分配器的配置状态可以是第一应用程序安装时,pms扫描预设文件获取的,预设文件中第一内存分配器的配置状态可以用于表征为第一应用程序开启第一内存分配器。91.在一个例子中,预设文件为androidmainfest.xml文件,该文件包括:92.《applicationandroid:gwpasanmode=”always”》93.…94.《/application》95.该文件中android:gwpasanmode=”always”用于表征为应用程序开启第一内存分配器。96.对于步骤s302,在一种可能的实现方式中,ams响应于进程创建指令,ams调用pms获取第一内存分配器的配置状态。97.s303:系统服务向孵化器进程发送进程创建请求。98.本技术实施例中,进程创建请求可以包括第二标记。第二标记用于指示开启第一内存分配器。99.可能的实现方式中,系统服务在第一内存分配器的配置状态用于表征为第一应用程序开启第一内存分配器的情况下,系统服务向孵化器进程发送的进程创建请求包括第二标记。在第一内存分配器的配置状态用于表征未开启第一内存分配器的情况下,系统服务向孵化器进程发送的进程创建请求包括其他标记。100.示例性的,系统服务在第一内存分配器的配置状态用于表征为第一应用程序开启第一内存分配器的情况下,向孵化器进程发送的进程创建请求包括的第二标记可以用runtimeflags的第一值来表征,runtimeflags的第一值可以指示为第一应用程序开启第一内存分配器。在第一内存分配器的配置状态用于表征未开启第一内存分配器的情况下,系统服务向孵化器进程发送的进程创建请求包括的其他标记可以用runtimeflags的第二值来表征,runtimeflags的第二值可以指示不开启第一内存分配器。101.s304:孵化器进程根据进程创建请求创建第一应用程序的进程。102.对于步骤s304,在一种可能的实现方式中,孵化器进程根据进程创建请求创建第一应用程序的进程。孵化器进程将第二标记同步给第一应用程序的进程。103.s305:在第一应用程序启动过程中,第一应用程序的进程根据内存检查模式配置文件或上述第二标记,开启第一内存分配器。104.其中,第一应用程序的进程可以为第三标记赋予预设值来开启第一内存分配器。第三标记用于表征第一内存分配器的开启或关闭,比如说,第三标记的值为1(true)时,标识开启第一内存分配器,第三标记的值为0(false)时,标识关闭第一内存分配器。105.本技术实施例中,内存检查模式配置文件可以为property配置文件。106.一种可能的实现方式中,第一应用程序的进程获取内存检查模式配置文件,内存检查模式配置文件包括第一应用程序的配置项的情况下,第一应用程序的进程为第三标记赋予预设值以开启第一内存分配器。其中,第一应用程序的配置项用于指示对第一应用程序进行内存错误检测。第三标记为预设值用于表征启动该终端设备上第一内存分配器。第一内存分配器可以在执行内存申请的过程中检测内存分配错误。107.在一个例子中,第一应用程序启动过程中读取的property配置文件中包括gwp_asan_app的值为all,gwp_asan_app用于表征配置项。在该启动标记的值为all的情况下用于表征为该终端设备上运行的所有应用程序启动内存检查模式。第一应用程序的进程将第三标记forceenablegwpasan赋予预设值true,forceenablegwpasan为true用于表征开启第一内存分配器。108.在另一个例子中,第一应用程序启动过程中读取的property配置文件中包括gwp_asan_app的值为第一应用程序的标识,gwp_asan_app用于表征配置项,这种情况下,标识,终端设备运行第一应用程序时启动内存检查模式。第一应用程序的进程将第三标记forceenablegwpasan赋予预设值true,forceenablegwpasan为true用于表征开启第一内存分配器。109.另一种可能的实现方式中,第一内存分配器的配置状态表征为第一应用程序开启第一内存分配器的情况下,第一应用程序的进程为第三标记赋予预设值。110.本技术实施例中s300~s305在第一应用程序的启动过程中开启了第一内存分配器。111.本技术实施例在应用程序启动过程中还需要将目标程序库中与内存分配相关的函数替换为包括gwphooks提供的钩子函数。钩子函数位于应用程序框架层的钩子库中。112.s306:第一应用程序的进程将第一应用程序对应代码库中的第一函数替换为第一函数对应的目标函数。113.本技术实施例中,第一函数为与内存分配相关的函数。将第一函数替换为目标函数的情况下,第一应用程序的进程执行目标函数可以生成包括第一标记的内存分配相关的申请。该第一标记可以被系统库中内存申请分派判断逻辑所感知,在内存分配相关的申请包括该第一标记的情况下,内存申请分派判断逻辑将该申请分配至第一内存分配器进行处理,例如,内存申请分派判断逻辑将该申请分配至gwp-asan分配器进行处理。114.一种可能的实现方式中,系统服务接收触发指令,该触发指令可以是以命令行的方式输入的。响应于该触发指令,系统服务调用第一应用程序的主线程执行替换函数,第一应用程序的主线程执行替换函数可以将第一应用程序对应代码库中的第一函数替换为第一函数对应的目标函数。115.示例性的,如图4所示命令行工具执行adbshelldumpsysmeminfo—gwp-hook以向系统服务发送触发指令。系统服务响应于该触发指令,通过调用指令activitythread.dumpmeminfo调用第一应用程序的主线程执行替换函数,以将第一应用程序对应代码库中的第一函数替换为第一函数对应的目标函数。116.其中,替换函数可以包括第一替换函数debug.performgwphook()以及第二替换函数perform_malloc_hooks()。其中,debug.performgwphook()为java语言编写的函数,perform_malloc_hooks()为c语言编写的函数。第一应用程序的进程执行debug.performgwphook(),debug.performgwphook()在执行过程中调用perform_malloc_hooks()将第一应用程序对应代码库中的第一函数替换为第一函数对应的目标函数。117.另一种可能的实现方式中,孵化器进程创建第一应用程序的主线程,在确定内存检查模式配置文件中配置项包括第一应用程序的标识的情况下,第一应用程序的主线程将第一应用程序对应代码库中的第一函数替换为第一函数对应的目标函数。内存检查模式配置文件中配置项包括第一应用程序的标识的情况下,该内存检查模式配置文件表征第一应用程序对应的代码库启用了内存检测。118.在一个例子中,如图5所示孵化器进程调用创建指令创建(fork)第一应用程序的主线程的情况下,第一应用程序的主线程执行第一替换函数debug.performgwphook(),第一替换函数调用第二替换函数perform_malloc_hooks()将第一应用程序对应代码库中的第一函数替换为第一函数对应的目标函数。119.第一应用程序的主线程可以根据目标对应关系获取第一函数对应的目标函数,并将第一应用程序对应代码库中第一函数替换为目标函数。120.示例性的,目标对应关系如下表1所示:121.表1122.第一函数目标函数mallocgwp_malloc_hookcallocgwp_calloc_hookreallocgwp_realloc_hook123.表1中第一函数malloc对应的目标函数为gwp_malloc_hook,第一函数calloc对应的目标函数为gwp_calloc_hook,第一函数realloc对应的目标函数为gwp_realloc_hook。124.可以理解的是目标对应关系还可以以其他的方式表示,本技术实施例对此不进行限定。125.示例性的,替换函数中定义了第一函数与目标函数的对应关系,替换函数在应用程序对应代码库中包括该对应关系所包括第一函数的情况下,则将第一函数替换为目标函数。之后,全局偏移表中存储目标函数对应的地址。126.需要说明的是,本技术实施例中的代码实现中可以包括命令行接口、java接口以及c/c++接口。其中,命令行接口用于触发调用替换函数以实现将应用程序的程序库中第一函数替换为目标函数,并将系统库层中第一判断逻辑替换为第一判断逻辑与第二判断逻辑相结合的内存申请分派判断逻辑,替换后的内存申请分派判断逻辑在确定内存分配相关的申请包括第一标记的情况下,可以将该申请分配给第一内存分配器处理,在确定该申请不包括第一标记的情况下,可以将申请分配给第二内存分配器处理。java接口用于实现第一替换函数的触发,c/c++接口用于触发第二替换函数的触发。127.至此,第一应用程序启动后针对第一应用程序中特定代码库的内存错误检查配置完成,或者,针对第一应用程序的内存错误检查配置完成。128.以下结合附图对本技术实施例提供的应用内存错误检测流程进行说明,图6为本技术实施例提供的一种应用内存错误检测方法中应用内存错误检测流程的示意图,图6所示应用内存错误检测流程可以包括如下步骤:129.s600:终端设备获取来自第一应用程序的第一申请。130.本技术实施例中,第一申请为与内存分配相关的申请。131.可能的实现方式中,终端设备中第一应用程序的线程根据目标函数的标识,在全局偏移表中查询该目标函数所在的位置,并执行该目标函数得到第一申请。其中,目标函数的标识可以为目标函数的函数名。132.在一种可能的实现方式中,对于执行目标函数得到的第一申请可以设置有第一标记。第一申请的第一标记可以设置在第一申请对应的线程本地存储(threadlocalstorage,tls)所存储的地址中。133.举例来说,由于第一应用程序的tls中存储的地址的最低位通常为0,本技术实施例可以通过设置第一申请对应的tls中存储的地址的最低位为1,来设置第一申请的第一标记。通过第一标记可以判断第一申请是否由钩子库中钩子函数执行所得的。134.s601:在第一申请包括第一标记的情况下,终端设备对第一申请的执行过程进行内存错误检测。135.可能的实现方式中,终端设备判断第一申请是否包括第一标记,在第一申请包括第一标记的情况下,终端设备使用第一内存分配器执行第一申请以对第一申请的执行过程进行内存错误检测。136.基于s600中的示例,终端设备判断第一申请所对应的tls中地址的最低位是否为1,若是,则确定该第一申请包括第一标记,若否,则确定该第一申请不包括第一标记。137.s602:终端设备获取内存错误检测的检测结果。138.可能的实现方式中,终端设备中系统服务读取第一内存分配器进行内存错误检测的检测结果。139.本技术实施例中,终端设备将启用内存检测的代码库中与内存分配相关的函数替换为包括第一标记的函数,这样,执行替换后的函数得到的内存申请包括第一标记,终端设备在获取到包括第一标记的内存分配申请的情况下,将该申请由第一内存分配器(例如上述gwp-asan分配器)执行以进行内存错误检测,从而获取到代码库中的内存错误检测结果。有助于进行二进制的三方应用中内存错误的检测。140.如图7所示为本技术实施例所提供的一种应用内存错误检测方法的流程示意图。图7所示应用内存错误检测方法中,首先应用程序启动,可能的实现方式参考上述图3对应应用程序的启动流程,不再赘述。应用程序启动后,终端设备执行钩子函数。示例性的,该钩子函数可以为gwp_malloc_hook,该钩子函数可以由libgwp_asan_malloc_hooks.so库提供。该钩子函数在执行过程中拦截内存分配相关的申请,并为内存分配相关的申请设置第一标记,终端设备执行内存申请分派判断逻辑,该内存申请分派判断逻辑可以为标准函数库libc中的gwp_asan_malloc。终端设备判断内存分配相关申请是否包括第一标记。若是,则使用gwp-asan分配器执行该内存分配相关申请,若否,则使用malloc执行该内存分配相关申请。141.这样,被设置了第一标记的内存分配相关申请都可以使用gwp-asan分配器执行该申请以记录内存分配错误,而不包括第一标记的内存分配相关申请可以使用malloc执行该内存分配相关申请,从而有助于解决当前无法对应用的内存错误进行检测的问题。142.如图8所示为本技术实施例所提供的另一种应用内存错误检测方法的流程示意图。图8所示应用内存错误检测方法包括如下步骤:143.s800:终端设备将应用中与内存分配相关的函数替换为目标函数。144.本技术实施例中,内存分配相关的函数可以为上述实施例中的第一函数,目标函数可以为上述实施例中的目标函数。145.可能的实现方式参考s306中的描述,不再赘述。146.s801:终端设备执行目标函数得到与内存分配相关的第一申请。147.本技术实施例中,第一申请设置有第一标记。148.可能的实现方式参考s600中的描述,不再赘述。149.s802:终端设备在执行包括第一标记的第一申请时对第一申请的执行过程进行内存错误检测。150.可能的实现方式参考s601中的描述,不再赘述。151.本技术实施例中终端设备将启用内存检测的代码库中与内存分配相关的函数替换为包括第一标记的函数,这样,终端设备在获取到包括第一标记的内存分配申请的情况下,将该申请由第一内存分配器例如上述gwp-asan执行以进行内存错误检测,从而获取到代码库中的内存错误检测结果。152.上述主要从方法的角度对本技术实施例提供的方案进行了介绍。为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的方法步骤,本技术能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本技术的范围。153.本技术实施例可以根据上述方法示例对实现应用内存错误检测方法的装置进行功能模块的划分,例如可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。示例性的,将目标应用程序、画图接口以及显示引擎的功能集成在显示控制单元中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本技术实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。154.如图9所示为本技术实施例所提供的一种应用内存错误检测装置的结构示意图,图9所示应用内存错误检测装置90,包括存储模块901和处理模块902:所述存储模块901中存储有与内存分配相关的函数与目标函数的对应关系;所述处理模块902用于:根据所述对应关系将应用中第一函数替换为所述第一函数对应的目标函数;所述第一函数为与内存分配相关的函数;执行所述目标函数得到与内存分配相关的第一申请;所述第一申请设置有第一标记;在执行包括所述第一标记的所述第一申请时,对所述第一申请的执行过程进行内存错误检测。例如,结合图8,处理模块902可以用于执行s800~s802,结合图3,处理模块902可以用于执行s300~s306,结合图6,处理模块902可以用于执行s600~s602。155.可选的,处理模块902中配置有gwp-asan分配器;gwp-asan分配器用于对所执行的内存分配相关申请进行内存错误检测;处理模块902还用于:根据内存检查模式配置文件或gwp-asan分配器的配置状态,开启gwp-asan分配器;配置状态用于表征开启gwp-asan分配器;内存检查模式配置文件包括应用的配置项;配置项用于指示对应用进行内存错误检测;处理模块902具体用于利用gwp-asan分配器对第一申请的执行过程进行内存错误检测。156.可选的,处理模块902中运行有应用的进程;在应用的启动过程中,应用的进程用于获取内存检查模式配置文件;在内存检查模式配置文件包括应用的配置项的情况下,应用的进程用于开启gwp-asan分配器。157.可选的,处理模块902中运行有系统服务以及孵化器进程,在应用的启动过程中,系统服务用于获取gwp-asan分配器的配置状态;配置状态用于表征开始gwp-asan分配器;系统服务还用于向孵化器进程发送进程创建指令;进程创建指令中包括第二标记,第二标记用于指示孵化器进程开启gwp-asan分配器;响应于进程创建指令,孵化器进程用于创建应用的进程;应用的进程用于根据第二标记开启gwp-asan分配器。158.可选的,终端设备中运行有系统服务以及应用的主线程,系统服务用于接收触发指令;响应于触发指令,系统服务还用于调用应用的主线程将应用中与内存分配相关的函数替换为目标函数。159.可选的,触发指令来自命令行接口、java接口、c接口或者c++接口中的任意一种。160.可选的,终端设备中运行有孵化器进程,孵化器进程用于创建应用的主线程,在确定内存检查模式配置文件包括应用的配置项的情况下,应用的主线程用于将应用中与内存分配相关的函数替换为目标函数;配置项用于指示对应用进行内存错误检测。161.在一个例子中,结合图1,存储模块901的功能可以由图1中存储器120来实现,处理模块902的功能可以由图1中处理器110调用存储器120的计算机程序指令来实现。162.如图10所示为本技术实施例提供的一种芯片的结构示意图。芯片100包括一个或两个以上(包括两个)处理器1001、通信线路1002和通信接口1003,可选的,芯片100还包括存储器1004。163.在一些实施方式中,存储器1004存储了如下的元素:可执行模块或者数据结构,或者他们的子集,或者他们的扩展集。164.上述本技术实施例描述的方法可以应用于处理器1001中,或者由处理器1001实现。处理器1001可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器1001中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器1001可以是通用处理器(例如,微处理器或常规处理器)、数字信号处理器(digitalsignalprocessing,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门、晶体管逻辑器件或分立硬件组件,处理器1001可以实现或者执行本技术实施例中的公开的各方法、步骤及逻辑框图。165.结合本技术实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。其中,软件模块可以位于随机存储器、只读存储器、可编程只读存储器或带电可擦写可编程存储器(electricallyerasableprogrammablereadonlymemory,eeprom)等本领域成熟的存储介质中。该存储介质位于存储器1004,处理器1001读取存储器1004中的信息,结合其硬件完成上述方法的步骤。166.处理器1001、存储器1004以及通信接口1003之间可以通过通信线路1002进行通信。167.在上述实施例中,存储器存储的供处理器执行的指令可以以计算机程序产品的形式实现。其中,计算机程序产品可以是事先写入在存储器中,也可以是以软件形式下载并安装在存储器中。168.本技术实施例还提供一种计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本技术实施例的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络或者其他可编程装置。计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digitalsubscriberline,dsl)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包括一个或多个可用介质集成的服务器、数据中心等数据存储设备。例如,可用介质可以包括磁性介质(例如,软盘、硬盘或磁带)、光介质(例如,数字通用光盘(digitalversatiledisc,dvd))、或者半导体介质(例如,固态硬盘(solidstatedisk,ssd))等。169.本技术实施例提供一种电子设备,该电子设备包括处理器和存储器,存储器用于存储计算机程序,所述处理器用于执行所述计算机程序,以执行上述任意一种应用内存错误检测方法。170.本技术实施例还提供一种计算机可读存储介质。上述实施例中描述的方法可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。计算机可读介质可以包括计算机存储介质和通信介质,还可以包括任何可以将计算机程序从一个地方传送到另一个地方的介质。存储介质可以是由计算机访问的任何目标介质。171.作为一种可能的设计,计算机可读介质可以包括紧凑型光盘只读储存器(compactdiscread-onlymemory,cd-rom)、ram、rom、eeprom或其它光盘存储器;计算机可读介质可以包括磁盘存储器或其它磁盘存储设备。而且,任何连接线也可以被适当地称为计算机可读介质。例如,如果使用同轴电缆,光纤电缆,双绞线,dsl或无线技术(如红外,无线电和微波)从网站,服务器或其它远程源传输软件,则同轴电缆,光纤电缆,双绞线,dsl或诸如红外,无线电和微波之类的无线技术包括在介质的定义中。如本文所使用的磁盘和光盘包括光盘(cd),激光盘,光盘,数字通用光盘(digitalversatiledisc,dvd),软盘和蓝光盘,其中磁盘通常以磁性方式再现数据,而光盘利用激光光学地再现数据。172.上述的组合也应包括在计算机可读介质的范围内。以上所述,仅为本技术的具体实施方式,但本技术的保护范围并不局限于此,任何熟悉本
技术领域:
:的技术人员在本技术揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本技术的保护范围之内。因此,本技术的保护范围应以权利要求的保护范围为准。当前第1页12当前第1页12
技术特征:
1.一种应用内存错误检测方法,其特征在于,应用于终端设备;所述方法包括:所述终端设备将应用中与内存分配相关的函数替换为目标函数;所述终端设备执行所述目标函数得到与内存分配相关的第一申请;所述第一申请设置有第一标记;所述终端设备在执行包括所述第一标记的所述第一申请时,所述终端设备对所述第一申请的执行过程进行内存错误检测。2.根据权利要求1所述的应用内存错误检测方法,其特征在于,所述终端设备中配置有gwp-asan分配器;所述gwp-asan分配器用于对所执行的内存分配相关申请进行内存错误检测;所述方法还包括:所述终端设备根据内存检查模式配置文件或所述gwp-asan分配器的配置状态,开启所述gwp-asan分配器;所述配置状态用于表征开启所述gwp-asan分配器;所述内存检查模式配置文件包括所述应用的配置项;所述配置项用于指示对所述应用进行内存错误检测;所述终端设备对所述第一申请的执行过程进行内存错误检测,包括:所述终端设备利用所述gwp-asan分配器对所述第一申请的执行过程进行内存错误检测。3.根据权利要求2所述的应用内存错误检测方法,其特征在于,所述终端设备中运行有所述应用的进程;所述终端设备根据内存检查模式配置文件或所述gwp-asan分配器的配置状态,开启所述gwp-asan分配器,包括:在所述应用的启动过程中,所述应用的进程获取所述内存检查模式配置文件;在所述内存检查模式配置文件包括所述应用的所述配置项的情况下,所述应用的进程开启所述gwp-asan分配器。4.根据权利要求2所述的应用内存错误检测方法,其特征在于,所述终端设备中运行有系统服务以及孵化器进程,所述终端设备根据内存检查模式配置文件或所述gwp-asan分配器的配置状态,开启所述gwp-asan分配器,包括:在所述应用的启动过程中,所述系统服务获取所述gwp-asan分配器的配置状态;所述配置状态用于表征开始所述gwp-asan分配器;所述系统服务向所述孵化器进程发送进程创建指令;所述进程创建指令中包括第二标记,所述第二标记用于指示所述孵化器进程开启所述gwp-asan分配器;响应于所述进程创建指令,所述孵化器进程创建所述应用的进程;所述应用的进程根据所述第二标记开启所述gwp-asan分配器。5.根据权利要求1-4任一项所述的应用内存错误检测方法,其特征在于,所述终端设备中运行有系统服务以及所述应用的主线程,所述终端设备将应用中与内存分配相关的函数替换为目标函数,包括:所述系统服务接收触发指令;响应于所述触发指令,所述系统服务调用所述应用的主线程将所述应用中与内存分配相关的函数替换为所述目标函数。6.根据权利要求5所述的应用内存错误检测方法,其特征在于,所述触发指令来自命令行接口、java接口、c接口或者c++接口中的任意一种。7.根据权利要求1-4任一项所述的应用内存错误检测方法,其特征在于,所述终端设备
中运行有孵化器进程,所述终端设备将应用中与内存分配相关的函数替换为目标函数,包括:所述孵化器进程创建所述应用的主线程;在确定内存检查模式配置文件包括所述应用的配置项的情况下,所述应用的主线程将所述应用中与内存分配相关的函数替换为所述目标函数;所述配置项用于指示对所述应用进行内存错误检测。8.一种应用内存错误检测装置,其特征在于,包括存储模块和处理模块:所述存储模块中存储有与内存分配相关的函数与目标函数的对应关系;所述处理模块用于:根据所述对应关系将应用中第一函数替换为所述第一函数对应的目标函数;所述第一函数为与内存分配相关的函数;执行所述目标函数得到与内存分配相关的第一申请;所述第一申请设置有第一标记;在执行包括所述第一标记的所述第一申请时,对所述第一申请的执行过程进行内存错误检测。9.一种电子设备,其特征在于,包括:存储器和处理器,所述存储器用于存储计算机程序,所述处理器用于执行所述计算机程序,以执行如权利要求1至7任一项所述的应用内存错误检测方法。10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有指令,当所述指令被执行时,使得计算机执行如权利要求1至7任一项所述的应用内存错误检测方法。
技术总结
本申请实施例提供一种应用内存错误检测方法、装置及存储介质,涉及终端技术领域,该方法包括:终端设备将特定应用中与内存分配相关的函数替换为目标函数;终端设备执行目标函数得到的与内存分配相关的第一申请中设置有第一标记;这样,终端设备可以选择对包括第一标记的申请进行内存错误检测,从而实现了对特定应用进行内存错误检测。应用进行内存错误检测。应用进行内存错误检测。
技术研发人员:赵俊民 余亮 陆尚烨
受保护的技术使用者:荣耀终端有限公司
技术研发日:2022.01.10
技术公布日:2023/7/22
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
