The present application discloses a method for monitoring the memory of an application program, a device for monitoring the memory of an application program, and an electronic device. The method includes the monitoring application memory: memory applications running in memory space, additional requests preset memory monitoring the size of the space; the allocation of memory space for operation, the memory allocation information recording memory monitoring space in additional requests in the application memory space; was released, the memory release information recording memory monitoring in extra requests in space. The technical proposal to solve the false positives and false negatives or due to the instrumentation method or algorithm complexity caused by running slowly reduce performance, so as to improve the reliability of the results, to solve the various problems encountered in the use of C/C++ program memory, for large application availability and use of complex high cost low.
【技术实现步骤摘要】
一种监控应用程序内存的方法、装置及电子设备
本申请涉及计算机
,具体涉及一种监控应用程序内存的方法以及一种监控应用程序内存的装置;本申请同时涉及一种电子设备。
技术介绍
随着现代系统规模日益扩大,系统中运行的应用程序数量显著增加。这些应用程序通常都会消耗一定量的资源,比如内存。其中某些应用程序有可能会造成内存泄漏、对象doublefree以及访问地址越界等,在计算机科学中,内存泄露是指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄露并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费;doublefree其实就是同一个指针释放两次,虽然一般把它叫做doublefree,其实只要是多次释放一个指向堆内存的指针都有可能产生漏洞;访问地址越界是向系统申请了一块内存,在使用这块内存的时候,超出了申请的范围。造成的直接后果是修改了其它内存块的内容,如果被修改的地址是正在使用中内存,会造成应用程序异常。在应用程序开发的过程中,由于往往需要随着业务流或控制流的处理而进行大量的内存申请和释放,很容易 ...
【技术保护点】
一种监控应用程序内存的方法,其特征在于,包括:应用程序申请内存运行空间时,在内存中额外请求预设大小的内存监控空间;对申请的内存运行空间进行分配时,在额外请求的内存监控空间中记录本次内存分配信息;对申请的内存运行空间进行释放时,在额外请求的内存监控空间中记录本次内存释放信息。
【技术特征摘要】
1.一种监控应用程序内存的方法,其特征在于,包括:应用程序申请内存运行空间时,在内存中额外请求预设大小的内存监控空间;对申请的内存运行空间进行分配时,在额外请求的内存监控空间中记录本次内存分配信息;对申请的内存运行空间进行释放时,在额外请求的内存监控空间中记录本次内存释放信息。2.根据权利要求1所述的监控应用程序内存的方法,其特征在于,在所述应用程序申请内存运行空间时,在内存中额外请求预设大小的内存监控空间的步骤之前,包括:将预设的重载函数库链接到应用程序中。3.根据权利要求2所述的监控应用程序内存的方法,其特征在于,所述预设的重载函数库,至少包括如下内存管理函数:内存分配函数、内存释放函数以及内存调整函数。4.根据权利要求2所述的监控应用程序内存的方法,其特征在于,所述将预设的重载函数库链接到应用程序中,包括:若所述应用程序是采用静态链接的应用程序,则在编译时将静态链接库链接进应用程序;若所述应用程序是采用动态连接的应用程序,则在编译时将动态链接库链接进应用程序或者应用程序运行时,通过注入的方式把动态链接库注入应用程序。5.根据权利要求3所述的监控应用程序内存的方法,其特征在于,所述应用程序申请内存运行空间时,在内存中额外请求预设大小的内存监控空间,包括:应用程序调用所述预设的重载函数库中的内存管理函数申请内存运行空间时,所述内存管理函数在内存中额外请求预设大小的内存监控空间。6.根据权利要求5所述的监控应用程序内存的方法,其特征在于,所述额外请求预设大小的内存监控空间是:用于记录内存信息的大小为16字节的标签。7.根据权利要求6所述的监控应用程序内存的方法,其特征在于,所述标签记录的信息,至少包括:内存块状态、内存分配栈标识、时间戳、线程标识、桶标识以及标签标识。8.根据权利要求6所述的监控应用程序内存的方法,其特征在于,所述对申请的内存运行空间进行分配时,在额外请求的内存监控空间中记录本次内存分配信息,包括:应用程序调用所述预设的重载函数库中的内存管理函数分配申请的内存运行空间时,判断所述内存管理函数是否成功分配申请的内存运行空间;若是,则在所述标签中记录本次内存分配信息。9.根据权利要求8所述的监控应用程序内存的方法,其特征在于,所述在所述标签中记录本次内存分配信息,包括:将所述标签中的内存块状态设置为已分配状态;调用回溯函数获取函数调用栈的标识,将所述标签中的内存分配栈标识设置为通过回溯函数获取的函数调用栈的标识;获取对申请的内存运行空间进行分配时的当前系统时间,将所述标签中的时间戳设置为获取的内存运行空间进行分配时的当前系统时间;获取对申请的内存运行空间进行请求的线程标识,将所述标签中的线程标识设置为获取的对申请的内存运行空间进行请求的线程标识;根据申请的内存运行空间的大小,将所述内存运行空间进行分桶操作,并按照分桶操作的顺序对每个桶设置桶标识,在所述标签中的桶标识中记录当前内存大小对应桶的桶标识;将所述标签中的标签标识设置为已添加标签的标识。10.根据权利要求6所述的监控应用程序内存的方法,其特征在于,所述对申请的内存运行空间进行释放时,在额外请求的内存监控空间中记录本次内存释放信息,包括:应用程序调用所述预设的重载函数库中的内存管理函数释放申请的内存运行空间时,在所述标签中记录本次内存释放信息。11.根据权利要求10所述的监控应用程序内存的方法,其特征在于,所述在所述标签中记录本次内存释放信息,包括:将所述标签中的内存块状态设置为已释放状态;调用回溯函数获取函数调用栈的标识,将所述标签中的内存分配栈标识设置为通过回溯函数获取的内存块的释放函数调用栈的标识;获取对申请的内存运行空间进行释放时的当前系统时间,将所述标签中的时间戳设置为获取的内存运行空间进行释放时的当前系统时间;获取对释放的内存空间进行请求的线程标识,将所述标签中的线程标识设置为获取的对释放的内存空间进行请求的线程标识;将所述标签中的标签标识设置为已添加标签的标识。12.根据权利要求9或11所述的监控应用程序内存的方法,其特征在于,所述调用回溯函数获取函数调用栈的标识,包括:采用编译器开关记录回溯函数获取函数调用栈的标识。13.根据权利要求12所述的监控应用程序内存的方法,其特征在于,所述采用编译器开关记录回溯函数获取函数调用栈的标识,包括:在每个函数调用的出入口调用跟踪函数;通过栈记录所述跟踪函数调用返回地址,通过回溯函数汇总栈信息获取调用栈的标识。14.根据权利要求10所述的监控应用程序内存的方法,其特征在于,在所述标签中记录本次内存释放信息的步骤之前,包括:判断所述标签中的内存块状态是否为已分配状态;若是,则执行所述在所述标签中记录本次内存释放信息的步骤;若否,则调用终止函数结束该应用程序,并转储保存进程信息。15.根据权利要求13所述的监控应用程序内存的方法,其特征在于,在所述在每个函数调用的出入口调用跟踪函数的步骤之前,还包括:在所述跟踪函数中预设内存写坏的判断条件;在所述在每个函数调用的出入口调用跟踪函数的步骤之后,包括:判断内存块是否满足预设内存写坏的判断条件;若是,则调用终止函数结束该应用程序,并转储保存进程信息;若否,则执行所述通过栈记录所述跟踪函数调用返回地址,并通过回溯函数汇总栈信息获取调用栈的标识的步骤。16.根据权利要求1所述的监控应用程序内存的方法,其特征在于,在所述对申请的内存运行空间进行分配或释放时,还包括:根据在应用程序中已经运行的进程的内存镜像信息,创建与该进程内存镜像相同的子进程。17.根据权利要求16所述的监控应用程序内存的方法,其特征在于,当应用程序发生异常时,获取当前应用程序的内存布局,可以采用如下方式实现:调用终止函数使子进程终止运行,并转存进程信息获取应用程序的内存布局。18.一种监控应用程序内存的装置,其特征在于,包括:监控空间请求单元,用于应用程序申请内存运行空间时,在内存中额外请求预设大小的内存监控空间;内存分配信息记录单元,用于对申请的内存运行空间进行分配时,在额外请求的内存监控空间中记录本次内存分配信息;内存释放信息记录单元,用于对申请的内存运行空间进行释放时,在额外请求的内存监控空间中记录本次内存释放信息。19.根据权利要求18所述的监控应用程序内存的装置,其特征在于,还包括:重载函数...
【专利技术属性】
技术研发人员:赵树起,
申请(专利权)人:阿里巴巴集团控股有限公司,
类型:发明
国别省市:开曼群岛,KY
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。