CN106407114B - 内存泄漏分析方法和装置 - Google Patents

内存泄漏分析方法和装置 Download PDF

Info

Publication number
CN106407114B
CN106407114B CN201610835770.7A CN201610835770A CN106407114B CN 106407114 B CN106407114 B CN 106407114B CN 201610835770 A CN201610835770 A CN 201610835770A CN 106407114 B CN106407114 B CN 106407114B
Authority
CN
China
Prior art keywords
memory block
memory
analyzed
data
list
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
CN201610835770.7A
Other languages
English (en)
Other versions
CN106407114A (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 CN201610835770.7A priority Critical patent/CN106407114B/zh
Publication of CN106407114A publication Critical patent/CN106407114A/zh
Application granted granted Critical
Publication of CN106407114B publication Critical patent/CN106407114B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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

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)

Abstract

本发明实施例公开了一种内存泄露分析方法和装置。本发明实施例方法包括:获取待分析数据,所述待分析数据包括内存块列表和指针根节点列表,其中,所述内存块列表包括目标程序在运行结束时未被释放的内存块的信息,所述内存块为在所述目标程序运行期间堆和栈内被分配给所述目标程序的内存块,所述指针根节点列表包括至少一个指针根节点;分别以所述待分析数据的指针根节点列表中的各指针根节点为起点,遍历所述内存块列表中的内存块;获取内存泄漏分析结果,所述内存泄漏分析结果包括泄漏的内存块,所述泄漏的内存块为所述待分析数据中未被遍历到的内存块。

Description

