CN106844216A - 一种内存泄露的定位方法及系统 - Google Patents

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

Info

Publication number
CN106844216A
CN106844216A CN201710060920.6A CN201710060920A CN106844216A CN 106844216 A CN106844216 A CN 106844216A CN 201710060920 A CN201710060920 A CN 201710060920A CN 106844216 A CN106844216 A CN 106844216A
Authority
CN
China
Prior art keywords
internal memory
linked list
identity information
circular linked
memory
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201710060920.6A
Other languages
English (en)
Inventor
蒋玉萍
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen Yihua Computer Co Ltd
Shenzhen Yihua Time Technology Co Ltd
Shenzhen Yihua Financial Intelligent Research Institute
Original Assignee
Shenzhen Yihua Computer Co Ltd
Shenzhen Yihua Time Technology Co Ltd
Shenzhen Yihua Financial Intelligent Research Institute
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shenzhen Yihua Computer Co Ltd, Shenzhen Yihua Time Technology Co Ltd, Shenzhen Yihua Financial Intelligent Research Institute filed Critical Shenzhen Yihua Computer Co Ltd
Priority to CN201710060920.6A priority Critical patent/CN106844216A/zh
Publication of CN106844216A publication Critical patent/CN106844216A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program

Abstract

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

Description

一种内存泄露的定位方法及系统
技术领域
本发明实施例涉及测试技术领域,尤其涉及一种内存泄露的定位方法及系统。
背景技术
在计算机科学中,内存泄漏是指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于程序设计错误,失去了对该段内存的控制,导致该段内存不能被再次使用,因而造成了内存的浪费。
一个小的内存泄露可能不需要太注意,但是若程序泄露大块内存,或者渐增式的泄露内存会引起下述现象:先是系统性能降低,然后引起复杂的内存耗尽错误;最坏的情况是,一个内存泄露程序可能用完了非常多的内存而引起其他程序出错,而用户不能知道错误到底来自哪里。另外,一个看上去危害不大的内存泄露,可能是另一个问题的先兆。因此,要尽量避免内存泄露现象的发生,要避免内存泄露,除了要求编程人员具有良好的编码习惯和编码规范之外,关键还要从程序代码上入手,对内存泄露进行高效、可靠的定位检测,一旦发现程序异常,方便编程人员对程序进行必要的修改。
发明内容
本发明实施例提供了一种内存泄露的定位方法及系统,以实现快速定位内存泄露的源代码位置。
第一方面,本发明实施例提供了一种内存泄露的定位方法,该方法包括:
在监测到申请内存操作时,获取针对申请而分配内存的身份信息;
将所述身份信息保存到预设的循环链表节点中,生成节点信息;
在监测到释放内存操作时,根据释放内存的身份信息遍历所述循环链表,查找与所述释放内存的身份信息相匹配的节点信息,并将查找到的节点信息从所述循环链表中删除;
根据所述循环链表中剩余的节点信息定位泄露的内存。
进一步地,所述在监测到申请内存操作时,获取针对申请而分配内存的身份信息,包括:
在监测到调用内存申请函数来申请内存时,确定存在申请内存操作;
通过重载内存申请函数获取针对申请所分配内存的身份信息。
进一步地,将所述身份信息保存到预设的循环链表节点中,生成节点信息之前,还包括:
检测所述预设的循环链表是否已经存在,若是则执行将所述身份信息保存到预设的循环链表节点中,生成节点信息的操作,否则,创建预设的循环链表以及循环链表节点。
进一步地,所述在监测到释放内存操作时,根据释放内存的身份信息遍历所述循环链表,查找与所述释放内存的身份信息相匹配的节点信息,并将查找到的节点信息从所述循环链表中删除,包括:
在监测到调用内存释放函数来释放内存时,确定存在释放内存操作;
通过重载内存释放函数获取释放内存的身份信息;
根据所述释放内存的身份信息遍历所述循环链表,查找与所述释放内存的身份信息相匹配的节点信息,并将查找到的节点信息从所述循环链表中删除。
进一步地,所述根据所述循环链表中剩余的节点信息定位泄露的内存,包括:
当接收到设定触发指令时,将所述循环链表中剩余的节点信息以文件的形式记录到文件系统中,以供查询泄露的内存。
进一步地,所述身份信息包括:调用内存申请函数的文件名、调用内存申请函数的函数名、申请成功的内存地址、内存申请时间和源代码行位置信息中的至少一项。
第二方面,本发明实施例还提供了一种内存泄露的定位系统,该系统包括:
获取模块,用于在监测到申请内存操作时,获取针对申请而分配内存的身份信息;
保存模块,用于将所述身份信息保存到预设的循环链表节点中,生成节点信息;
删除模块,用于在监测到释放内存操作时,根据释放内存的身份信息遍历所述循环链表,查找与所述释放内存的身份信息相匹配的节点信息,并将查找到的节点信息从所述循环链表中删除;
定位模块,用于根据所述循环链表中剩余的节点信息定位泄露的内存。
进一步地,所述获取模块包括:申请内存操作确定单元,用于在监测到调用内存申请函数来申请内存时,确定存在申请内存操作;第一获取单元,用于通过重载内存申请函数获取针对申请所分配内存的身份信息;
所述删除模块包括:释放内存操作确定单元,用于在监测到调用内存释放函数来释放内存时,确定存在释放内存操作;第二获取单元,用于通过重载内存释放函数获取释放内存的身份信息;删除单元,用于根据所述释放内存的身份信息遍历所述循环链表,查找与所述释放内存的身份信息相匹配的节点信息,并将查找到的节点信息从所述循环链表中删除;
所述定位模块具体用于当接收到设定触发指令时,将所述循环链表中剩余的节点信息以文件的形式记录到文件系统中,以供查询泄露的内存;
所述身份信息包括:调用内存申请函数的文件名、调用内存申请函数的函数名、申请成功的内存地址、内存申请时间和源代码行位置信息中的至少一项。
进一步地,所述系统还包括:
检测模块,用于在将所述身份信息保存到预设的循环链表节点中,生成节点信息之前,检测所述预设的循环链表是否已经存在,若是则执行将所述身份信息保存到预设的循环链表节点中,生成节点信息的操作,否则,创建预设的循环链表以及循环链表节点。
本发明实施例提供的一种内存泄露的定位方法,通过在监测到申请内存操作时,获取针对申请而分配内存的身份信息,并将所述身份信息保存到预设的循环链表节点中,生成节点信息;在监测到释放内存操作时,根据释放内存的身份信息遍历所述循环链表,查找与所述释放内存的身份信息相匹配的节点信息,并将查找到的节点信息从所述循环链表中删除;最后根据所述循环链表中剩余的节点信息定位泄露的内存的技术手段,实现了快速且有效地定位内存泄露的源代码位置的目的。
附图说明
图1是本发明实施例一提供的一种内存泄露的定位方法流程示意图;
图2是本发明实施例二提供的一种内存泄露的定位方法流程示意图;
图3是本发明实施例三提供的一种内存泄露的定位方法流程示意图;
图4是本发明实施例四提供的一种内存泄露的定位方法流程示意图;
图5是本发明实施例四提供的一种在应用程序的主程序中内存申请操作的流程示意图;
图6是本发明实施例四提供的一种在应用程序的主程序中内存释放操作的流程示意图;
图7是本发明实施例四提供的一种在应用程序的主程序中内存查看操作的流程示意图;
图8是本发明实施例五提供的一种内存泄露的定位系统结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项步骤描述成顺序的处理,但是其中的许多步骤可以被并行地、并发地或者同时实施。此外,各项步骤的顺序可以被重新安排。当其步骤完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。
实施例一
图1为本发明实施例一提供的一种内存泄露的定位方法流程图,该方法可适用于在程序调试阶段对程序中泄露的内存进行快速查找与定位的情况,可以由内存泄露的定位系统来执行。该系统可通过硬件和/或软件的方式实现。该方法具体包括如下步骤:
步骤110、在监测到申请内存操作时,获取针对申请而分配内存的身份信息。
通常,根据所使用的编程语言会有很多已经存在的可以直接调用的标准库函数,因此在软件程序中可以直接调用实现某一具体功能的库函数,当不存在需要的库函数时,还可以自定义一些功能函数,在需要时,直接调用相应的功能函数即可。
例如可以通过调用内存申请函数来实现申请内存的功能,在C语言中,要申请一个动态内存需要包含一个头文件即“#include<malloc.h>”或者“#include<stdlib.h>”,然后就可以直接调用申请内存的库函数实现申请内存的目的,如通过代码“void*malloc(usigned size)”即可获得动态分配的内存,malloc函数的参数是需要申请的内存大小,可以进行设置;该函数的返回值是申请到的内存的首地址,返回的内存类型是void,可以根据需要进行返回类型转换。在C++中要实现申请内存的功能则更简单一些,需要包含头文件“#include<iostream.h>”,这样在申请内存时则不需要调用相应的函数,只要一个关键字new即可,如“int*x;x=new int[]”,这样就申请到了一个整型的内存空间。当程序中出现这些特定的关键字或者内存申请函数时,则认为监测到了申请内存操作,进而获取针对申请而分配内存的身份信息。
优选的,所述身份信息包括:调用内存申请函数的文件名、调用内存申请函数的函数名、申请成功的内存地址、内存申请时间和源代码行位置信息中的至少一项。
具体的,可以通过重载内存申请函数的形参获取所述身份信息,具体过程在本发明实施例二中进行解释说明。
步骤120、将所述身份信息保存到预设的循环链表节点中,生成节点信息。
其中,所述循环链表是一种形式的链式存储结构,其特点是表中最后一个节点的指针指向头节点,即表中第一个节点,整个链表形成一个环,这样无论是从表中的哪个节点开始进行遍历操作,都可以遍历表中的所有节点,这是非循环链表不能实现的。
步骤130、在监测到释放内存操作时,根据释放内存的身份信息遍历所述循环链表,查找与所述释放内存的身份信息相匹配的节点信息,并将查找到的节点信息从所述循环链表中删除。
具体的,与申请内存类似,释放内存可以通过直接调用内存释放函数实现,例如,如果申请内存时是通过调用“malloc”或“realloc”函数实现的,则释放内存时可以通过调用“free”库函数实现;如果申请内存时是通过关键字“new”实现的,则释放内存时可以通过“delete”语句实现。当然还可以是其它的申请/释放内存的函数,本实施例并不对其进行限定。
当监测到上述释放内存的函数或者关键字时,则认为监测到了释放内存的操作;由于被释放的内存地址信息与当初申请成功的内存地址信息是一一对应的,且是唯一的,因此,优选的,可以根据被释放的内存地址信息遍历所述循环链表,查找与被释放的内存地址信息相匹配的节点信息,并将查找到的节点信息从所述循环链表中删除,以标记该段内存没有被泄露。
步骤140、根据所述循环链表中剩余的节点信息定位泄露的内存。
每申请一段内存,都将申请的内存身份信息保存到预设的循环链表中,每释放一段内存,都将循环链表中保存的与被释放的内存相匹配的内存身份信息删除,表示该段内存已经被释放,不存在内存泄露的情况,因此,循环链表中剩余的没有被删除的节点信息就是内存泄露的身份信息,可以根据该身份信息定位到泄露的内存,以实现对内存泄露的快速定位。
本实施例提供的一种内存泄露的定位方法,通过在监测到申请内存操作时,获取针对申请而分配内存的身份信息,并将所述身份信息保存到预设的循环链表节点中,生成节点信息;在监测到释放内存操作时,根据释放内存的身份信息遍历所述循环链表,查找与所述释放内存的身份信息相匹配的节点信息,并将查找到的节点信息从所述循环链表中删除;最后根据所述循环链表中剩余的节点信息定位泄露的内存的技术手段,实现了快速且有效地定位内存泄露的源代码位置的目的。
实施例二
图2为本发明实施例二提供的一种内存泄露的定位方法流程示意图,在实施例一的基础上,本实施例对进行了进一步优化,具体参见图2所示,该方法具体包括如下:
步骤210、在监测到调用内存申请函数来申请内存时,确定存在申请内存操作。
步骤220、通过重载内存申请函数获取针对申请所分配内存的身份信息。
其中,重载函数是函数的一种特殊情况,即允许在同一声明域中声明几个功能类似的同名函数,但是这些同名函数的形式参数必须不同,所述形式参数具体可以是指参数的个数,类型,或者顺序等,也就是同一个运算符完成不同的运算功能。
因此,可以通过设置重载内存申请函数的形式参数,通过所设置的参数获取针对内存申请函数所分配内存的身份信息,所述身份信息例如是调用内存申请函数的文件名、调用内存申请函数的函数名、申请成功的内存地址、内存申请时间或者源代码行位置信息等。
步骤230、检测预设的循环链表是否已经存在,若是则执行步骤250,否则,执行步骤240。
步骤240、创建预设的循环链表以及循环链表节点。
步骤250、将所述身份信息保存到预设的循环链表节点中,生成节点信息。
步骤260、在监测到释放内存操作时,根据释放内存的身份信息遍历所述循环链表,查找与所述释放内存的身份信息相匹配的节点信息,并将查找到的节点信息从所述循环链表中删除。
步骤270、根据所述循环链表中剩余的节点信息定位泄露的内存。
本实施例提供的一种内存泄露的定位方法,在上述实施例技术方案的基础上,将“在监测到申请内存操作时,获取针对申请而分配内存的身份信息”的操作优化为“当监测到调用内存申请函数来申请内存时,确定存在申请内存操作,通过重载内存申请函数获取针对申请所分配内存的身份信息”,实现了及时、准确地获取分配内存的身份信息的目的,进而实现了快速定位内存泄露源码位置的目的。
实施例三
图3为本发明实施例三提供的一种内存泄露的定位方法流程示意图,在上述各实施例的基础上,本实施例进行了进一步优化,具体参见图3所示,该方法具体如下:
步骤310、在监测到申请内存操作时,获取针对申请而分配内存的身份信息。
步骤320、将所述身份信息保存到预设的循环链表节点中,生成节点信息。
步骤330、在监测到调用内存释放函数来释放内存时,确定存在释放内存操作。
步骤340、通过重载内存释放函数获取释放内存的身份信息。
步骤350、根据所述释放内存的身份信息遍历所述循环链表,查找与所述释放内存的身份信息相匹配的节点信息,并将查找到的节点信息从所述循环链表中删除。
步骤360、根据所述循环链表中剩余的节点信息定位泄露的内存。
本实施例提供的一种内存泄露的定位方法,在上述实施例技术方案的基础上,将“在监测到释放内存操作时,获取释放内存的身份信息”的操作优化为“在监测到调用内存释放函数来释放内存时,确定存在释放内存操作,通过重载内存释放函数获取释放内存的身份信息”,实现了及时、准确地获取释放内存的身份信息的目的,进而实现了快速定位内存泄露源码位置的目的。
实施例四
图4为本发明实施例四提供的一种内存泄露的定位方法流程示意图,在上述各实施例的基础上,本实施例进行了进一步优化,具体参见图4所示,该方法具体如下:
步骤410、在监测到申请内存操作时,获取针对申请而分配内存的身份信息。
步骤420、将所述身份信息保存到预设的循环链表节点中,生成节点信息。
步骤430、在监测到释放内存操作时,根据释放内存的身份信息遍历所述循环链表,查找与所述释放内存的身份信息相匹配的节点信息,并将查找到的节点信息从所述循环链表中删除。
步骤440、当接收到设定触发指令时,将所述循环链表中剩余的节点信息以文件的形式记录到文件系统中,以供查询泄露的内存。
具体的,所述设定触发指令可以是通过某个物理按键触发的指令,或者是程序运行到了某个特殊的流程触发的指令,例如所述特殊的流程可以是进入一个特定的程序模块,或者退出一个特定的程序模块。
通过将所述循环链表中剩余的节点信息以文件的形式记录到文件系统中,方便了相关工作人员对泄露的内存进行查询。
本实施例提供的一种内存泄露的定位方法,在上述实施例技术方案的基础上,将“根据所述循环链表中剩余的节点信息定位泄露的内存”的操作优化为“当接收到设定触发指令时,将所述循环链表中剩余的节点信息以文件的形式记录到文件系统中,以供查询泄露的内存”,方便了工作人员对泄露的内存进行查询定位,进而实现了快速定位内存泄露源码位置的目的。
在上述各实施例的基础上,进一步地,可以将本发明实施例提供的内存泄露的定位方案嵌套到应用程序的主程序中,通过设置一个内存检测开关对是否编译此内存泄露的定位程序段进行控制,在应用程序正常运行的状态下可以通过关闭内存检测开关来将内存泄露的定位程序段进行屏蔽,即编译器不对内存泄露的定位程序段进行编译,这样就不会占用系统资源,也不会影响应用程序的编译速度;当发现应用程序运行不正常,需要对应用程序进行内存泄露的检测与定位时,可以打开所述内存检测开关,在应用程序运行的过程中同时对内存泄露的定位程序段进行运行编译,即可实现快速定位应用程序中泄露的内存的目的。所述内存检测开关优选为宏开关。
具体的,可以参见图5所示的在应用程序的主程序中内存申请操作的流程示意图,图6所示的在应用程序的主程序中内存释放操作的流程示意图,图7所示的在应用程序的主程序中内存查看操作的流程示意图;流程图中最后的“返回”操作表示返回到应用程序的主程序中,继续执行其他的程序代码。
实施例五
图8为本发明实施例五提供的一种内存泄露的定位系统的结构示意图,具体参见图8所示,该系统具体包括如下:
获取模块810、保存模块820、删除模块830和定位模块840;
其中,获取模块810,用于在监测到申请内存操作时,获取针对申请而分配内存的身份信息;保存模块820,用于将所述身份信息保存到预设的循环链表节点中,生成节点信息;删除模块830,用于在监测到释放内存操作时,根据释放内存的身份信息遍历所述循环链表,查找与所述释放内存的身份信息相匹配的节点信息,并将查找到的节点信息从所述循环链表中删除;定位模块840,用于根据所述循环链表中剩余的节点信息定位泄露的内存。
进一步地,获取模块810包括:申请内存操作确定单元,用于在监测到调用内存申请函数来申请内存时,确定存在申请内存操作;第一获取单元,用于通过重载内存申请函数获取针对申请所分配内存的身份信息。
进一步地,删除模块830包括:释放内存操作确定单元,用于在监测到调用内存释放函数来释放内存时,确定存在释放内存操作;第二获取单元,用于通过重载内存释放函数获取释放内存的身份信息;删除单元,用于根据所述释放内存的身份信息遍历所述循环链表,查找与所述释放内存的身份信息相匹配的节点信息,并将查找到的节点信息从所述循环链表中删除。
进一步地,定位模块840具体用于当接收到设定触发指令时,将所述循环链表中剩余的节点信息以文件的形式记录到文件系统中,以供查询泄露的内存。
进一步地,所述身份信息包括:调用内存申请函数的文件名、调用内存申请函数的函数名、申请成功的内存地址、内存申请时间和源代码行位置信息中的至少一项。
进一步地,所述系统还包括:
检测模块,用于在将所述身份信息保存到预设的循环链表节点中,生成节点信息之前,检测所述预设的循环链表是否已经存在,若是则执行将所述身份信息保存到预设的循环链表节点中,生成节点信息的操作,否则,创建预设的循环链表以及循环链表节点。
本实施例提供的一种内存泄露的定位系统,通过在监测到申请内存操作时,获取针对申请而分配内存的身份信息,并将所述身份信息保存到预设的循环链表节点中,生成节点信息;在监测到释放内存操作时,根据释放内存的身份信息遍历所述循环链表,查找与所述释放内存的身份信息相匹配的节点信息,并将查找到的节点信息从所述循环链表中删除;最后根据所述循环链表中剩余的节点信息定位泄露的内存的技术手段,实现了快速且有效地定位内存泄露的源代码位置的目的。
上述产品可执行本发明任意实施例所提供的方法,具备执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本发明任意实施例所提供的方法。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

