内存泄漏检测方法和装置制造方法及图纸

技术编号:15284072 阅读:148 留言:0更新日期:2017-05-06 12:30
本发明专利技术涉及一种内存泄漏检测方法和装置。所述方法包括以下步骤:在被测进程启动时加载预设的内存监控动态链接库;通过所述内存监控动态链接库挂钩内存分配函数和/或windows系统应用程序编程接口;通过挂钩函数调用所述内存分配函数和/或windows系统应用程序编程接口,收集被测进程启动时的内存分配信息,以及收集被测进程退出时的内存分配信息;对所述被测进程启动时的内存分配信息及退出时的内存分配信息进行比较得出内存泄漏信息。上述内存泄漏检测方法和装置,监控了被测进程从启动开始到退出的整个过程中的内存分配信息,监控的时间点精确,得到的数据全面,且统计出来的结果是始终没有释放的,则得出的内存泄漏信息更加准确。

Memory leak detection method and device

The invention relates to a method and a device for detecting memory leaks. The method comprises the following steps: memory monitoring dynamic link library preset in the measured load when the process starts; through the memory monitoring dynamic link library linked memory allocation function and / or windows application programming interface; through the hook function calls the memory allocation function and / or windows application programming interface, memory the distribution of information collection is measured when the process starts, and collect the measured memory allocation information when the process exits; compared the memory leak information on memory allocation and memory allocation information from the information of the measured when the process starts. The memory leak detection method and device, monitoring the measured process from the start to the memory allocation information in the whole process of exit, monitoring the precise point in time, the overall data, results and statistics is never released, the memory leak information more accurately.

【技术实现步骤摘要】

本专利技术涉及内存检测领域,特别是涉及一种内存泄漏检测方法和装置
技术介绍
内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的,大小任意的,使用完后必须显示释放的内存。应用程序一般使用malloc、realloc、new等函数从堆中分配到一块内存,使用完后,程序必须负责相应的调用free或delete释放该内存块,否则,这块内存就不能被再次使用,也就是这块内存泄漏了。在常规的客户端性能专项测试中,内存使用情况是重点关注的一个指标。Windows调试工具集(theDebuggingToolsforWindows)中的UMDH工具能监控到内存泄漏的问题点,得到内存泄漏处的堆栈。UMDH监控Windows系统函数中的内存分配函数,通过统计比较使用者手动指定的开始和结束两个时间点内存分配情况得到这两个时间点之间的内存泄漏,然而手动指定难以精确,且得到的数据不全面。
技术实现思路
基于此,有必要针对传统的内存泄漏检测手动指定时间点不够精确且得到的数据不全面的问题,提供一种内存泄漏检测方法,监控的时间点精确且监控的数据全面。此外,还有必要提供一种内存泄漏检测装置,监控的时间点精确且监控的数据全本文档来自技高网...
内存泄漏检测方法和装置

【技术保护点】
一种内存泄漏检测方法,包括以下步骤:在被测进程启动时加载预设的内存监控动态链接库;通过所述内存监控动态链接库挂钩内存分配函数和/或windows系统应用程序编程接口;通过挂钩函数调用所述内存分配函数和/或windows系统应用程序编程接口,收集被测进程启动时的内存分配信息,以及收集被测进程退出时的内存分配信息;对所述被测进程启动时的内存分配信息及退出时的内存分配信息进行比较得出内存泄漏信息。

