一种内存泄露的定位方法及系统

著录项
  • CN201710060920.6
  • 20170125
  • CN106844216A
  • 20170613
  • 深圳怡化电脑股份有限公司;深圳市怡化时代科技有限公司;深圳市怡化金融智能研究院
  • 蒋玉萍
  • G06F11/36
  • G06F11/36

  • 广东省深圳市南山区后海大道2388号怡化金融科技大厦26楼
  • 广东(44)
  • 北京品源专利代理有限公司
  • 孟金喆;胡彬
摘要
本发明公开了一种内存泄露的定位方法及系统,所述方法包括:在监测到申请内存操作时,获取针对申请而分配内存的身份信息;将所述身份信息保存到预设的循环链表节点中,生成节点信息;在监测到释放内存操作时,根据释放内存的身份信息遍历所述循环链表,查与所述释放内存的身份信息相匹配的节点信息,并将查到的节点信息从所述循环链表中删除;根据所述循环链表中剩余的节点信息定位泄露的内存。本发明实施例提供的一种内存泄露的定位方法,实现了快速且有效地定位内存泄露的源代码位置的目的。
权利要求

1.一种内存泄露的定位方法,其特征在于,包括:

在监测到申请内存操作时,获取针对申请而分配内存的身份信息;

将所述身份信息保存到预设的循环链表节点中,生成节点信息;

在监测到释放内存操作时,根据释放内存的身份信息遍历所述循环链表,查与所述 释放内存的身份信息相匹配的节点信息,并将查到的节点信息从所述循环链表中删除;

根据所述循环链表中剩余的节点信息定位泄露的内存。

2.根据权利要求1所述的方法,其特征在于,所述在监测到申请内存操作时,获取针对 申请而分配内存的身份信息,包括:

在监测到调用内存申请函数来申请内存时,确定存在申请内存操作;

通过重载内存申请函数获取针对申请所分配内存的身份信息。

3.根据权利要求2所述的方法,其特征在于,将所述身份信息保存到预设的循环链表节 点中,生成节点信息之前,还包括:

检测所述预设的循环链表是否已经存在,若是则执行将所述身份信息保存到预设的循 环链表节点中,生成节点信息的操作,否则,创建预设的循环链表以及循环链表节点。

4.根据权利要求1所述的方法,其特征在于,所述在监测到释放内存操作时,根据释放 内存的身份信息遍历所述循环链表,查与所述释放内存的身份信息相匹配的节点信息, 并将查到的节点信息从所述循环链表中删除,包括:

在监测到调用内存释放函数来释放内存时,确定存在释放内存操作;

通过重载内存释放函数获取释放内存的身份信息;

根据所述释放内存的身份信息遍历所述循环链表,查与所述释放内存的身份信息相 匹配的节点信息,并将查到的节点信息从所述循环链表中删除。

5.根据权利要求1所述的方法,其特征在于,所述根据所述循环链表中剩余的节点信息 定位泄露的内存,包括:

当接收到设定触发指令时,将所述循环链表中剩余的节点信息以文件的形式记录到文 件系统中,以供查询泄露的内存。

6.根据权利要求1-5任一项所述的方法,其特征在于,所述身份信息包括:调用内存申 请函数的文件名、调用内存申请函数的函数名、申请成功的内存地址、内存申请时间和源代 码行位置信息中的至少一项。

7.一种内存泄露的定位系统,其特征在于,包括:

获取模块,用于在监测到申请内存操作时,获取针对申请而分配内存的身份信息;

保存模块,用于将所述身份信息保存到预设的循环链表节点中,生成节点信息;

删除模块,用于在监测到释放内存操作时,根据释放内存的身份信息遍历所述循环链 表,查与所述释放内存的身份信息相匹配的节点信息,并将查到的节点信息从所述循 环链表中删除;

定位模块,用于根据所述循环链表中剩余的节点信息定位泄露的内存。

8.根据权利要求7所述的系统,其特征在于,

所述获取模块包括:申请内存操作确定单元,用于在监测到调用内存申请函数来申请 内存时,确定存在申请内存操作;第一获取单元,用于通过重载内存申请函数获取针对申请 所分配内存的身份信息;