Claims (10)

1.一种内存泄露的定位方法,其特征在于,包括:
在监测到申请内存操作时,获取针对申请而分配内存的身份信息;
将所述身份信息保存到预设的循环链表节点中,生成节点信息;
在监测到释放内存操作时,根据释放内存的身份信息遍历所述循环链表,查找与所述释放内存的身份信息相匹配的节点信息,并将查找到的节点信息从所述循环链表中删除;
根据所述循环链表中剩余的节点信息定位泄露的内存。
2.根据权利要求1所述的方法,其特征在于,所述在监测到申请内存操作时,获取针对申请而分配内存的身份信息,包括:
在监测到调用内存申请函数来申请内存时,确定存在申请内存操作;
通过重载内存申请函数获取针对申请所分配内存的身份信息。
3.根据权利要求2所述的方法,其特征在于,将所述身份信息保存到预设的循环链表节点中,生成节点信息之前,还包括:
检测所述预设的循环链表是否已经存在,若是则执行将所述身份信息保存到预设的循环链表节点中,生成节点信息的操作,否则,创建预设的循环链表以及循环链表节点。
4.根据权利要求1所述的方法,其特征在于,所述在监测到释放内存操作时,根据释放内存的身份信息遍历所述循环链表,查找与所述释放内存的身份信息相匹配的节点信息,并将查找到的节点信息从所述循环链表中删除,包括:
在监测到调用内存释放函数来释放内存时,确定存在释放内存操作;
通过重载内存释放函数获取释放内存的身份信息;
根据所述释放内存的身份信息遍历所述循环链表,查找与所述释放内存的身份信息相匹配的节点信息,并将查找到的节点信息从所述循环链表中删除。
5.根据权利要求1所述的方法,其特征在于,所述根据所述循环链表中剩余的节点信息定位泄露的内存,包括:
当接收到设定触发指令时,将所述循环链表中剩余的节点信息以文件的形式记录到文件系统中,以供查询泄露的内存。
6.根据权利要求1-5任一项所述的方法,其特征在于,所述身份信息包括:调用内存申请函数的文件名、调用内存申请函数的函数名、申请成功的内存地址、内存申请时间和源代码行位置信息中的至少一项。
7.一种内存泄露的定位系统,其特征在于,包括:
获取模块,用于在监测到申请内存操作时,获取针对申请而分配内存的身份信息;
保存模块,用于将所述身份信息保存到预设的循环链表节点中,生成节点信息;
删除模块,用于在监测到释放内存操作时,根据释放内存的身份信息遍历所述循环链表,查找与所述释放内存的身份信息相匹配的节点信息,并将查找到的节点信息从所述循环链表中删除;
定位模块,用于根据所述循环链表中剩余的节点信息定位泄露的内存。
8.根据权利要求7所述的系统,其特征在于,
所述获取模块包括:申请内存操作确定单元,用于在监测到调用内存申请函数来申请内存时,确定存在申请内存操作;第一获取单元,用于通过重载内存申请函数获取针对申请所分配内存的身份信息;
所述删除模块包括:释放内存操作确定单元,用于在监测到调用内存释放函数来释放内存时,确定存在释放内存操作;第二获取单元,用于通过重载内存释放函数获取释放内存的身份信息;删除单元,用于根据所述释放内存的身份信息遍历所述循环链表,查找与所述释放内存的身份信息相匹配的节点信息,并将查找到的节点信息从所述循环链表中删除;
所述定位模块具体用于当接收到设定触发指令时,将所述循环链表中剩余的节点信息以文件的形式记录到文件系统中,以供查询泄露的内存。
9.根据权利要求8所述的系统,其特征在于,还包括:
检测模块,用于在将所述身份信息保存到预设的循环链表节点中,生成节点信息之前,检测所述预设的循环链表是否已经存在,若是则执行将所述身份信息保存到预设的循环链表节点中,生成节点信息的操作,否则,创建预设的循环链表以及循环链表节点。
10.根据权利要求7-9任一项所述的系统,其特征在于,
所述身份信息包括:调用内存申请函数的文件名、调用内存申请函数的函数名、申请成功的内存地址、内存申请时间和源代码行位置信息中的至少一项。
CN201710060920.6A 2017-01-25 2017-01-25 一种内存泄露的定位方法及系统 Pending CN106844216A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710060920.6A CN106844216A (zh) 2017-01-25 2017-01-25 一种内存泄露的定位方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710060920.6A CN106844216A (zh) 2017-01-25 2017-01-25 一种内存泄露的定位方法及系统