【技术特征摘要】
1.一种内存泄漏检测方法,包括以下步骤:在被测进程启动时加载预设的内存监控动态链接库;通过所述内存监控动态链接库挂钩内存分配函数和/或windows系统应用程序编程接口;通过挂钩函数调用所述内存分配函数和/或windows系统应用程序编程接口,收集被测进程启动时的内存分配信息,以及收集被测进程退出时的内存分配信息;对所述被测进程启动时的内存分配信息及退出时的内存分配信息进行比较得出内存泄漏信息。2.根据权利要求1所述的方法,其特征在于,所述方法还包括:通过挂钩函数调用所述内存分配函数和/或windows系统应用程序编程接口,收集被测进程启动后的内存监控信息;将所述内存监控信息发送给数据处理进程,由所述数据处理进程对所述内存监控信息进行处理。3.根据权利要求2所述的方法,其特征在于,所述将所述内存监控信息发送给数据处理进程,由所述数据处理进程对所述内存监控信息进行处理步骤包括:将所述内存监控信息写入共享内存中;通过所述数据处理进程的监控线程读取所述共享内存中的内存监控信息,并存入所述数据处理进程的缓存中;通过所述数据处理进程的分配线程从所述缓存中取出内存监控信息,并分配给所述数据处理进程的处理线程进行处理;通过所述数据处理进程的刷新线程对所述被测进程的内存监控信息处理得到的内存分配信息进行刷新。4.根据权利要求3所述的方法,其特征在于,所述内存监控信息为内存分配信息或内存释放信息;所述方法还包括:当所述内存监控信息为内存释放信息时,根据所述内存释放信息从所述数据处理进程的高速缓存中查找是否存在对应的内存分配信息,若是,则删除所述内存释放信息及对应的内存分配信息。5.根据权利要求1所述的方法,其特征在于,所述内存分配信息包括内存分配地址、内存分配大小和内存分配的函数堆栈;所述对所述被测进程启动时的内存分配信息及退出时的内存分配信息进行比较得出内存泄漏信息的步骤包括:将所述被测进程启动时的内存分配信息中的函数堆栈和退出时的内存分配信息中的函数堆栈进行比较,判断得出被测进程退出时内存分配信息中比被测进程启动时的内存分配信息中多的函数堆栈,则所述多的函数堆栈为函数堆栈内存泄漏。6.根据权利要求5所述的方法,其特征在于,所述方法还包括:对多的函数堆栈按照对应的函数地址大小进行排序,再对排序后的函数堆栈进行分类统计,得出函数堆栈内存泄漏次数和函数内存泄漏大小。7.根据权利要求1所述的方法,其特征在于,所述方法还包括:在进入一次被测场景后退出到前序场景开始收集第一内存快照,所述第一内存快照记录当前时刻的内存分配信息;在再次进入到被测场景后退出到前序场景开始收集第二内存快照,所述第二内存快照记录当前时刻的内存分配信息;将第一内存快照记录的内存分配信息及第二内存快照记录的内存分配信息进行比较,得出被测场景的内存泄漏信息;或者,在游戏程序启动时收集第一内存快照,所述第一内存快照记录当前时刻的内存分配信息;在游戏程序退出时收集第二内存快照,所述第二内存快照记录当前时刻的内存分配信息;将第一内存快照记录的内存分配信息及第二内存快照记录的内存分配信息进行比较,得出被测场景的内存泄漏信息。8.根据权利要求7所述的方法,其特征在于,所述内存分配信息包括内存
\t分配地址、内存分配大小和内存分配的函数堆栈;将第一内存快照记录的内存分配信息及第二内存快照记录的内存分配信息进行比较的步骤包括:将所述第一内存快照记录的内存分配信息中的函数堆栈和第二内存快照记录的内存分配信息中的函数堆栈进行比较,判断得出第二内存快照记录的内存分配信息中比第一内存快照记录的内存分配信息中多的函数堆栈,则所述多的函数堆栈为函数堆栈内存泄漏。9.根据权利要求8所述的方法,其特征在于,所述方法还包括:对多的函数堆栈按照对应的函数地址大小进行排序,再对排序后的函数堆栈进行分类统计,得出函数堆栈内存泄漏次数和函数内存泄漏大小。10.一种内存泄漏检测装置,其特征在于,包括:加载模块,用于在被测进程启动时加载预设的内存...

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

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

1