所述删除模块包括:释放内存操作确定单元,用于在监测到调用内存释放函数来释放 内存时,确定存在释放内存操作;第二获取单元,用于通过重载内存释放函数获取释放内存 的身份信息;删除单元,用于根据所述释放内存的身份信息遍历所述循环链表,查与所述 释放内存的身份信息相匹配的节点信息,并将查到的节点信息从所述循环链表中删除;

所述定位模块具体用于当接收到设定触发指令时,将所述循环链表中剩余的节点信息 以文件的形式记录到文件系统中,以供查询泄露的内存。

9.根据权利要求8所述的系统,其特征在于,还包括:

检测模块,用于在将所述身份信息保存到预设的循环链表节点中,生成节点信息之前, 检测所述预设的循环链表是否已经存在,若是则执行将所述身份信息保存到预设的循环链 表节点中,生成节点信息的操作,否则,创建预设的循环链表以及循环链表节点。

10.根据权利要求7-9任一项所述的系统,其特征在于,

所述身份信息包括:调用内存申请函数的文件名、调用内存申请函数的函数名、申请成 功的内存地址、内存申请时间和源代码行位置信息中的至少一项。

说明书
技术领域

本发明实施例涉及测试技术领域,尤其涉及一种内存泄露的定位方法及系统。

在计算机科学中,内存泄漏是指由于疏忽或错误造成程序未能释放已经不再使用 的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于 程序设计错误,失去了对该段内存的控制,导致该段内存不能被再次使用,因而造成了内存 的浪费。

一个小的内存泄露可能不需要太注意,但是若程序泄露大块内存,或者渐增式的 泄露内存会引起下述现象:先是系统性能降低,然后引起复杂的内存耗尽错误;最坏的情况 是,一个内存泄露程序可能用完了非常多的内存而引起其他程序出错,而用户不能知道错 误到底来自哪里。另外,一个看上去危害不大的内存泄露,可能是另一个问题的先兆。因此, 要尽量避免内存泄露现象的发生,要避免内存泄露,除了要求编程人员具有良好的编码习 惯和编码规范之外,关键还要从程序代码上入手,对内存泄露进行高效、可靠的定位检测, 一旦发现程序异常,方便编程人员对程序进行必要的修改。

本发明实施例提供了一种内存泄露的定位方法及系统,以实现快速定位内存泄露 的源代码位置。

第一方面,本发明实施例提供了一种内存泄露的定位方法,该方法包括:

在监测到申请内存操作时,获取针对申请而分配内存的身份信息;

将所述身份信息保存到预设的循环链表节点中,生成节点信息;

在监测到释放内存操作时,根据释放内存的身份信息遍历所述循环链表,查与 所述释放内存的身份信息相匹配的节点信息,并将查到的节点信息从所述循环链表中删 除;

根据所述循环链表中剩余的节点信息定位泄露的内存。

进一步地,所述在监测到申请内存操作时,获取针对申请而分配内存的身份信息, 包括:

在监测到调用内存申请函数来申请内存时,确定存在申请内存操作;

通过重载内存申请函数获取针对申请所分配内存的身份信息。

进一步地,将所述身份信息保存到预设的循环链表节点中,生成节点信息之前,还 包括:

检测所述预设的循环链表是否已经存在,若是则执行将所述身份信息保存到预设 的循环链表节点中,生成节点信息的操作,否则,创建预设的循环链表以及循环链表节点。

进一步地,所述在监测到释放内存操作时,根据释放内存的身份信息遍历所述循 环链表,查与所述释放内存的身份信息相匹配的节点信息,并将查到的节点信息从所 述循环链表中删除,包括:

在监测到调用内存释放函数来释放内存时,确定存在释放内存操作;

通过重载内存释放函数获取释放内存的身份信息;

根据所述释放内存的身份信息遍历所述循环链表,查与所述释放内存的身份信 息相匹配的节点信息,并将查到的节点信息从所述循环链表中删除。

进一步地,所述根据所述循环链表中剩余的节点信息定位泄露的内存,包括:

当接收到设定触发指令时,将所述循环链表中剩余的节点信息以文件的形式记录 到文件系统中,以供查询泄露的内存。

进一步地,所述身份信息包括:调用内存申请函数的文件名、调用内存申请函数的 函数名、申请成功的内存地址、内存申请时间和源代码行位置信息中的至少一项。

第二方面,本发明实施例还提供了一种内存泄露的定位系统,该系统包括:

获取模块,用于在监测到申请内存操作时,获取针对申请而分配内存的身份信息;

保存模块,用于将所述身份信息保存到预设的循环链表节点中,生成节点信息;

删除模块,用于在监测到释放内存操作时,根据释放内存的身份信息遍历所述循 环链表,查与所述释放内存的身份信息相匹配的节点信息,并将查到的节点信息从所 述循环链表中删除;

定位模块,用于根据所述循环链表中剩余的节点信息定位泄露的内存。

进一步地,所述获取模块包括:申请内存操作确定单元,用于在监测到调用内存申 请函数来申请内存时,确定存在申请内存操作;第一获取单元,用于通过重载内存申请函数 获取针对申请所分配内存的身份信息;

所述删除模块包括:释放内存操作确定单元,用于在监测到调用内存释放函数来 释放内存时,确定存在释放内存操作;第二获取单元,用于通过重载内存释放函数获取释放 内存的身份信息;删除单元,用于根据所述释放内存的身份信息遍历所述循环链表,查与 所述释放内存的身份信息相匹配的节点信息,并将查到的节点信息从所述循环链表中删 除;

所述定位模块具体用于当接收到设定触发指令时,将所述循环链表中剩余的节点 信息以文件的形式记录到文件系统中,以供查询泄露的内存;

所述身份信息包括:调用内存申请函数的文件名、调用内存申请函数的函数名、申 请成功的内存地址、内存申请时间和源代码行位置信息中的至少一项。

进一步地,所述系统还包括:

检测模块,用于在将所述身份信息保存到预设的循环链表节点中,生成节点信息 之前,检测所述预设的循环链表是否已经存在,若是则执行将所述身份信息保存到预设的 循环链表节点中,生成节点信息的操作,否则,创建预设的循环链表以及循环链表节点。

本发明实施例提供的一种内存泄露的定位方法,通过在监测到申请内存操作时, 获取针对申请而分配内存的身份信息,并将所述身份信息保存到预设的循环链表节点中, 生成节点信息;在监测到释放内存操作时,根据释放内存的身份信息遍历所述循环链表,查 与所述释放内存的身份信息相匹配的节点信息,并将查到的节点信息从所述循环链表 中删除;最后根据所述循环链表中剩余的节点信息定位泄露的内存的技术手段,实现了快 速且有效地定位内存泄露的源代码位置的目的。

图1是本发明实施例一提供的一种内存泄露的定位方法流程示意图;

图2是本发明实施例二提供的一种内存泄露的定位方法流程示意图;

图3是本发明实施例三提供的一种内存泄露的定位方法流程示意图;

图4是本发明实施例四提供的一种内存泄露的定位方法流程示意图;

图5是本发明实施例四提供的一种在应用程序的主程序中内存申请操作的流程示 意图;

图6是本发明实施例四提供的一种在应用程序的主程序中内存释放操作的流程示 意图;

图7是本发明实施例四提供的一种在应用程序的主程序中内存查看操作的流程示 意图;

图8是本发明实施例五提供的一种内存泄露的定位系统结构示意图。

下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描 述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便 于描述,附图中仅示出了与本发明相关的部分而非全部结构。

在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成 作为流程图描绘的处理或方法。虽然流程图将各项步骤描述成顺序的处理,但是其中的许 多步骤可以被并行地、并发地或者同时实施。此外,各项步骤的顺序可以被重新安排。当其 步骤完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理 可以对应于方法、函数、规程、子例程、子程序等等。

实施例一

图1为本发明实施例一提供的一种内存泄露的定位方法流程图,该方法可适用于 在程序调试阶段对程序中泄露的内存进行快速查与定位的情况,可以由内存泄露的定位 系统来执行。该系统可通过硬件和/或软件的方式实现。该方法具体包括如下步骤:

步骤110、在监测到申请内存操作时,获取针对申请而分配内存的身份信息。

通常,根据所使用的编程语言会有很多已经存在的可以直接调用的标准库函数, 因此在软件程序中可以直接调用实现某一具体功能的库函数,当不存在需要的库函数时, 还可以自定义一些功能函数,在需要时,直接调用相应的功能函数即可。

例如可以通过调用内存申请函数来实现申请内存的功能,在C语言中,要申请一个 动态内存需要包含一个头文件即“

本文发布于:2024-09-24 07:16:31,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/86245.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议