Publications (1)

Publication Number Publication Date
CN106844216A true CN106844216A (zh) 2017-06-13

Family

ID=59121249

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710060920.6A Pending CN106844216A (zh) 2017-01-25 2017-01-25 一种内存泄露的定位方法及系统

Country Status (1)

Country Link
CN (1) CN106844216A (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108108258A (zh) * 2017-12-29 2018-06-01 杭州迪普科技股份有限公司 一种内存泄露的修复方法和装置
CN108664394A (zh) * 2018-04-10 2018-10-16 北京奇安信科技有限公司 一种内存泄露过程追溯方法及装置
CN108984295A (zh) * 2018-06-19 2018-12-11 珠海全志科技股份有限公司 内存回收方法、计算机装置及计算机可读存储介质
CN110704176A (zh) * 2019-08-19 2020-01-17 深圳英飞拓科技股份有限公司 系统堆残留内存的监测方法及装置
CN113835992A (zh) * 2020-06-23 2021-12-24 北京字节跳动网络技术有限公司 内存泄露的处理方法、装置、电子设备及计算机存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101587455A (zh) * 2008-12-11 2009-11-25 南京南瑞继保电气有限公司 一种用于vxWorks操作系统检查内存泄漏的方法
CN103914376A (zh) * 2014-03-12 2014-07-09 汉柏科技有限公司 一种内存泄露的快速定位方法
US8880757B1 (en) * 2013-09-24 2014-11-04 International Business Machines Corporation RDMA resource leakage detection and reporting

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101587455A (zh) * 2008-12-11 2009-11-25 南京南瑞继保电气有限公司 一种用于vxWorks操作系统检查内存泄漏的方法
US8880757B1 (en) * 2013-09-24 2014-11-04 International Business Machines Corporation RDMA resource leakage detection and reporting
CN103914376A (zh) * 2014-03-12 2014-07-09 汉柏科技有限公司 一种内存泄露的快速定位方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
项响琴: "《C语言程序设计》", 31 August 2016 *

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108108258A (zh) * 2017-12-29 2018-06-01 杭州迪普科技股份有限公司 一种内存泄露的修复方法和装置
CN108108258B (zh) * 2017-12-29 2020-11-06 杭州迪普科技股份有限公司 一种内存泄露的修复方法和装置
CN108664394A (zh) * 2018-04-10 2018-10-16 北京奇安信科技有限公司 一种内存泄露过程追溯方法及装置
CN108984295A (zh) * 2018-06-19 2018-12-11 珠海全志科技股份有限公司 内存回收方法、计算机装置及计算机可读存储介质
CN108984295B (zh) * 2018-06-19 2020-08-07 珠海全志科技股份有限公司 内存回收方法、计算机装置及计算机可读存储介质
CN110704176A (zh) * 2019-08-19 2020-01-17 深圳英飞拓科技股份有限公司 系统堆残留内存的监测方法及装置
CN113835992A (zh) * 2020-06-23 2021-12-24 北京字节跳动网络技术有限公司 内存泄露的处理方法、装置、电子设备及计算机存储介质
CN113835992B (zh) * 2020-06-23 2023-10-20 抖音视界有限公司 内存泄露的处理方法、装置、电子设备及计算机存储介质

Similar Documents

Publication Publication Date Title
CN106844216A (zh) 一种内存泄露的定位方法及系统
KR101099212B1 (ko) 예외 처리 구조물들을 포함하는 소프트웨어의 소스 언어 독립형 중간 표현을 처리하는 방법, 다수의 소스 코드 언어들에 대한 소스 언어 독립형 예외 처리 중간 표현들을 구현하기 위한 시스템 및 컴퓨터 판독가능 저장 매체
US7392514B2 (en) Data flow chasing
EP2829970B1 (en) A method and apparatus for porting source code
US10489150B2 (en) Software dependency shading
US20130007709A1 (en) Software configuration management
JP7212793B2 (ja) 関数ジャンプを実現するための方法、装置及びコンピュータ記憶媒体
Doan et al. Verifying heterogeneous multi-agent programs
Babati et al. Static analysis toolset with Clang
CN114462044A (zh) 一种基于污点分析的uefi固件漏洞静态检测方法及装置
Tanaka et al. A study on the current status of functional idioms in Java
CN107526966B (zh) 一种Android平台的复合污点传播追踪方法
CN103677746A (zh) 指令重组方法及装置
CN114691197A (zh) 代码分析方法、装置、电子设备和存储介质
Bedadala et al. Generation of Call Graph for Java Higher Order Functions
Dagenais et al. Clones occurence in large object oriented software packages
Krainz et al. Diff graphs for a fast incremental pointer analysis
CN110096888A (zh) 一种加快验证及分析smm安全隐患的方法及系统
CN113326048B (zh) 浮点数计算精度处理方法、系统、介质及设备
CN117555811B (zh) 基于静态符号执行的嵌入式软件分析方法、装置及存储介质
KR102271273B1 (ko) 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 방법, 이를 수행하기 위한 기록 매체 및 장치
Hai et al. Multi-threaded on-the-fly model generation of malware with hash compaction
Yang et al. 1dFuzz: Reproduce 1-Day Vulnerabilities with Directed Differential Fuzzing
Shadab et al. Automatic Inference of Resource Leak Specifications
CN106663011B (zh) 桥接模块系统和非模块系统

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication

Application publication date: 20170613

RJ01 Rejection of invention patent application after publication