内存泄漏分析方法和装置
技术领域
本发明涉及计算机技术领域,尤其涉及一种内存泄漏分析方法和装置。
背景技术
内存泄漏,也称作“存储渗漏”,指的是程序在运行过程中动态申请的内存空间不再使用后没有及时释放,导致对象一直占据该内存单元的现象。
目前针对程序的内存泄漏检查工具中主要使用了内存快照对比的方法。具体的,测试人员在对程序测试过程中每隔预置时间抓取内存分配操作的快照,并通过人工查找出相邻两次内存快照之间的差异,来找出那些没释放的内存块。然而,采用该种方法来检查内存泄漏需要测试人员对获取内存快照的时间的把握以及对业务有一定程度的了解,人工成本较高,而且获取内存快照的时间点容易出错,在设计上用作缓存的内存和没有及时释放的内存会被误判为泄漏的内存。
发明内容
本发明实施例提供了一种内存泄漏分析方法和装置,能够提高内存泄漏分析的正确率和效率。
第一方面,本发明提供一种内存泄露分析方法,包括:
获取待分析数据,所述待分析数据包括内存块列表和指针根节点列表,其中,所述内存块列表包括目标程序在运行结束时未被释放的内存块的信息,所述内存块为在所述目标程序运行期间堆和栈内被分配给所述目标程序的内存块,所述指针根节点列表包括至少一个指针根节点;
执行以下步骤A或者步骤B:
步骤A:分别以所述待分析数据的指针根节点列表中的各指针根节点为起点,遍历所述内存块列表中的内存块;获取内存泄漏分析结果,所述内存泄漏分析结果包括泄漏的内存块,所述泄漏的内存块为所述待分析数据中未被遍历到的内存块;
步骤B:将所述待分析数据发送给服务器,以便所述服务器根据所述待分析数据获取内存泄漏分析结果。
第二方面,本发明提供一种内存泄露分析装置,包括:
获取模块,用于获取待分析数据,所述待分析数据包括内存块列表和指针根节点列表,其中,所述内存块列表包括目标程序在运行结束时未被释放的内存块的信息,所述内存块为在所述目标程序运行期间堆和栈内被分配给所述目标程序的内存块,所述指针根节点列表包括至少一个指针根节点;
处理模块,用于执行以下步骤A或者步骤B:
步骤A:分别以所述待分析数据的指针根节点列表中的各指针根节点为起点,遍历所述内存块列表中的内存块;获取内存泄漏分析结果,所述内存泄漏分析结果包括泄漏的内存块,所述泄漏的内存块为所述待分析数据中未被遍历到的内存块;
步骤B:将所述待分析数据发送给服务器,以便所述服务器根据所述待分析数据获取内存泄漏分析结果。
从以上技术方案可以看出,本发明实施例具有以下优点:
本发明中,通过获取在目标程序的整个运行期间被分配且未释放的内存块列表,并以指针根节点列表为起点,对该内存块列表中的内存块进行遍历,若存在没遍历到的内存块即可确定为泄漏的内存块,在该方法中无需人工查找泄漏的内存块,而是实现自动化查找泄漏的内存块,而且采用该方法不仅能抓到逻辑代码的泄漏,而且能抓到系统函数、系统DLL和第三方库里的内存泄漏,对泄漏的内存块定位的准确率较高。
附图说明
图1为本发明的内存泄漏分析方法的一个实施例的流程示意图;
图2为本发明的内存泄漏分析方法的另一个实施例的流程示意图;
图3为本发明的内存泄漏分析系统的一个实施例的结构框架图;
图4为检测工具的一个实施例的结构示意图;
图5为本发明的内存泄露分析装置的一个实施例的结构示意图;
图6为本发明的内存泄露分析装置的另一个实施例的结构示意图;
图7为本发明的内存泄露分析装置的另一个实施例的结构示意图;
图8为本发明的内存泄露分析装置的另一个实施例的结构示意图;
图9为本发明的终端的一个实施例的结构示意图;
图10为本发明的服务器的一个实施例的结构示意图。
具体实施方式
请参阅图1,图1为本发明的内存泄漏分析方法的一个实施例的流程示意图。本实施例中,内存泄漏分析方法包括:
101、获取待分析数据,所述待分析数据包括内存块列表和指针根节点列表。
本实施例中,所述内存块列表包括目标程序在运行结束时未被释放的内存块的信息,所述内存块为在所述目标程序运行期间堆和栈内被分配给所述目标程序的内存块,该内存块的信息包括内存块的大小和地址。实际应用中,windows程序的内存管理主要分为四大部分:静态存储区、代码区、堆、栈。其中,目标程序在运行时动态分配给该目标程序的内存位于堆和栈内,因此,在查找泄漏的内存块时,从在所述目标程序运行期间堆和栈内被分配给所述目标程序的内存块中查找。为描述方便,下文中所描述的内存块均指的是在所述目标程序运行期间堆和栈内被分配给所述目标程序的内存块。在目标程序结束运行时,部分内存块被释放,那么泄漏的内存可从该被释放的内存块中排除,将未被释放的内存块添加到内存块列表中,对该内存块列表进行筛查,以找出泄漏的内存。
其中,获取内存块列表的方法有多种。具体举例来说,任何系统函数在操作内存时调用的函数是有限个的,因此,在获取内存块列表时,在目标程序运行之前确定特定函数集合,该特定函数集合为目标程序的系统函数在操作内存时所调用的函数;在目标函数运行期间,Hook该特定函数集合,并从该特定函数集合中的每一个函数的输入参数中提取出内存块的信息。这样,所获取到的所有内存块即为所述内存块列表。
具体的,本实施例中,所述特定函数集合包括以下函数:new()、malloc()、realloc()、calloc()、heapalloc(),delete()、free()和heapfree()。
本实施例中,所述指针根节点列表包括至少一个指针根节点,其中该指针根节点为该内存块列表中所包含的指针的起点。具体的,可在目标程序结束运行时从该目标程序的寄存器中读取该指针根节点列表。
102、分别以所述待分析数据的指针根节点列表中的各指针根节点为起点,遍历所述内存块列表中的内存块。
获取到指针根节点列表后,分别该列表中的各指针根节点为起点。以其中一个指针根节点(为描述方便,下文称为第一根节点)为例,可在内存块列表中找到该指针根节点所指向的内存块(为描述方便,下文称为内存块A)。若内存块A内存储的是指针,那么可遍历到该指针所指向的内存块(为描述方便,下文称为内存块B);若内存块A内存储的是非指针的数据,那么可停止遍历。以此类推,可遍历到以第一根节点为起点的一串内存块。同理,指针根节点列表中以每一个指针根节点为起点,均可以从内存块列表中遍历出一串内存块。
可选的,本实施例中,获取到内存块列表后,采用小型红黑树来存储该内存块列表。
103、获取内存泄漏分析结果,所述内存泄漏分析结果包括泄漏的内存块,所述泄漏的内存块为所述待分析数据中未被遍历到的内存块。
完成对内存块列表的遍历后,所遍历到的内存块均可以排除为泄漏的内存块,那么内存块列表中未被遍历到的内存块即可确定为泄漏的内存块。
可选的,本实施例中,在获取待分析数据时,该待分析数据还包括所述内存块列表中每一个内存块被调用的函数,所述内存泄漏分析结果还包括所述泄漏的内存块被调用的函数。这样,在展示分析结果时,方便用户快速确定哪一个函数在操作内存时产生泄漏的内存块。其中,获取内存块被调用的函数的方法有多种。例如,在运行所述目标程序期间,钩取(hook)所述特定函数集合中的每一个特定函数时,通过调用StackWalk64()可以获取到该特定函数的函数调用堆栈,根据该特定函数的参数值而生成的内存块即为该函数调用堆栈分配给目标进程的内存块。
其中,调用StackWalk64()返回的具体为符号文件,可选的,本实施例中还采用程序数据库信息文件(英文全称:Program Database Files,英文缩写:PDB)Parser来解析该符号文件的信息,以获得函数调用堆栈的明文信息。可选的,本实施例中,采用Hash Table来存储该函数调用堆栈的明文信息。
可选的,本实施例中,在运行目标程序时,具体在虚拟机中运行该目标程序,这样所获取到的目标程序的待分析数据更加稳定和可靠。
在本发明的第一种可能的实现方式中,步骤101至步骤103的执行主体为客户端中的检测工具,在采用该检测工具对目标程序进行检测时,通过一个动态二进制插桩模块将该检测工具加载到目标程序中,这样加载效率较高,性能较好。
在本发明的第二种可能的实现方式中,步骤101至步骤103的执行主体为服务器。该服务器在执行步骤101时,具体通过接收客户端发送的待分析数据来获取待分析数据。其中客户获取待分析数据的方法可参考步骤101的解释说明。
进一步,可选的,服务器在获取到内存泄漏分析结果后,还将该内存泄漏分析结果存储到数据库中。当服务器接收到客户端的分析结果请求时,从数据库中获取该内存泄漏分析结果,并通过页面内容对用户展示该内存泄漏分析结果。或者,当服务器接收到客户端的分析结果请求时,服务器将该内存泄漏分析结果发送给客户端,以便客户端在本地文件中展示该内存泄漏分析结果。
在本发明的第二种可能的实现方式中,也即图1所示的内存泄露分析方法由服务器执行的情况中,相对应的,客户端所执行的内存泄露分析方法具体如图2所示。请参阅图2,图2为本发明的内存泄露分析方法的另一个实施例的流程示意图。本实施例中,内存泄露分析方法包括:
201、获取待分析数据,所述待分析数据包括内存块列表和指针根节点列表。
本实施例中,客户端设置有第一应用。当用户运行第一应用时,通过该第一应用选择目标程序。当第一应用确定目标程序时,将检测工具加载到该目标程序中。该检测工具用于获取待分析数据,其中该待分析数据的解释和获取待分析数据的方法可参考图1所示实施例的步骤101的解释说明,在此不再赘述。
可选的,本实施例中,第一应用确定至少两个目标程序,并在同一时间段内将该检测工具加载到该至少两个目标程序中,这样,可以实现同时对至少两个目标程序的待分析数据的获取。
可选的,本实施例中,用户采用用户账号登录该第一应用后,通过该用户账号向服务器获取历史分析列表,所述历史分析列表为与所述用户账号关联的、历史待分析数据所属的程序列表。第一应用在接收到服务器发送的历史分析列表后,可通过对该历史分析列表中的程序的选择,来运行要进行内存泄漏检测的目标程序,同时,第一应用将该检测工具加载到该至少两个目标程序中,以获取该至少两个目标程序的待分析数据。
202、将所述待分析数据发送给服务器,以便所述服务器根据所述待分析数据获取内存泄漏分析结果。
第一应用获取到目标程序的待分析数据后,将该待分析数据发送给服务器,以便服务器根据所述待分析数据获取内存泄漏分析结果。其中服务器根据所述待分析数据获取内存泄漏分析结果的方法可参考图1所示实施例中步骤102和步骤103的解释说明,在此不再赘述。
可选的,本实施例中,在将待分析数据发送给服务器之前,第一应用还对该待分析数据进行序列化操作,已对该待分析数据进行压缩。
可选的,本实施中,客户端将所述待分析数据发送给服务器后,还接收该服务器返回的内存泄漏分析结果,或者接收该服务器返回的查看连接,客户端通过访问该连接来查看内存泄漏分析结果,
可选的,第一应用还可以对目标程序的内存泄漏分析结果进行处理。具体的,按照该目标程序中泄漏的内存块的大小对泄漏的内存块进行排序,或者按照函数堆栈的泄漏次数对泄漏的内存块进行排序,在此不作限制。
可选的,目标程序的内存泄漏分析结果中还包括该目标程序或者分析过程的相关信息,例如包括版本号、测试时间段、测试人员等等信息,以便用户根据该相关信息对各个程序的内存泄漏分析结果进行筛选。
为理解本发明,下面结合一个实际应用场景对本发明的内存泄漏分析方法进行举例描述。
如图3所示,图3为本发明的内存泄漏分析系统的一个实施例的结构框架图。本实施例中,该系统包括至少一个客户端,以及逻辑处理服务器、数据库(英文全称:DataBase,英文缩写:DB)服务器和网页(web)服务器。可选的,该三个服务器也可以集成到同一个服务器中,在此不作限制。
为描述方便,下文以其中的第一客户端进行举例描述。第一客户端内的第一应用在运行时,该第一应用从逻辑处理服务器下载历史分析列表,该历史分析列表包括第一应用以前所进行过内存泄漏分析的程序列表。
当用户选择历史分析列表中的至少一个程序时,第一客户端在虚拟机内运行该至少一个程序,并将检测工具分别加载到该至少一个程序中。为描述方便,下文中以其中一个程序(下文中称该程序为目标程序)进行举例描述。本实施例中,当用户选择所述目标程序后,第一应用采用DBI Engine模块在虚拟机中将检测工具加载到目标程序中,其中,该DBIEngine模块是一个动态二进制插桩模块。
如图4所示,图4为检测工具的一个实施例的结构示意图。本实施例中,该检测工具包括PDB Parser、Uploader、Serializer、LeakScan、Util、Wrap这几个模块。下面对该几个模块的工作流程进行描述。
Wrap模块在目标程序运行期间,Hook以下特定函数:new()、malloc()、realloc()、calloc()、heapalloc(),delete()、free()和heapfree()。以malloc()为例,在Wrap模块Hook特定函数malloc()的期间,当该malloc()被调用时,可以根据malloc()的参数值生成内存块的信息,该内存块即为malloc()的调用堆栈分配给目标进程的内存块。该内存块的信息包括内存块的大小和地址。
同时,Util模块包括第一类库,该第一类库调用StackWalk64()获取到上述特定函数的函数调用堆栈。其中,StackWalk64()返回的具体为符号文件。PDB Parser模块用于解析该符号文件的信息,以获得函数调用堆栈的明文信息。可选的,本实施例中,Util模块包括第二类库,该第二类库采用Hash Table来存储该调用堆栈的明文信息。
在目标程序结束运行时,Wrap模块返回给LeakScan模块所述函数调用堆栈分配给目标进程的所有内存块的信息以及释放的内存块的信息。LeakScan模块根据该所有内存块的信息以及释放的内存块的信息获取到内存块列表,该内存块列表包括目标程序在运行结束时未被释放的内存块的信息。在目标程序结束运行时,LeakScan模块还从该目标程序的寄存器中读取该指针根节点列表。
LeakScan模块获取到指针根节点列表后,分别该列表中的各指针根节点为起点。以其中一个指针根节点(为描述方便,下文称为第一根节点)为例,可在内存块列表中找到该指针根节点所指向的内存块(为描述方便,下文称为内存块A)。若内存块A内存储的是指针,那么可遍历到该指针所指向的内存块(为描述方便,下文称为内存块B);若内存块A内存储的是非指针的数据,那么可停止遍历。以此类推,可遍历到以第一根节点为起点的一串内存块。同理,指针根节点列表中以每一个指针根节点为起点,均可以从内存块列表中遍历出一串内存块。完成对内存块列表的遍历后,所遍历到的内存块均可以排除为泄漏的内存块,那么内存块列表中未被遍历到的内存块即可确定为泄漏的内存块。LeakScan模块还从函数调用堆栈中确定内存块列表中每一个内存块被调用的函数。
LeakScan模块获取到内存块列表后,Util模块中的第三类库采用小型红黑树来存储该内存块列表。
Serializer模块将LeakScan模块获取到的内存泄漏分析结果进行序列化操作,以对该内存泄漏分析结果进行压缩。Uploader模块将该压缩后的内存泄漏分析结果发送给逻辑处理服务器。
逻辑处理服务器接收第一客户端发送的压缩后的内存泄漏分析结果,并进行压缩文件的解析和处理,并将处理后的数据写入到DB服务器中。
当第一客户端中的浏览器请求访问分析结果时,web服务器读取DB服务器中的数据,并将该数据展示在页面上。
其中,DB服务器中还存储有此次内存泄漏分析结果的其他相关信息,例如该次分析结果的版本号、检测时间段、测试人员等等,以便用户在通过网页查询分析结果时,可以通过相关信息对分析结果进行检索。
其中,web服务器在对分析结果进行页面展示时,还可以根据用户的指示对分析结果进行处理,例如,对该分析结果按照泄漏的内存块的大小进行排序,或者按照函数调用堆栈的泄漏次数进行排序,等等,在此不作限制。
上面对本发明的内存泄漏分析方法进行了描述,下面将对本发明的内存泄漏装置进行描述。
请参阅图5,图5为本发明的内存泄露分析装置的一个实施例的结构示意图。本实施例中,内存泄露分析装置500包括:
获取模块501,用于获取待分析数据,所述待分析数据包括内存块列表和指针根节点列表,其中,所述内存块列表包括目标程序在运行结束时未被释放的内存块的信息,所述内存块为在所述目标程序运行期间堆和栈内被分配给所述目标程序的内存块,所述指针根节点列表包括至少一个指针根节点;
处理模块502,用于执行以下步骤A或者步骤B:
步骤A:分别以所述待分析数据的指针根节点列表中的各指针根节点为起点,遍历所述内存块列表中的内存块;获取内存泄漏分析结果,所述内存泄漏分析结果包括泄漏的内存块,所述泄漏的内存块为所述待分析数据中未被遍历到的内存块;
步骤B:将所述待分析数据发送给服务器,以便所述服务器根据所述待分析数据获取内存泄漏分析结果。
本实施例中,通过获取在目标程序的整个运行期间被分配且未释放的内存块列表,并以指针根节点列表为起点,对该内存块列表中的内存块进行遍历,若没遍历到的内存块即可确定为泄漏内存,在该方法中无需人工查找泄漏的内存块,而是实现自动化查找泄漏的内存块,而且采用该方法不仅能抓到逻辑代码的泄漏,而且能抓到系统函数、系统DLL和第三方库里的内存泄漏,对泄漏的内存块定位的准确率较高。
可选的,所述获取模块501在获取待分析数据中的内存块列表时,具体用于:
确定特定函数集合,所述特定函数集合为所述目标程序的系统函数在操作内存时所调用的函数;
在运行所述目标程序期间,Hook所述目标程序中的特定函数集合;
从所述特定函数集合中的每一个函数的参数中获取所述内存块的信息。
可选的,所述特定函数集合包括以下函数:new()、malloc()、realloc()、calloc()、heapalloc(),delete()、free()和heapfree()。
可选的,所述获取模块501在获取待分析数据中的指针根节点列表时,具体用于:
在所述目标程序结束运行时,从所述目标程序的寄存器中获取所述指针根节点列表。
可选的,所述待分析数据还包括所述内存块列表中每一个内存块被调用的函数;
所述内存泄漏分析结果还包括所述泄漏的内存块被调用的函数。
可选的,所述装置500还包括:
运行模块503,用于在所述获取模块获取待分析数据之前,在虚拟机中运行所述目标程序。
可选的,如图6所示,当所述处理模块502用于执行所述步骤B时,所述装置还包括:
登录模块601,用于在所述获取模块获取待分析数据之前,采用用户账号登录;
所述获取模块501还用于通过所述用户账号从服务器获取历史分析列表,所述历史分析列表为与所述用户账号关联的、历史待分析数据所属的程序列表。
可选的,如图7所示,当所述处理模块502用于执行所述步骤A时,所述获取模块501具体用于接收客户端发送的待分析数据;
所述装置500还包括:
发送模块701,用于在所述处理模块执行所述步骤A之后,将所述内存泄漏分析结果发送给所述客户端。
可选的,如图8所示,当所述处理模块502用于执行所述步骤A时,所述装置500还包括:
查看模块801,用于通过本地文件查看所述内存泄漏分析结果;
或者,当所述处理模块502用于执行所述步骤B时,所述装置500还包括:
查看模块801,用于接收所述服务器发送的内存泄漏分析结果;通过页面对所述内存泄漏分析结果进行展示。
本发明实施例还提供了另一种终端,如图9所示,为了便于说明,仅示出了与本发明实施例相关的部分,具体技术细节未揭示的,请参照本发明实施例方法部分。该终端可以为包括手机、平板电脑、PDA(Personal Digital Assistant,个人数字助理)、POS(Point ofSales,销售终端)、车载电脑等任意终端设备,以终端为手机为例:
图9示出的是与本发明实施例提供的终端相关的手机的部分结构的框图。参考图9,手机包括:射频(Radio Frequency,RF)电路1010、存储器1020、输入单元1030、显示单元1040、传感器1050、音频电路1060、无线保真(wireless fidelity,WiFi)模块1070、处理器1080、以及电源1090等部件。本领域技术人员可以理解,图9中示出的手机结构并不构成对手机的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
下面结合图9对手机的各个构成部件进行具体的介绍:
RF电路1010可用于收发信息或通话过程中,信号的接收和发送,特别地,将基站的下行信息接收后,给处理器1080处理;另外,将设计上行的数据发送给基站。通常,RF电路1010包括但不限于天线、至少一个放大器、收发信机、耦合器、低噪声放大器(Low NoiseAmplifier,LNA)、双工器等。此外,RF电路1010还可以通过无线通信与网络和其他设备通信。上述无线通信可以使用任一通信标准或协议,包括但不限于全球移动通讯系统(GlobalSystem of Mobile communication,GSM)、通用分组无线服务(General Packet RadioService,GPRS)、码分多址(Code Division Multiple Access,CDMA)、宽带码分多址(Wideband Code Division Multiple Access,WCDMA)、长期演进(Long Term Evolution,LTE)、电子邮件、短消息服务(Short Messaging Service,SMS)等。
存储器1020可用于存储软件程序以及模块,处理器1080通过运行存储在存储器1020的软件程序以及模块,从而执行手机的各种功能应用以及数据处理。存储器1020可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器1020可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
输入单元1030可用于接收输入的数字或字符信息,以及产生与手机的用户设置以及功能控制有关的键信号输入。具体地,输入单元1030可包括触控面板1031以及其他输入设备1032。触控面板1031,也称为触摸屏,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板1031上或在触控面板1031附近的操作),并根据预先设定的程式驱动相应的连接装置。可选的,触控面板1031可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器1080,并能接收处理器1080发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触控面板1031。除了触控面板1031,输入单元1030还可以包括其他输入设备1032。具体地,其他输入设备1032可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
显示单元1040可用于显示由用户输入的信息或提供给用户的信息以及手机的各种菜单。显示单元1040可包括显示面板1041,可选的,可以采用液晶显示器(LiquidCrystal Display,LCD)、有机发光二极管(Organic Light-Emitting Diode,OLED)等形式来配置显示面板1041。进一步的,触控面板1031可覆盖显示面板1041,当触控面板1031检测到在其上或附近的触摸操作后,传送给处理器1080以确定触摸事件的类型,随后处理器1080根据触摸事件的类型在显示面板1041上提供相应的视觉输出。虽然在图9中,触控面板1031与显示面板1041是作为两个独立的部件来实现手机的输入和输入功能,但是在某些实施例中,可以将触控面板1031与显示面板1041集成而实现手机的输入和输出功能。
手机还可包括至少一种传感器1050,比如光传感器、运动传感器以及其他传感器。具体地,光传感器可包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板1041的亮度,接近传感器可在手机移动到耳边时,关闭显示面板1041和/或背光。作为运动传感器的一种,加速计传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别手机姿态的应用(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;至于手机还可配置的陀螺仪、气压计、湿度计、温度计、红外线传感器等其他传感器,在此不再赘述。
音频电路1060、扬声器1061,传声器1062可提供用户与手机之间的音频接口。音频电路1060可将接收到的音频数据转换后的电信号,传输到扬声器1061,由扬声器1061转换为声音信号输出;另一方面,传声器1062将收集的声音信号转换为电信号,由音频电路1060接收后转换为音频数据,再将音频数据输出处理器1080处理后,经RF电路1010以发送给比如另一手机,或者将音频数据输出至存储器1020以便进一步处理。
WiFi属于短距离无线传输技术,手机通过WiFi模块1070可以帮助用户收发电子邮件、浏览网页和访问流式媒体等,它为用户提供了无线的宽带互联网访问。虽然图9示出了WiFi模块1070,但是可以理解的是,其并不属于手机的必须构成,完全可以根据需要在不改变发明的本质的范围内而省略。
处理器1080是手机的控制中心,利用各种接口和线路连接整个手机的各个部分,通过运行或执行存储在存储器1020内的软件程序和/或模块,以及调用存储在存储器1020内的数据,执行手机的各种功能和处理数据,从而对手机进行整体监控。可选的,处理器1080可包括一个或多个处理单元;优选的,处理器1080可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器1080中。
手机还包括给各个部件供电的电源1090(比如电池),优选的,电源可以通过电源管理系统与处理器1080逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。
尽管未示出,手机还可以包括摄像头、蓝牙模块等,在此不再赘述。
在本发明实施例中,该终端所包括的处理器1080还具有控制执行以上由消息记录的同步装置和/或消息记录的获取装置执行的方法流程。
图10是本发明实施例提供的一种服务器结构示意图,该服务器1100可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器(central processingunits,CPU)1122(例如,一个或一个以上处理器)和存储器1132,一个或一个以上存储应用程序1142或数据1144的存储介质1130(例如一个或一个以上海量存储设备)。其中,存储器1132和存储介质1130可以是短暂存储或持久存储。存储在存储介质1130的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对服务器中的一系列指令操作。更进一步地,中央处理器1122可以设置为与存储介质1130通信,在服务器1100上执行存储介质1130中的一系列指令操作。
服务器1100还可以包括一个或一个以上电源1126,一个或一个以上有线或无线网络接口1150,一个或一个以上输入输出接口1158,和/或,一个或一个以上操作系统1141,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等等。
上述实施例中由服务器所执行的步骤可以基于该图10所示的服务器结构。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (12)

1.一种内存泄露分析方法,其特征在于,包括:
获取待分析数据,所述待分析数据包括内存块列表和指针根节点列表,其中,所述内存块列表包括目标程序在运行结束时未被释放的内存块的信息,所述内存块为在所述目标程序运行期间堆和栈内被分配给所述目标程序的内存块,所述指针根节点列表包括至少一个指针根节点;
执行以下步骤A或者步骤B:
步骤A:分别以所述待分析数据的指针根节点列表中的各指针根节点为起点,遍历所述内存块列表中的内存块;获取内存泄漏分析结果,所述内存泄漏分析结果包括泄漏的内存块,所述泄漏的内存块为所述待分析数据中未被遍历到的内存块;
步骤B:将所述待分析数据发送给服务器,以便所述服务器根据所述待分析数据获取内存泄漏分析结果;
所述获取待分析数据中的内存块列表,包括:
确定特定函数集合,所述特定函数集合为所述目标程序的系统函数在操作内存时所调用的函数;
在运行所述目标程序期间,钩取hook所述目标程序中的特定函数集合;
从所述特定函数集合中的每一个函数的参数中获取所述内存块的信息;
所述获取待分析数据中的指针根节点列表,包括:
在所述目标程序结束运行时,从所述目标程序的寄存器中获取所述指针根节点列表。
2.根据权利要求1所述的内存泄漏分析方法,其特征在于,所述待分析数据还包括所述内存块列表中每一个内存块被调用的函数;
所述内存泄漏分析结果还包括所述泄漏的内存块被调用的函数。
3.根据权利要求1或2所述的内存泄漏分析方法,其特征在于,所述获取待分析数据,之前还包括:
在虚拟机中运行所述目标程序。
4.根据权利要求1或2所述的内存泄漏分析方法,其特征在于,当执行所述步骤B时,所述获取待分析数据,之前还包括:
采用用户账号登录;
通过所述用户账号从服务器获取历史分析列表,所述历史分析列表为与所述用户账号关联的、历史待分析数据所属的程序列表。
5.根据权利要求1或2所述的内存泄漏分析方法,其特征在于,当执行所述步骤A时,所述获取待分析数据,包括:
接收客户端发送的待分析数据;
所述步骤A之后,还包括:
将所述内存泄漏分析结果发送给所述客户端。
6.根据权利要求1或2所述的内存泄漏分析方法,其特征在于,当执行所述步骤A时,所述方法还包括:
通过本地文件查看所述内存泄漏分析结果;
或者,当执行所述步骤B时,所述方法还包括:
接收所述服务器发送的内存泄漏分析结果;
通过页面对所述内存泄漏分析结果进行展示。
7.一种内存泄露分析装置,其特征在于,包括:
获取模块,用于获取待分析数据,所述待分析数据包括内存块列表和指针根节点列表,其中,所述内存块列表包括目标程序在运行结束时未被释放的内存块的信息,所述内存块为在所述目标程序运行期间堆和栈内被分配给所述目标程序的内存块,所述指针根节点列表包括至少一个指针根节点;
处理模块,用于执行以下步骤A或者步骤B:
步骤A:分别以所述待分析数据的指针根节点列表中的各指针根节点为起点,遍历所述内存块列表中的内存块;获取内存泄漏分析结果,所述内存泄漏分析结果包括泄漏的内存块,所述泄漏的内存块为所述待分析数据中未被遍历到的内存块;
步骤B:将所述待分析数据发送给服务器,以便所述服务器根据所述待分析数据获取内存泄漏分析结果;
所述获取模块在获取待分析数据中的内存块列表时,具体用于:
确定特定函数集合,所述特定函数集合为所述目标程序的系统函数在操作内存时所调用的函数;
在运行所述目标程序期间,Hook所述目标程序中的特定函数集合;
从所述特定函数集合中的每一个函数的参数中获取所述内存块的信息;
所述获取模块在获取待分析数据中的指针根节点列表时,具体用于:
在所述目标程序结束运行时,从所述目标程序的寄存器中获取所述指针根节点列表。
8.根据权利要求7所述的内存泄漏分析装置,其特征在于,所述待分析数据还包括所述内存块列表中每一个内存块被调用的函数;
所述内存泄漏分析结果还包括所述泄漏的内存块被调用的函数。
9.根据权利要求7或8所述的内存泄漏分析装置,其特征在于,所述装置还包括:
运行模块,用于在所述获取模块获取待分析数据之前,在虚拟机中运行所述目标程序。
10.根据权利要求7或8所述的内存泄漏分析装置,其特征在于,当所述处理模块用于执行所述步骤B时,所述装置还包括:
登录模块,用于在所述获取模块获取待分析数据之前,采用用户账号登录;
所述获取模块还用于通过所述用户账号从服务器获取历史分析列表,所述历史分析列表为与所述用户账号关联的、历史待分析数据所属的程序列表。
11.根据权利要求7或8所述的内存泄漏分析装置,其特征在于,当所述处理模块用于执行所述步骤A时,所述获取模块具体用于接收客户端发送的待分析数据;
所述装置还包括:
发送模块,用于在所述处理模块执行所述步骤A之后,将所述内存泄漏分析结果发送给所述客户端。
12.根据权利要求7或8所述的内存泄漏分析装置,其特征在于,当所述处理模块用于执行所述步骤A时,所述装置还包括:
查看模块,用于通过本地文件查看所述内存泄漏分析结果;
或者,当所述处理模块用于执行所述步骤B时,所述装置还包括:
查看模块,用于接收所述服务器发送的内存泄漏分析结果;通过页面对所述内存泄漏分析结果进行展示。
CN201610835770.7A 2016-09-20 2016-09-20 内存泄漏分析方法和装置 Active CN106407114B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610835770.7A CN106407114B (zh) 2016-09-20 2016-09-20 内存泄漏分析方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610835770.7A CN106407114B (zh) 2016-09-20 2016-09-20 内存泄漏分析方法和装置

Publications (2)

Publication Number Publication Date
CN106407114A CN106407114A (zh) 2017-02-15
CN106407114B true CN106407114B (zh) 2017-12-15

Family

ID=57996998

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610835770.7A Active CN106407114B (zh) 2016-09-20 2016-09-20 内存泄漏分析方法和装置

Country Status (1)

Country Link
CN (1) CN106407114B (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108664390B (zh) * 2017-03-31 2021-10-01 华为技术有限公司 一种内存泄露检测方法及设备
CN107220537B (zh) * 2017-05-25 2021-02-23 南京大学 一种程序内存布局信息泄露行为的检测方法
CN107391970B (zh) * 2017-06-07 2020-08-04 武汉斗鱼网络科技有限公司 Flash应用程序中的函数访问控制方法及装置
CN110198331B (zh) * 2018-03-28 2022-11-25 腾讯科技(上海)有限公司 一种同步数据的方法及系统
CN109542778A (zh) * 2018-11-12 2019-03-29 中国银联股份有限公司 一种资源泄露检测的方法及装置
CN110597632A (zh) * 2019-09-09 2019-12-20 北京西山居互动娱乐科技有限公司 一种数据处理方法及装置、一种计算设备及存储介质
CN111597109B (zh) * 2020-04-24 2022-03-11 清华大学 一种跨架构固件堆内存的缺陷检测方法及系统
CN111813666B (zh) * 2020-06-30 2023-10-27 北京字节跳动网络技术有限公司 一种内存泄露定位的方法、装置、介质和电子设备

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103914376A (zh) * 2014-03-12 2014-07-09 汉柏科技有限公司 一种内存泄露的快速定位方法
CN104572460A (zh) * 2014-12-30 2015-04-29 大唐移动通信设备有限公司 一种内存泄露的检测方法和装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7398369B2 (en) * 2004-10-28 2008-07-08 International Business Machines Corporation Memory leakage management

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103914376A (zh) * 2014-03-12 2014-07-09 汉柏科技有限公司 一种内存泄露的快速定位方法
CN104572460A (zh) * 2014-12-30 2015-04-29 大唐移动通信设备有限公司 一种内存泄露的检测方法和装置

Also Published As

Publication number Publication date
CN106407114A (zh) 2017-02-15

Similar Documents

Publication Publication Date Title
CN106407114B (zh) 内存泄漏分析方法和装置
CN104253873B (zh) 域名访问方法、终端及域名访问系统
CN107329985B (zh) 一种页面的收藏方法、装置和移动终端
CN107357725A (zh) 应用测试方法及装置
CN108920220B (zh) 一种函数调用的方法、装置及终端
CN105260087A (zh) 一种信息显示方法及终端
CN104699501B (zh) 一种运行应用程序的方法及装置
CN111966491B (zh) 统计占用内存的方法及终端设备
CN107783906A (zh) 测试方法、装置及存储介质
CN107276602A (zh) 射频干扰处理方法、装置、存储介质及终端
CN109246233A (zh) 基于在线监控的数据处理方法、装置、设备及存储介质
CN106407771A (zh) 一种消息管理方法及设备
CN108196968A (zh) 移动终端重启定位方法、移动终端及计算机可读存储介质
CN107918529A (zh) 图像处理方法和装置、计算机设备、计算机可读存储介质
CN108012031A (zh) 移动终端重启定位方法、移动终端及计算机可读存储介质
CN106155888A (zh) 一种移动应用中网页加载性能的检测方法和装置
CN106598583A (zh) 移动终端和文件夹命名的方法及装置
CN108182123A (zh) 移动终端重启定位方法、移动终端及计算机可读存储介质
CN108121613A (zh) 基于内存页的重启定位方法、移动终端及可读存储介质
CN116303085A (zh) 一种测试原因分析方法、装置、设备及存储介质
CN103269341B (zh) 一种间谍程序的分析方法和计算机系统
CN107341398A (zh) 程序测评方法及装置
CN110399721A (zh) 一种软件识别方法和服务器以及客户端
CN108268335A (zh) 基于系统服务的重启定位方法、移动终端及可读存储介质
CN108076200A (zh) 移动终端重启定位方法、移动终端及计算机可读存储介质

Legal Events

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