CN106055478B - 检测内存泄漏的方法和装置 - Google Patents

检测内存泄漏的方法和装置 Download PDF

Info

Publication number
CN106055478B
CN106055478B CN201610377342.4A CN201610377342A CN106055478B CN 106055478 B CN106055478 B CN 106055478B CN 201610377342 A CN201610377342 A CN 201610377342A CN 106055478 B CN106055478 B CN 106055478B
Authority
CN
China
Prior art keywords
pointer variable
memory
pointer
data structure
variable set
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.)
Active
Application number
CN201610377342.4A
Other languages
English (en)
Other versions
CN106055478A (zh
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.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201610377342.4A priority Critical patent/CN106055478B/zh
Publication of CN106055478A publication Critical patent/CN106055478A/zh
Application granted granted Critical
Publication of CN106055478B publication Critical patent/CN106055478B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Storage Device Security (AREA)

Abstract

本发明实施例公开了一种检测内存泄漏的方法和装置。本发明实施例方法包括:创建第一数据结构;获取预置对象的内存地址,将所述预置对象的存储地址和堆栈信息存储到所述第一数据结构中;获取指针变量集合,所述指针变量集合包括内存空间中的所有指针变量;检测所述第一数据结构中是否存在不被所述指针变量集合中的任一指针变量指向的内存地址;若存在,则确定内存泄漏,并确定所述内存地址中的对象为泄漏对象。

Description

检测内存泄漏的方法和装置
技术领域
本发明涉及计算机领域,特别是一种检测内存泄漏的方法和装置。
背景技术
内存泄漏,也称作“存储渗漏”,指的是用动态存储分配函数动态开辟的空间在使用完毕后未释放,导致对象一直占据该内存单元的现象。
现有的ios系统中采用leak内存泄漏检测工具来检测手机中的内存泄漏,但苹果公司并没有对外开放该工具的原理,该工具是一个在mac电脑上的软件,因此每一次手机检测内存泄漏时,都需要将手机连接到电脑才可以使用。这导致手机APP无法独立检测内存泄漏。
发明内容
本发明实施例提供了一种检测内存泄漏的方法和装置,能够不依靠外界设备独立检测内存泄漏。
第一发明,本发明实施例提供一种检测内存泄漏的方法,包括:
创建第一数据结构;
获取预置对象的内存地址,将所述预置对象的存储地址和堆栈信息存储到所述第一数据结构中;
获取指针变量集合,所述指针变量集合包括内存空间中的所有指针变量;
检测所述第一数据结构中是否存在不被所述指针变量集合中的任一指针变量指向的内存地址;
若存在,则确定内存泄漏,并确定所述内存地址中的对象为泄漏对象。
第二方面,本发明实施例提供一种检测内存泄漏的装置,包括:
创建模块,用于创建第一数据结构;
第一获取模块,用于获取预置对象的内存地址,将所述预置对象的存储地址和堆栈信息存储到所述第一数据结构中;
第二获取模块,用于获取指针变量集合,所述指针变量集合包括内存空间中的所有指针变量;
检测模块,用于检测所述第一数据结构中是否存在不被所述指针变量集合中的任一指针变量指向的内存地址;
确定模块,用于当所述第一数据结构中存在不被所述指针变量集合中的任一指针变量指向的内存地址时,确定内存泄漏,并确定所述内存地址中的对象为泄漏对象。
从以上技术方案可以看出,本发明实施例具有以下优点:
本发明实施例中,记录对象的内存地址,并创建第一数据结构来存储这些信息,通过分析所有包含指针变量的内存区域中的指针变量,对于没有指针变量指向的对象,可认为在进程空间中无引用的对象,因此,当第一数据结构中存在没有指针变量指向的对象时,确定该对象为泄漏对象,这样,通过本发明中的检测内存泄漏方法移动终端可以独立检测内存泄漏而无需依赖其他工具。
附图说明
图1为本发明的检测内存泄漏的方法的一个实施例的流程示意图;
图2为本发明的检测内存泄漏的方法中的获取指针变量集合的方法的一种实施例的流程示意图;
图3为本发明的检测内存泄漏的方法中的获取指针变量集合的方法的另一种实施例的流程示意图;
图4为本发明的检测内存泄漏的方法中的确认泄漏对象的方法的一种实施例的流程示意图;
图5为本发明的检测内存泄漏的装置的一个实施例的结构示意图;
图6为本发明的检测内存泄漏的装置的另一个实施例的结构示意图。
具体实施方式
请参阅图1,图1为本发明的检测内存泄漏的方法的一个实施例的流程示意图。本实施例中,检测内存泄漏的方法,包括:
101、创建第一数据结构。
本实施例中,第一数据结构用于存储步骤102中所获取的预置对象的内存地址。例如,该第一数据接口为哈希表、红黑树或者链表,在此不作限制。优选的,该第一数据结构为哈希表,相比其他数据结构,哈希表的效率较高。
102、获取预置对象的内存地址,将所述预置内存对象的内存地址和堆栈信息存储到所述第一数据结构中。
本实施例中,预置对象为已经分配了内存地址且为需要监控的对象。例如,该预置对象为所有内存区中分配好内存地址的对象。或者,该预置内存对象为objective-c类对象、malloc分配的内存区域、block代码块和C++对象中的至少一项。当然,上述仅为举例,并不作限制。
确定预置对象后,获取该预置对象的内存地址。其中,获取的方法有多种。例如,ios系统中通过malloc_zone_malloc、malloc_zone_valloc和malloc_zone_calloc该三个函数来分配堆内存,本实施例中,通过hook该三个函数,在自定义的函数中记录预置对象的内存地址。
可选的,本实施例中,还获取该预置对象的内存大小、堆栈信息、类名(若该预置对象有类名)等等。其中,可根据线程堆栈回溯方法获取该预置对象的分配堆栈。
获取到预置对象的内存地址后,该预置对象的内存地址存储到第一数据结构中。例如,以该预置对象的内存地址为key值存储到全局哈希表中。
103、获取指针变量集合,所述指针变量集合包括内存空间中的所有指针变量。
获取指针变量集合的方法有多种。例如,对目标区域进行扫描,其中,该目标区域为包含所有指针变量的内存区域。例如,在ios进程虚拟内存空间中,该目标区域包括堆内存、栈内存、全局数据区和寄存器该四个内存区域。
又例如,对目标区域进行扫描,查找第一指针变量集合,将所述第一指针变量集合加入所述指针变量集合中,其中,所述目标区域包括栈内存、全局数据区和寄存器,所述第一指针变量集合为所述目标区域内的所有指针变量。确定第一指针变量集合后,遍历所述第一指针变量集合,对所述第一指针变量集合中的每一个特定指针变量,所述特定指针变量为指向堆内存中任意一个区域的指针变量,执行步骤A:
对所述特定指针变量指向的区域进行扫描;将所述区域中的所有指针变量加入所述指针变量集合中;当所述所有指针变量中存在所述特定指针变量,且所述特定指针变量不是指向自身所在区域时,对所述特定指针变量重复所述步骤A,当所述所有指针变量中不存在不是指向自身所在区域的特定指针变量时,停止重复所述步骤A。
104、检测所述第一数据结构中是否存在不被所述指针变量集合中的任一指针变量指向的内存地址。
对于指针变量集合中的任意一个指针变量,确认该指针变量所指向的内存地址是否存在第一数据结构中。这样,可以确认指针变量集合所指向的第一数据结构中的所有内存地址。具体的,对指针变量集合中的任意一个指针变量,若该指针变量指向第一数据结构中的其中一个内存地址,则对该内存地址进行标识,那么对指针变量集合遍历完后,第一数据结构中没有被标识的内存地址为不被指针变量集合中任一指针变量指向的内存地址。
105、若存在,则确定内存泄漏,并确定所述内存地址中的对象为泄漏对象。
本实施例中,记录对象的内存地址,并创建第一数据结构来存储这些信息,通过分析所有包含指针变量的内存区域中的指针变量,对于没有指针变量指向的对象,可认为在进程空间中无引用的对象,因此,当第一数据结构中存在没有指针变量指向的对象时,确定该对象为泄漏对象,这样,通过本发明中的检测内存泄漏方法移动终端可以独立检测内存泄漏而无需依赖其他工具。
可选的,本实施例中,当检测到所述第一数据结构中的对象被释放时,如将所述对象的分配地址和堆栈信息从所述第一数据结构中删除。这样可以保证在第一数据结构中存储的为当前进程的驻留内存对象。其中,检测的方法有多种,例如,ios系统中通过malloc_zone_freec函数来释放内存对象,本实施例中,通过hook该函数,在自定义的函数中确定所释放的对象是否在第一数据结构中。
为方便理解,下面结合图2和图3对本实施例中步骤103的一种实施方式以及结合图4对本实施例中的步骤104的一种实施方式进行举例描述。如图2所示,图2为本发明的检测内存泄漏的方法中的获取指针变量集合的方法的一种实施例的流程示意图。本实施例中,获取指针变量集合的方法包括:
建立扫描线程,并在扫描线程开始前挂起除扫描线程以外的其他所有线程。在该扫描线程中,遍历目标区域。具体的,以ios系统为例,目标区域包括堆内存、栈内存、全局数据区和寄存器。在遍历目标区域时,对堆内存中的所有可能包含指针的堆区域进行扫描;对于栈内存,对栈顶至栈起始地址之间的内存区域进行扫描;对全局数据区中所有mach-o文件的DATA数据段进行扫描;对寄存器,对所有通用寄存器进行扫描。将目标区域中扫描到的指针变量加入指针变量集合中。
本实施例中,第一数据结构中还包括每一个对象的引用计数,其中,每个对象的引用计数的初始值均为0。对指针变量集合中的每一个指针变量,检测该指针变量指向的内存地址是否存在第一数据结构中,若存在,则对该内存地址对应的对象的引用计数加1。重复该步骤,直至遍历完目标区域时结束扫描线程,并恢复其他所有线程。
本实施例中,通过在扫描前挂起除扫描线程外的所有线程,能够避免在扫描目标区域时多线程内存访问冲突。
如图3所示,图3为本发明的检测内存泄漏的方法中的获取指针变量集合的方法的另一种实施例的流程示意图。本实施例中,获取指针变量集合的方法包括:
建立扫描线程,并在扫描线程开始前挂起除扫描线程以外的其他所有线程。在该扫描线程中:
对目标区域进行扫描,查找第一指针变量集合,将所述第一指针变量集合加入所述指针变量集合中,其中,所述第一指针变量集合为所述目标区域内的所有指针变量,所述目标区域包括栈内存、全局数据区和寄存器。遍历所述第一指针变量集合,对所述第一指针变量集合中的每一个特定指针变量,所述特定指针变量为指向堆内存中任意一个区域的指针变量,执行步骤A:
对所述特定指针变量指向的区域进行扫描;将所述区域中的所有指针变量加入所述指针变量集合中;当所述所有指针变量中存在所述特定指针变量,且所述特定指针变量不是指向所在区域时,对所述特定指针变量重复所述步骤A,当所述所有指针变量中不存在不是指向所在区域的特定指针变量时,停止重复所述步骤A。
本实施例中,第一数据结构中还包括每一个对象的引用计数,其中,每个对象的引用计数的初始值均为0。对指针变量集合中的每一个指针变量,检测该指针变量指向的内存地址是否存在第一数据结构中,若存在,则对该内存地址对应的对象的引用计数加1。重复该步骤,直至遍历完目标区域时结束扫描线程,并恢复其他所有线程。
相比图2所示实施例,本实施例中不仅能检测到无引用的泄漏对象,还能检测到由于循环引用导致的泄漏。
如图4所示,图4为本发明的检测内存泄漏的方法中的确认泄漏对象的方法的一种实施例的流程示意图。本实施例中,确认泄漏对象的方法包括:
从第一数据结构的入口开始遍历每一个对象,判断该对象的引用计数是否为0,若是,则将该对象确认为泄漏对象,若否,则确认该对象不是泄漏对象。重复该步骤,直至遍历完第一数据结构中的对象时,输出第一数据结构中所有泄漏对象的信息。具体的,若第一数据结构中仅存储有对象的内存地址,则该泄漏对象的信息包括泄漏对象的内存地址。若第一数据结构中存储有对象的内存地址和其他信息(例如类名、分配堆栈等),则该泄漏对象的信息包括泄漏对象的内存地址和其他信息。
可选的,在本发明的检测内存泄漏的方法中,在获取预置对象的内存地址时,还获取所述预置对象的堆栈信息和/或类名,并将该对象的堆栈信息和/或类名存储到第一数据结构中。在确定泄漏对象之后,从第一数据结构取出该泄漏对象的堆栈信息和/或类名,并将所述泄漏对象的分配地址、堆栈信息和/或类名发送至预置分析平台,以便所述预置分析平台根据所述泄漏对象的分配地址和堆栈信息对泄漏源进行定位。
上面对本发明的检测内存泄漏的方法进行了描述,下面对本发明的检测内存泄漏的装置进行描述。
参阅图5,图5为本发明的检测内存泄漏的装置的一个实施例的结构示意图。本实施例中,检测内存泄漏的装置500包括:
创建模块501,用于创建第一数据结构;
第一获取模块502,用于获取预置对象的内存地址,将所述预置对象的存储地址和堆栈信息存储到所述第一数据结构中;
第二获取模块503,用于获取指针变量集合,所述指针变量集合包括内存空间中的所有指针变量;
检测模块504,用于检测所述第一数据结构中是否存在不被所述指针变量集合中的任一指针变量指向的内存地址;
确定模块505,用于当所述第一数据结构中存在不被所述指针变量集合中的任一指针变量指向的内存地址时,确定内存泄漏,并确定所述内存地址中的对象为泄漏对象。
本实施例中,记录对象的内存地址,并创建第一数据结构来存储这些信息,通过分析所有包含指针变量的内存区域中的指针变量,对于没有指针变量指向的对象,可认为在进程空间中无引用的对象,因此,当第一数据结构中存在没有指针变量指向的对象时,确定该对象为泄漏对象,这样,通过本发明中的检测内存泄漏方法移动终端可以独立检测内存泄漏而无需依赖其他工具。
可选的,所述检测内存泄漏的装置500还包括:
删除模块506,用于当检测到所述第一数据结构中的对象被释放时,将所述对象的分配地址和堆栈信息从所述第一数据结构中删除。
可选的,所述预置对象为objective-c类对象、malloc分配的内存区域、block代码块和C++对象中的至少一项。
可选的,如图6所示,所述检测内存泄漏的装置还包括:
第三获取模块601,用于获取所述预置对象的堆栈信息和/或类名;
发送模块602,用于在所述确定泄漏对象之后,将所述泄漏对象的分配地址、堆栈信息和/或类名发送至预置分析平台,以便所述预置分析平台根据所述泄漏对象的分配地址和堆栈信息对泄漏源进行定位。
可选的,所述第二获取模块具体用于对目标区域进行扫描,查找出所述目标区域内的所有指针变量,其中,所述目标区域包括堆内存、栈内存、全局数据区和寄存器。
可选的,所述第二获取模块具体用于:
对目标区域进行扫描,查找第一指针变量集合,将所述第一指针变量集合加入所述指针变量集合中,其中,所述第一指针变量集合为所述目标区域内的所有指针变量,所述目标区域包括栈内存、全局数据区和寄存器;
遍历所述第一指针变量集合,对所述第一指针变量集合中的每一个特定指针变量,所述特定指针变量为指向堆内存中任意一个区域的指针变量,执行步骤A:
对所述特定指针变量指向的区域进行扫描;将所述所有指针变量加入所述指针变量集合中;当所述所有指针变量中存在所述特定指针变量,且所述特定指针变量不是指向所在区域时,对所述特定指针变量重复所述步骤A,当所述所有指针变量中不存在不是指向所在区域的特定指针变量时,停止重复所述步骤A。
可选的,所述第二获取模块在对目标区域进行扫描时,具体用于建立扫描线程并挂起除所述扫描线程以外的所有线程。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (16)

1.一种检测内存泄漏的方法,其特征在于,包括:
创建第一数据结构;
获取预置对象的内存地址,将所述预置对象的存储地址和堆栈信息存储到所述第一数据结构中;
获取指针变量集合,所述指针变量集合包括内存空间中的所有指针变量;
对于指针变量集合中的任意一个指针变量,确认该指针变量所指向的内存地址是否存在第一数据结构中,从而检测所述第一数据结构中是否存在不被所述指针变量集合中的任一指针变量指向的内存地址;
若存在,则确定内存泄漏,并确定所述内存地址中的对象为泄漏对象。
2.根据权利要求1所述的检测内存泄漏的方法,其特征在于,
当检测到所述第一数据结构中的对象被释放时,将所述对象的分配地址和堆栈信息从所述第一数据结构中删除。
3.根据权利要求1所述的检测内存泄漏的方法,其特征在于,
所述预置对象为objective-c类对象、malloc分配的内存区域、block代码块和C++对象中的至少一项。
4.据权利要求1所述的检测内存泄漏的方法,其特征在于,所述检测内存泄漏的方法还包括:获取所述预置对象的堆栈信息和/或类名;
所述确定泄漏对象,之后还包括:
将所述泄漏对象的分配地址、堆栈信息和/或类名发送至预置分析平台,以便所述预置分析平台根据所述泄漏对象的分配地址和堆栈信息对泄漏源进行定位。
5.根据权利要求1所述的检测内存泄漏的方法,其特征在于,所述获取指针变量集合,包括:
对目标区域进行扫描,查找出所述目标区域内的所有指针变量,其中,所述目标区域包括堆内存、栈内存、全局数据区和寄存器。
6.根据权利要求1所述的检测内存泄漏的方法,其特征在于,所述获取指针变量集合,包括:
对目标区域进行扫描,查找第一指针变量集合,将所述第一指针变量集合加入所述指针变量集合中,其中,所述第一指针变量集合为所述目标区域内的所有指针变量,所述目标区域包括栈内存、全局数据区和寄存器;
遍历所述第一指针变量集合,对所述第一指针变量集合中的每一个特定指针变量,所述特定指针变量为指向堆内存中任意一个区域的指针变量,执行步骤A:
对所述特定指针变量指向的区域进行扫描;将所述所有指针变量加入所述指针变量集合中;当所述所有指针变量中存在所述特定指针变量,且所述特定指针变量不是指向所在区域时,对所述特定指针变量重复所述步骤A,当所述所有指针变量中不存在不是指向所在区域的特定指针变量时,停止重复所述步骤A。
7.根据权利要求5或6所述的检测内存泄漏的方法,其特征在于,所述对目标区域进行扫描,包括:
建立扫描线程并挂起除所述扫描线程以外的所有线程。
8.一种检测内存泄漏的装置,其特征在于,包括:
创建模块,用于创建第一数据结构;
第一获取模块,用于获取预置对象的内存地址,将所述预置对象的存储地址和堆栈信息存储到所述第一数据结构中;
第二获取模块,用于获取指针变量集合,所述指针变量集合包括内存空间中的所有指针变量;
检测模块,用于对于指针变量集合中的任意一个指针变量,确认该指针变量所指向的内存地址是否存在第一数据结构中,从而检测所述第一数据结构中是否存在不被所述指针变量集合中的任一指针变量指向的内存地址;
确定模块,用于当所述第一数据结构中存在不被所述指针变量集合中的任一指针变量指向的内存地址时,确定内存泄漏,并确定所述内存地址中的对象为泄漏对象。
9.根据权利要求8所述的检测内存泄漏的装置,其特征在于,所述检测内存泄漏的装置还包括:
删除模块,用于当检测到所述第一数据结构中的对象被释放时,将所述对象的分配地址和堆栈信息从所述第一数据结构中删除。
10.根据权利要求8所述的检测内存泄漏的装置,其特征在于,
所述预置对象为objective-c类对象、malloc分配的内存区域、block代码块和C++对象中的至少一项。
11.据权利要求8所述的检测内存泄漏的装置,其特征在于,所述检测内存泄漏的装置还包括:
第三获取模块,用于获取所述预置对象的堆栈信息和/或类名;
发送模块,用于在所述确定泄漏对象之后,将所述泄漏对象的分配地址、堆栈信息和/或类名发送至预置分析平台,以便所述预置分析平台根据所述泄漏对象的分配地址和堆栈信息对泄漏源进行定位。
12.根据权利要求8所述的检测内存泄漏的装置,其特征在于,所述第二获取模块具体用于对目标区域进行扫描,查找出所述目标区域内的所有指针变量,其中,所述目标区域包括堆内存、栈内存、全局数据区和寄存器。
13.根据权利要求8所述的检测内存泄漏的装置,其特征在于,所述第二获取模块具体用于:
对目标区域进行扫描,查找第一指针变量集合,将所述第一指针变量集合加入所述指针变量集合中,其中,所述第一指针变量集合为所述目标区域内的所有指针变量,所述目标区域包括栈内存、全局数据区和寄存器;
遍历所述第一指针变量集合,对所述第一指针变量集合中的每一个特定指针变量,所述特定指针变量为指向堆内存中任意一个区域的指针变量,执行步骤A:
对所述特定指针变量指向的区域进行扫描;将所述所有指针变量加入所述指针变量集合中;当所述所有指针变量中存在所述特定指针变量,且所述特定指针变量不是指向所在区域时,对所述特定指针变量重复所述步骤A,当所述所有指针变量中不存在不是指向所在区域的特定指针变量时,停止重复所述步骤A。
14.根据权利要求12或13所述的检测内存泄漏的装置,其特征在于,所述第二获取模块在对目标区域进行扫描时,具体用于建立扫描线程并挂起除所述扫描线程以外的所有线程。
15.一种计算机可读存储介质,其特征在于,所述存储介质中存储有计算机程序,所述计算机程序用于执行权利要求1-7任一项所述的检测内存泄漏的方法。
16.一种计算机设备,其特征在于,包括:存储器和处理器;
所述存储器用于存储计算机程序;
所述处理器用于执行所述存储器中存储的计算机程序;
所述计算机程序用于执行权利要求1-7任一项所述的检测内存泄漏的方法。
CN201610377342.4A 2016-05-31 2016-05-31 检测内存泄漏的方法和装置 Active CN106055478B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610377342.4A CN106055478B (zh) 2016-05-31 2016-05-31 检测内存泄漏的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610377342.4A CN106055478B (zh) 2016-05-31 2016-05-31 检测内存泄漏的方法和装置

Publications (2)

Publication Number Publication Date
CN106055478A CN106055478A (zh) 2016-10-26
CN106055478B true CN106055478B (zh) 2020-09-22

Family

ID=57172471

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610377342.4A Active CN106055478B (zh) 2016-05-31 2016-05-31 检测内存泄漏的方法和装置

Country Status (1)

Country Link
CN (1) CN106055478B (zh)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107992429B (zh) * 2016-10-27 2021-10-15 腾讯科技(深圳)有限公司 一种内存对象引用关系确定方法及装置
CN108073461B (zh) * 2016-11-11 2021-01-19 腾讯科技(深圳)有限公司 内存泄漏调试方法及装置
CN109150642B (zh) * 2017-06-16 2021-01-08 腾讯科技(深圳)有限公司 应用内存错误检测方法、检测装置及存储介质
CN107291598B (zh) * 2017-08-07 2018-07-06 腾讯科技(深圳)有限公司 监控方法、监控装置、监控设备和存储介质
CN109634835B (zh) * 2017-10-09 2021-07-27 腾讯科技(深圳)有限公司 内存泄漏分析方法及相关装置
CN109901908A (zh) * 2017-12-11 2019-06-18 中国移动通信集团山西有限公司 销毁docker容器的方法、装置、设备和介质
CN108182146B (zh) * 2017-12-27 2021-08-24 北京奇艺世纪科技有限公司 一种内存泄漏的检测方法及系统
CN110032464B (zh) * 2019-03-15 2023-06-16 北京星网锐捷网络技术有限公司 内存泄露的处理方法及装置
CN111858112B (zh) * 2019-04-26 2023-04-25 腾讯科技(深圳)有限公司 一种检测内存泄露的方法、客户端及服务器
CN111506500B (zh) * 2020-04-09 2023-05-23 北京奇艺世纪科技有限公司 内存泄露检测方法、装置、电子设备及可读存储介质
CN111966603B (zh) * 2020-09-04 2024-01-19 网易(杭州)网络有限公司 内存泄露的检测方法及装置、可读存储介质及电子设备
CN112035379B (zh) * 2020-09-09 2022-06-14 浙江大华技术股份有限公司 存储空间的使用方法、装置、存储介质以及电子装置
CN111931191A (zh) * 2020-09-09 2020-11-13 中国人民解放军国防科技大学 Linux平台二进制软件堆溢漏洞动态检测方法及系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101599048A (zh) * 2009-07-01 2009-12-09 福建星网锐捷网络有限公司 一种内存监控的方法和装置
CN102831068A (zh) * 2011-06-13 2012-12-19 阿里巴巴集团控股有限公司 一种内存操作记录的处理方法及装置
CN103914376A (zh) * 2014-03-12 2014-07-09 汉柏科技有限公司 一种内存泄露的快速定位方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0729097A1 (en) * 1995-02-07 1996-08-28 Sun Microsystems, Inc. Method and apparatus for run-time memory access checking and memory leak detection of a multi-threaded program
US5842019A (en) * 1996-09-13 1998-11-24 Parasoft Corporation Method and system for dynamically detecting leaked memory space in a computer program
CN101814049A (zh) * 2010-03-23 2010-08-25 北京大学 一种内存泄漏探测方法
CN104133733B (zh) * 2014-07-29 2017-03-29 北京航空航天大学 一种内存错误检测方法
CN105243011A (zh) * 2015-09-09 2016-01-13 浪潮(北京)电子信息产业有限公司 内存泄露定位方法及装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101599048A (zh) * 2009-07-01 2009-12-09 福建星网锐捷网络有限公司 一种内存监控的方法和装置
CN102831068A (zh) * 2011-06-13 2012-12-19 阿里巴巴集团控股有限公司 一种内存操作记录的处理方法及装置
CN103914376A (zh) * 2014-03-12 2014-07-09 汉柏科技有限公司 一种内存泄露的快速定位方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
C++类成员内存泄漏模式研究及检测方法;刘书文;《中国优秀硕士学位论文全文数据库 信息科技辑》;20150815(第08期);第I138-236页 *

Also Published As

Publication number Publication date
CN106055478A (zh) 2016-10-26

Similar Documents

Publication Publication Date Title
CN106055478B (zh) 检测内存泄漏的方法和装置
JP5425286B2 (ja) データ処理システムのメモリ使用状況を追跡する方法
JP5832954B2 (ja) タグ付与装置及びタグ付与方法
US9558055B2 (en) System level memory leak detection
CN109189496B (zh) 应用程序的动态库信息获取方法及装置
CN110908865A (zh) 内存泄漏监控方法、装置及电子设备
KR20170123336A (ko) 파일 조작 방법 및 장치
US20140068351A1 (en) Blackbox Memory Monitoring with a Calling Context Memory Map and Semantic Extraction
US10031843B2 (en) Managing memory in a computer system
CN109471697A (zh) 一种监控虚拟机中系统调用的方法、装置及存储介质
US10282120B2 (en) Method, apparatus and system for inserting disk
CN109150642B (zh) 应用内存错误检测方法、检测装置及存储介质
CN103294588A (zh) 内存检测系统及方法
CN108898012B (zh) 检测非法程序的方法和装置
US9274946B2 (en) Pre-leak detection scan to identify non-pointer data to be excluded from a leak detection scan
US10049113B2 (en) File scanning method and apparatus
CN104750536A (zh) 一种实现虚拟机自省的方法和装置
KR20160099159A (ko) 악성 코드를 탐지하기 위한 전자 시스템 및 방법
CN114297630A (zh) 恶意数据的检测方法、装置、存储介质及处理器
CN112084024B (zh) 一种内存监控方法、装置、介质和电子设备
CN108121602B (zh) 一种确定垃圾收集触发点的方法、电子设备及存储介质
CN107688481B (zh) 一种支持多节点的kvm虚拟机隐藏进程检测系统
CN110765456A (zh) 一种检测隐藏进程的方法、装置及存储设备
CN107885575B (zh) 虚拟机的迁移方法及装置
CN113342270A (zh) 卷卸载方法、装置和电子设备

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant