[发明专利]一种内存泄露过程追溯方法及装置有效
申请号: | 201810316302.8 | 申请日: | 2018-04-10 |
公开(公告)号: | CN108664394B | 公开(公告)日: | 2021-12-14 |
发明(设计)人: | 王凯峰;王俏;王天凤 | 申请(专利权)人: | 奇安信科技集团股份有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36;G06F9/50 |
代理公司: | 北京路浩知识产权代理有限公司 11002 | 代理人: | 王莹;李相雨 |
地址: | 100088 北京市西城区*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 内存 泄露 过程 追溯 方法 装置 | ||
本发明实施例公开了一种内存泄露过程追溯方法及装置,方法包括:根据原生内存操作函数生成更新后内存操作函数,对原生内存操作函数分配的第一内存添加头部和尾部,得到第二内存;若根据预先获取的起止地址判断获知更新后内存操作函数的地址在所述起止地址内,则确定第二内存可追溯;将第二内存添加至全局链表中或从全局链表中移除;若可执行程序执行结束后全局链表不为空,则确定存在内存泄露,并根据更新后内存操作函数的调用关系追溯内存泄露的过程,能够获取更新后内存操作函数的执行路径来获取导致内存泄漏的执行过程,使得开发和测试人员对内存泄漏的位置和为什么会发生内存泄漏一目了然,无需耗费时间和精力再去分析代码逻辑。
技术领域
本发明实施例涉及计算机技术领域,具体涉及一种内存泄露过程追溯方法及装置。
背景技术
在软件开发过程中,内核泄漏是常见的问题,它直接影响软件系统的长期稳定运行。内存泄漏是指程序中己动态分配的堆内存由于某种原因未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。
目前检测内存泄漏的方法主要是使用内存快照对比的方法,即在程序运行过程每隔一段时间抓取内存分配操作的快照,通过人工方式查找相邻两次抓取的快照的差异,找出没有释放的内存块,但这种方法人工成本较高,需要测试人员比较了解业务。另一种方法是获取内存分配器分配的内存的地址堆栈信息,通过与可执行程序依赖的动态库的基地址和尾地址比较,获取地址堆栈信息对应的具体位置信息,但这种方法确定的是内存泄漏的具体位置,无法确定内存泄漏发生时程序的执行逻辑,即无法获取为何会发生内存泄漏。
在实现本发明实施例的过程中,发明人发现现有的方法缺乏对内存泄露过程的追溯,必须由开发和测试人员人工进行代码逻辑分析,耗费时间和精力。
发明内容
由于现有方法存在上述问题,本发明实施例提出一种内存泄露过程追溯方法及装置。
第一方面,本发明实施例提出一种内存泄露过程追溯方法,包括:
根据原生内存操作函数生成更新后内存操作函数,通过所述更新后内存操作函数对所述原生内存操作函数分配的第一内存添加头部和尾部,得到第二内存;
若根据预先获取的可执行程序和保留栈帧的动态库的虚拟地址的起止地址判断获知所述更新后内存操作函数的地址在所述起止地址内,则确定所述第二内存可追溯;
通过所述更新后内存操作函数将所述第二内存添加至全局链表中,或,通过内存释放函数将所述第二内存从所述全局链表中移除;
若所述可执行程序执行结束后所述全局链表不为空,则确定存在内存泄露,并根据所述更新后内存操作函数的调用关系追溯内存泄露的过程。
可选地,所述通过所述更新后内存操作函数将所述第二内存添加至全局链表中,具体包括:
所述更新后内存操作函数根据当前函数的调用栈信息获取当前函数的调用链关系,将所述调用链关系存储在所述第二内存的头部,并将所述第二内存添加至全局链表中。
可选地,所述方法还包括:
若后一次获取的调用链的调用次数大于前一次获取的调用链的调用次数,则确定存在内存泄露,并根据所述更新后内存操作函数的调用关系追溯内存泄露的过程。
可选地,所述根据原生内存操作函数生成更新后内存操作函数,具体包括:
在不改变可执行程序中调用所述原生内存操作函数的逻辑和调用代码的条件下,修改所述原生内存操作函数的预加载的环境变量或钩子函数,或重新定义所述原生内存操作函数的链接关系,或根据目标标识优先解析链接器。
可选地,所述头部中存储的信息包括:调用信息、分配的内存地址、实际使用的内存地址、分配的内存总大小、实际使用的内存总大小和内存越界确认信息。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于奇安信科技集团股份有限公司,未经奇安信科技集团股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201810316302.8/2.html,转载请声明来源钻瓜专利网。