CN106095689B - 一种应用内存泄露的检测方法和装置 - Google Patents

一种应用内存泄露的检测方法和装置 Download PDF

Info

Publication number
CN106095689B
CN106095689B CN201610475164.9A CN201610475164A CN106095689B CN 106095689 B CN106095689 B CN 106095689B CN 201610475164 A CN201610475164 A CN 201610475164A CN 106095689 B CN106095689 B CN 106095689B
Authority
CN
China
Prior art keywords
application
ram leakage
detection
target application
leakage
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
CN201610475164.9A
Other languages
English (en)
Other versions
CN106095689A (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.)
Beijing 360 Zhiling Technology Co ltd
Original Assignee
Beijing Qihoo Technology Co Ltd
Qizhi Software Beijing 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 Beijing Qihoo Technology Co Ltd, Qizhi Software Beijing Co Ltd filed Critical Beijing Qihoo Technology Co Ltd
Priority to CN201610475164.9A priority Critical patent/CN106095689B/zh
Publication of CN106095689A publication Critical patent/CN106095689A/zh
Application granted granted Critical
Publication of CN106095689B publication Critical patent/CN106095689B/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

一种应用内存泄露的检测方法和装置
技术领域
本发明涉及检测的技术领域,特别是涉及一种应用内存泄露的检测方法和一种应用内存泄露的检测装置。
背景技术
内存泄露(memory leak),又称内存泄漏,是指某些对象在生命周期结束的时候没有被回收,仍然占用内存。
内存泄露是应用开发过程中比较常见的问题,严重的泄露会大量消耗内存,对应用本身的体验也会造成极大影响,甚至触发OOM(内存溢出,即内存占用量超过所分配的最大值)等异常行为。
因此,在应用的测试过程中,通常引入内存泄露检测,提高应用的稳定性和用户体验。
在一种内存泄露的检测方法中,通过专用的调试工具,如DDMS(Dalvik DebugMonitor Service,虚拟机调试监控服务)、MAT(Eclipse Memory Analyzer)等,使用DDMS的Heap(堆)检测工具,监控应用进程的Heap信息,通过手动触发内存清理操作,检测进程Heap信息的相应变化,如果Heap的总量有明显的变化,则认为存在内存泄露的可能,然后使用MAT确定导致内存泄露的调用路径。
但是,这种检测方法依赖于测试者的分析经验,手动操作,使得操作相对复杂,而且结果不够直观。
因此,测试者通常使用另外一种检测方法,在被测应用的源代码中集成一个用于检测内存泄露的数据库,如LeakCanary库,在Debug build(调试版本,一般在开发阶段内部使用)的应用中可以自动检测内存泄露。
如果检测到内存泄露,在通知栏提醒并展示导致内存泄露的调用路径。
这种检测方法虽然不需要测试者的手动操作,但是,用于检测内存泄露的数据库与被测应用(即被测试的应用)的耦合性较高,需要在被测应用的源代码中集成,破坏了被测应用的完整性,降低了被测应用的稳定性,因此,这种检测方式只能应用在调试版本的应用中,对于已发布的应用,由于无法将其集成,无法检测内存泄漏,具有较大的局限性。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的一种应用内存泄露的检测方法和相应的一种应用内存泄露的检测装置。
依据本发明的一个方面,提供了一种应用内存泄露的检测方法,包括:
在独立的检测应用中检测启动的目标应用;
获取所述目标应用的上下文信息;
将所述上下文信息输入所述检测应用,以监控所述目标应用的内存泄露。
可选地,所述检测应用注入在进程孵化器中;
所述在独立的检测应用中检测启动的目标应用的步骤包括:
当独立的检测应用获取到所述进程孵化器创建进程的消息时,获取所述进程所属目标应用的包名。
可选地,所述获取所述目标应用的上下文信息的步骤包括:
对预置的应用类或预置的活动类进行挂钩;
从所述应用类或所述活动类中获取所述包名对应的上下文信息。
可选地,所述将所述上下文信息输入所述检测应用,以监控所述目标应用的内存泄露的步骤包括:
将所述目标应用作为监控对象,创建一弱引用对象;
当监控到目标应用的关闭操作时,判断所述弱引用对象是否被清除;若否,则执行内存清理操作;
当所述弱引用对象在执行内存清理操作之后未被清除时,确定内存泄露。
可选地,还包括:
当检测到内存泄露时,在日志中记录所述内存泄露的信息。
可选地,所述在日志中记录所述内存泄露的信息的步骤包括:
计算针对所述目标应用创建的弱引用对象的最短强引用路径,获得导致内存泄露的调用路径;
将导致内存泄露的调用路径写入日志中。
可选地,还包括:
将所述日志上传至数据中心。
根据本发明的另一方面,提供了一种应用内存泄露的检测装置,包括:
目标应用检测模块,用于在独立的检测应用中检测启动的目标应用;
上下文信息获取模块,用于获取所述目标应用的上下文信息;
内存泄露监控模块,用于将所述上下文信息输入所述检测应用,以监控所述目标应用的内存泄露。
可选地,所述检测应用注入在进程孵化器中;
所述目标应用检测模块还用于:
当独立的检测应用获取到所述进程孵化器创建进程的消息时,获取所述进程所属目标应用的包名。
可选地,所述上下文信息获取模块还用于:
对预置的应用类或预置的活动类进行挂钩;
从所述应用类或所述活动类中获取所述包名对应的上下文信息。
可选地,所述内存泄露监控模块还用于:
将所述目标应用作为监控对象,创建一弱引用对象;
当监控到目标应用的关闭操作时,判断所述弱引用对象是否被清除;若否,则执行内存清理操作;
当所述弱引用对象在执行内存清理操作之后未被清除时,确定内存泄露。
可选地,还包括:
日志记录模块,用于在检测到内存泄露时,在日志中记录所述内存泄露的信息。
可选地,所述日志记录模块还用于:
计算针对所述目标应用创建的弱引用对象的最短强引用路径,获得导致内存泄露的调用路径;
将导致内存泄露的调用路径写入日志中。
可选地,还包括:
日志上传模块,用于将所述日志上传至数据中心。
本发明实施例在独立的检测应用中检测启动的目标应用,以获取目标应用的上下文信息,将所述上下文信息输入检测应用,以监控目标应用的内存泄露,在检测应用中集成用于检测内存泄露的数据库,该用于检测内存泄露的数据库经过修改,使得导致内存泄露的调用路径的解析工作可以在独立的检测应用中实现,同时,导致内存泄露的调用路径的展示不需要通过被测应用实现,这样用于检测内存泄露的数据库就无需集成在被测应用的源代码中,避免了破坏被测应用的完整性,提高了被测应用的稳定性,而且,由于可以保证被测应用的完整性,除了可以检测调试版本的应用的内存泄露中,也可以检测已发布的应用的内存泄露,大大提高了检测的通用性,提高了已发布的应用的稳定性,减少内存溢出问题的发生。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的一种应用内存泄露的检测方法实施例的步骤流程图;
图2示出了根据本发明一个实施例的另一种应用内存泄露的检测方法实施例的步骤流程图;
图3示出了根据本发明一个实施例的一种应用内存泄露的检测装置实施例的结构框图;以及
图4示出了根据本发明一个实施例的另一种应用内存泄露的检测装置实施例的结构框图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
参照图1,示出了根据本发明一个实施例的一种应用内存泄露的检测方法实施例的步骤流程图,具体可以包括如下步骤:
步骤101,在独立的检测应用中检测启动的目标应用。
在具体实现中,本发明实施例可以应用在移动设备中,例如,手机、平板电脑、智能手表等等,本发明实施例对此不加以限制。
这些移动设备的操作系统可以包括Android(安卓)、IOS、Windows Phone、等等。
为使本领域技术人员更好地理解本发明实施例,在本说明书中,将Android作为操作系统的一种示例进行说明。
这些操作系统通常可以支持各种系统应用和第三方应用运行,例如,即时通讯工具、邮箱客户端、音乐播放器、支付工具等等。
这些系统应用和第三方应用可以通过应用安装包安装在操作系统中进行内存泄露的检测,例如,在Android系统中,应用安装包为APK(AndroidPackage)文件。
用于检测内存泄露的数据库需要继承在被测应用的源代码中,并在被测应用中预先注册其相关组件,通常存在两处耦合的地方:
1、输入被测应用的上下文信息(Context),用于判断是否存在可疑的导致内存泄露的调用路径;
2、通过被测应用显示导致内存泄露的调用路径。
以LeakCanary为例,LeakCanary为每个创建的Activity(活动)添加一个reference监控,并提供一个唯一的key,当监控到Activity销毁时,执行一次GC(Java垃圾回收机制),然后检查这个Activity对应的reference是否被清理;如果发现存在内存泄露,就生成一个heap dump文件,然后使用HprofParser进行解析,找到对应的Leak trace(导致内存泄露的调用路径),然后以toast(一个View视图,在应用上浮动显示信息)的方式进行提示,点击后可以看到具体的Leak trace。
综上所述,LeakCanary集成在被测应用中,并在被测应用的Manifest.xml文件中预先注册LeakCanary的相关组件,耦合点在于两处:
1、LeakCanary的输入为被测应用的Application或Activity的Context,用于解析Heap prof,并判断是否存在可疑的Leak trace;
2、以toast的方式进行提示。
在本发明实施例中,通过修改用于检测内存泄露的数据库的源代码,把需要预先在被测应用中注册的组件不再与被测应用发生联系,开发一个独立的检测应用,集成修改好的用于检测内存泄露的数据库。
用于检测内存泄露的数据库的源代码的修改一般包括如下两种:
1、修改检测导致内存泄露的调用路径的组件,使得在独立的检测应用中检测导致内存泄露的调用路径;
2、删去通过被测应用显示导致内存泄露的调用路径的组件。
在修改后的数据库中,导致内存泄露的调用路径的解析工作是在独立的检测应用中实现,删去显示导致内存泄露的调用路径的组件,使得导致内存泄露的调用路径的展示不需要通过被测应用实现,这样就无需集成在被测应用的源代码中。
以LeakCanary为例,原LeakCanary预先在被测应用的Mainifest.xml文件中声明HeapAnalyzerService,DisplayLeakService等服务。
其中,HeapAnalyzerService负责检测Leak trace,DisplayLeakService负责展示Leak trace。
因此,在修改LeakCanary时,可以修改HeapAnalyzerService的实现,即在独立的检测应用中检测Leak trace,并且,删去DisplayLeakService。
开发一个独立的检测应用,记为Inject APK,集成修改后的LeakCanary库。
在修改后的LeakCanary,Leak trace的解析工作是在Inject APK中实现,删去DisplayLeakService,使得Leak trace的展示不通过被测应用显示在UI(User Interface,用户界面)中,这样就不需要修改被测应用的Manifest.xml文件,也就无需集成在被测应用的源代码中。
需要说明的是,检测应用的独立性,是相对于被测应用而言的,即检测应用是独立于被测应用之外的应用。
在具体实现中,被测应用作为目标应用,独立的检测应用可以在检测到该目标应用时,启动内存泄露的监控。
在本发明的一个实施例中,检测应用可以注入(inject)在进程孵化器中。
其中,进程孵化器可以用于孕育(fork)应用程序的进程以及系统服务的进程。
例如,在Android系统中,进程孵化器可以为Zygote进程,是一个应用层的程序,当ActivityManagerService启动一个应用的时候,可以通过Socket与Zygote进程进行通信,请求Zygote进程fork一个子进程,作为这个即将要启动的应用的进程。
由于检测应用注入在进程孵化器中的内存空间中,因此,可以在新进程创建时,获取创建的消息。
当独立的检测应用获取到进程孵化器创建进程的消息时,获取进程所属目标应用的包名(Package Name)。
步骤102,获取所述目标应用的上下文信息。
在具体实现中,可以对预置的应用(Application)类或预置的活动(Activity)类进行挂钩Hook。
由于在Android系统中,创建Activity类的实例对象,对象创建完成之后,一般会执行到该类的onCreate方法,因此,可以Hook应用(Application)类或活动(Activity)类的onCreate()方法。
从应用(Application)类或活动(Activity)类中获取包名对应的上下文信息Context,作为检测LeakCanary所需要的输入信息。
步骤103,将所述上下文信息输入所述检测应用,以监控所述目标应用的内存泄露。
在具体实现中,可以将上下文信息(Context)作为修改后的、用于检测内存泄露的数据库(如LeakCanary)的输入,对目标应用的内存泄露进行监控。
在本发明的一个实施例中,步骤103可以包括如下子步骤:
子步骤S11,将目标应用作为监控对象,创建一弱引用对象;
子步骤S12,当监控到目标应用的关闭操作时,判断所述弱引用对象是否被清除;若否,则执行子步骤S13;
子步骤S13,执行内存清理操作;
子步骤S14,当所述弱引用对象在执行内存清理操作之后未被清除时,确定内存泄露。
内存泄露,一般是由于疏忽或错误造成应用未能释放已经不再使用的内存的情况。
内存泄漏并非指内存在物理上的消失,而是应用分配某段内存后,由于设计错误,失去了对该段内存的控制,即便在生命周期结束的时候也没有回收该段内存,仍然占用该段内存。
以LeakCanary的机制为例,LeakCanary可以包括如下组件:
1、ActivityRefWatcher
通过watchActivities方法将全局的Activity生命周期回调接口Application.ActivityLifecycleCallbacks注册到application。
以监控对象创建一个KeyedWeakReference弱引用对象,当Activity的onDestroy方法被调用时进行回调,将弱引用对象传给RefWatcher。
2、RefWatcher
如果弱引用对象未被回收,则触发一次GC(内存清理操作),如果弱引用对象未被回收,则可以确认内存泄露。
本发明实施例在独立的检测应用中检测启动的目标应用,以获取目标应用的上下文信息,将所述上下文信息输入检测应用,以监控目标应用的内存泄露,在检测应用中集成用于检测内存泄露的数据库,该用于检测内存泄露的数据库经过修改,使得导致内存泄露的调用路径的解析工作可以在独立的检测应用中实现,同时,导致内存泄露的调用路径的展示不需要通过被测应用实现,这样用于检测内存泄露的数据库就无需集成在被测应用的源代码中,避免了破坏被测应用的完整性,提高了被测应用的稳定性,而且,由于可以保证被测应用的完整性,除了可以检测调试版本的应用的内存泄露中,也可以检测已发布的应用的内存泄露,大大提高了检测的通用性,提高了已发布的应用的稳定性,减少内存溢出问题的发生。
参照图2,示出了根据本发明一个实施例的另一种应用内存泄露的检测方法实施例的步骤流程图,具体可以包括如下步骤:
步骤201,在独立的检测应用中检测启动的目标应用。
步骤202,获取所述目标应用的上下文信息。
步骤203,将所述上下文信息输入所述检测应用,以监控所述目标应用的内存泄露。
步骤204,当检测到内存泄露时,在日志中记录所述内存泄露的信息。
在具体实现中,若检测到内存泄露,则可以在日志中记录内存泄露的相关信息,以供测试者进行分析。
例如,目标应用的信息(如包名)、导致内存泄露的调用路径、环境信息(如系统版本),等等。
在本发明的一个实施例中,步骤204可以包括如下子步骤:
子步骤S21,计算针对所述目标应用创建的弱引用对象的最短强引用路径,获得导致内存泄露的调用路径;
子步骤S22,将导致内存泄露的调用路径写入日志中。
以LeakCanary的机制为例,LeakCanary一般可以包括如下组件:
1、ActivityRefWatcher
通过watchActivities方法将全局的Activity生命周期回调接口Application.ActivityLifecycleCallbacks注册到application。
以监控对象创建一个KeyedWeakReference弱引用对象,当Activity的onDestroy方法被调用时进行回调,将弱引用对象传给RefWatcher。
2、RefWatcher
如果弱引用对象未被回收,则触发一次GC(内存清理操作),如果弱引用对象未被回收,则将内存dump出成Hprof文件。
3、HeapDump.Listener与ServiceHeapDumpListener
ServiceHeapDumpListener实现了HeapDump.Listener接口,当RefWatcher发现可疑的对象引用之后,ServiceHeapDumpListener将可疑的Hprof文件传递给HeapAnalyzerService。
4、HeapAnalyzerService
分析对象引用,计算该引用到GC root的最短强引用路径,就是Leak trace。
步骤205,将所述日志上传至数据中心。
在本发明实施例中,可以以打点信息的方式把日志上传到数据中心(即服务器),以便通过web(网页)的方式进行浏览。
当然,除了将日志上传至数据中心,也可以通过其他方式进行显示,例如,导出到电脑进行显示,等等,本发明实施例对此不加以限制。
对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
参照图3,示出了根据本发明一个实施例的一种应用内存泄露的检测装置实施例的结构框图,具体可以包括如下模块:
目标应用检测模块301,用于在独立的检测应用中检测启动的目标应用;
上下文信息获取模块302,用于获取所述目标应用的上下文信息;
内存泄露监控模块303,用于将所述上下文信息输入所述检测应用,以监控所述目标应用的内存泄露。
在本发明的一个实施例中,所述检测应用注入在进程孵化器中;
所述目标应用检测模块301还可以用于:
当独立的检测应用获取到所述进程孵化器创建进程的消息时,获取所述进程所属目标应用的包名。
在本发明的一个实施例中,所述上下文信息获取模块302还可以用于:
对预置的应用类或预置的活动类进行挂钩;
从所述应用类或所述活动类中获取所述包名对应的上下文信息。
在本发明的一个实施例中,所述内存泄露监控模块303还可以用于:
将所述目标应用作为监控对象,创建一弱引用对象;
当监控到目标应用的关闭操作时,判断所述弱引用对象是否被清除;若否,则执行内存清理操作;
当所述弱引用对象在执行内存清理操作之后未被清除时,确定内存泄露。
参照图4,示出了根据本发明一个实施例的另一种应用内存泄露的检测装置实施例的结构框图,具体可以包括如下模块:
目标应用检测模块401,用于在独立的检测应用中检测启动的目标应用。
上下文信息获取模块402,用于获取所述目标应用的上下文信息。
内存泄露监控模块403,用于将所述上下文信息输入所述检测应用,以监控所述目标应用的内存泄露。
日志记录模块404,用于在检测到内存泄露时,在日志中记录所述内存泄露的信息。
日志上传模块405,用于将所述日志上传至数据中心。
在本发明的一个实施例中,所述日志记录模块404还可以用于:
计算针对所述目标应用创建的弱引用对象的最短强引用路径,获得导致内存泄露的调用路径;
将导致内存泄露的调用路径写入日志中。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的应用内存泄露的检测设备中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

Claims (10)

1.一种应用内存泄露的检测方法,包括:
在独立的检测应用中检测启动的目标应用;
获取所述目标应用的上下文信息;
将所述上下文信息输入所述检测应用,以监控所述目标应用的内存泄露;
其中,所述检测应用注入在进程孵化器中;
所述在独立的检测应用中检测启动的目标应用的步骤包括:
当独立的检测应用获取到所述进程孵化器创建进程的消息时,获取所述进程所属目标应用的包名;
其中,所述获取所述目标应用的上下文信息的步骤包括:
对预置的应用类或预置的活动类进行挂钩;
从所述应用类或所述活动类中获取所述包名对应的上下文信息。
2.如权利要求1所述的方法,其特征在于,所述将所述上下文信息输入所述检测应用,以监控所述目标应用的内存泄露的步骤包括:
将所述目标应用作为监控对象,创建一弱引用对象;
当监控到目标应用的关闭操作时,判断所述弱引用对象是否被清除;若否,则执行内存清理操作;
当所述弱引用对象在执行内存清理操作之后未被清除时,确定内存泄露。
3.如权利要求1或2所述的方法,其特征在于,还包括:
当检测到内存泄露时,在日志中记录所述内存泄露的信息。
4.如权利要求3所述的方法,其特征在于,所述在日志中记录所述内存泄露的信息的步骤包括:
计算针对所述目标应用创建的弱引用对象的最短强引用路径,获得导致内存泄露的调用路径;
将导致内存泄露的调用路径写入日志中。
5.如权利要求3所述的方法,其特征在于,还包括:
将所述日志上传至数据中心。
6.一种应用内存泄露的检测装置,包括:
目标应用检测模块,用于在独立的检测应用中检测启动的目标应用;
上下文信息获取模块,用于获取所述目标应用的上下文信息;
内存泄露监控模块,用于将所述上下文信息输入所述检测应用,以监控所述目标应用的内存泄露;
其中,所述检测应用注入在进程孵化器中;
所述目标应用检测模块还用于:
当独立的检测应用获取到所述进程孵化器创建进程的消息时,获取所述进程所属目标应用的包名;
其中,所述上下文信息获取模块还用于:
对预置的应用类或预置的活动类进行挂钩;
从所述应用类或所述活动类中获取所述包名对应的上下文信息。
7.如权利要求6所述的装置,其特征在于,所述内存泄露监控模块还用于:
将所述目标应用作为监控对象,创建一弱引用对象;
当监控到目标应用的关闭操作时,判断所述弱引用对象是否被清除;若否,则执行内存清理操作;
当所述弱引用对象在执行内存清理操作之后未被清除时,确定内存泄露。
8.如权利要求6或7所述的装置,其特征在于,还包括:
日志记录模块,用于在检测到内存泄露时,在日志中记录所述内存泄露的信息。
9.如权利要求8所述的装置,其特征在于,所述日志记录模块还用于:
计算针对所述目标应用创建的弱引用对象的最短强引用路径,获得导致内存泄露的调用路径;
将导致内存泄露的调用路径写入日志中。
10.如权利要求8所述的装置,其特征在于,还包括:
日志上传模块,用于将所述日志上传至数据中心。
CN201610475164.9A 2016-06-24 2016-06-24 一种应用内存泄露的检测方法和装置 Active CN106095689B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610475164.9A CN106095689B (zh) 2016-06-24 2016-06-24 一种应用内存泄露的检测方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610475164.9A CN106095689B (zh) 2016-06-24 2016-06-24 一种应用内存泄露的检测方法和装置

Publications (2)

Publication Number Publication Date
CN106095689A CN106095689A (zh) 2016-11-09
CN106095689B true CN106095689B (zh) 2019-02-12

Family

ID=57252787

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610475164.9A Active CN106095689B (zh) 2016-06-24 2016-06-24 一种应用内存泄露的检测方法和装置

Country Status (1)

Country Link
CN (1) CN106095689B (zh)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108073439A (zh) * 2016-11-11 2018-05-25 深圳业拓讯通信科技有限公司 一种jvm内存泄露自动检测方法以及系统
CN106649105B (zh) * 2016-12-08 2019-06-04 武汉斗鱼网络科技有限公司 一种内存泄漏的检测方法和装置
CN108241560B (zh) * 2016-12-26 2021-07-23 北京金山安全软件有限公司 内存测试方法、装置及电子设备
CN106844159A (zh) * 2017-02-03 2017-06-13 广东欧珀移动通信有限公司 一种信息获取方法、装置及智能终端
CN106886413A (zh) * 2017-02-21 2017-06-23 腾讯科技(深圳)有限公司 一种界面元素Activity的处理方法以及终端
CN107220537B (zh) * 2017-05-25 2021-02-23 南京大学 一种程序内存布局信息泄露行为的检测方法
CN114048051A (zh) 2017-07-25 2022-02-15 华为技术有限公司 检测方法、设备及计算机可读存储介质
CN107590013B (zh) * 2017-09-05 2020-12-04 南京大学 一种检测Android应用Service构件泄露的高效方法
CN108536613B (zh) * 2018-03-08 2022-09-16 创新先进技术有限公司 数据清理方法、装置、及服务器
CN109445913B (zh) * 2018-10-22 2020-07-03 北京宝兰德软件股份有限公司 资源对象泄漏检测方法及装置
CN110502891B (zh) * 2019-08-08 2021-06-15 北京字节跳动网络技术有限公司 一种获取进程内存泄露的方法、装置、介质和电子设备
CN110674050B (zh) * 2019-10-08 2022-04-19 腾讯科技(深圳)有限公司 内存越界检测方法、装置、电子设备及计算机存储介质
CN113760711A (zh) * 2020-09-30 2021-12-07 北京沃东天骏信息技术有限公司 内存泄漏检测方法和装置

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB0515405D0 (en) * 2005-07-27 2005-08-31 Ibm Memory leak detection
CN101615143B (zh) * 2008-06-27 2013-04-17 国际商业机器公司 用于内存泄漏诊断的方法和装置
CN101414272B (zh) * 2008-10-17 2011-06-08 上海华为技术有限公司 内存泄漏的检测方法和装置
CN102722432B (zh) * 2011-03-29 2016-02-24 国际商业机器公司 追踪内存访问的方法和装置
US9575876B2 (en) * 2014-06-13 2017-02-21 International Business Machines Corporation Performance testing of software applications
CN105302714B (zh) * 2014-07-24 2019-02-05 腾讯科技(深圳)有限公司 一种测试过程中内存泄漏的监控方法和装置
CN105630662B (zh) * 2014-10-28 2019-07-19 腾讯科技(深圳)有限公司 内存检测方法和装置
CN104866409A (zh) * 2015-05-29 2015-08-26 小米科技有限责任公司 内存泄露监控方法和装置
CN105373479B (zh) * 2015-12-14 2019-03-15 厦门美图移动科技有限公司 一种内存泄露的自动化测试方法、装置及移动终端
CN105700968A (zh) * 2016-01-11 2016-06-22 厦门雅迅网络股份有限公司 一种嵌入式系统中内存泄漏诊断处理的方法和装置

Also Published As

Publication number Publication date
CN106095689A (zh) 2016-11-09

Similar Documents

Publication Publication Date Title
CN106095689B (zh) 一种应用内存泄露的检测方法和装置
US10824521B2 (en) Generating predictive diagnostics via package update manager
US9389849B2 (en) Test case pattern matching
US9645913B2 (en) Method and apparatus for debugging programs
Xu et al. POD-Diagnosis: Error diagnosis of sporadic operations on cloud applications
US20170010889A1 (en) Continuous integration with reusable context aware jobs
US8381036B2 (en) Systems and methods for restoring machine state history related to detected faults in package update process
US20120266248A1 (en) Pinpointing security vulnerabilities in computer software applications
US9292413B2 (en) Setting breakpoints in a code debugger used with a GUI object
US20070203973A1 (en) Fuzzing Requests And Responses Using A Proxy
US9239773B1 (en) Method and system for debugging a program that includes declarative code and procedural code
US8745447B2 (en) System and method for analyzing an electronics device including a logic analyzer
US9003390B2 (en) Automatic self-test method for medical devices
CN108628739A (zh) 一种对Lua脚本进行调试的方法、客户端、服务器及调试器
CN106919431B (zh) 持续集成中的代码比对方法、设备以及系统
US9870306B2 (en) Exception prediction before an actual exception during debugging
JP2009237654A (ja) テストプログラム管理システム
US20130073526A1 (en) Log message optimization to ignore or identify redundant log messages
CN110601879B (zh) Zabbix告警过程信息的形成方法、装置及存储介质
US20160275002A1 (en) Image capture in application lifecycle management for documentation and support
CN106897622A (zh) 验证应用漏洞的方法和装置
Huang et al. ORTS: a tool for optimized regression testing selection
Nilsson Implementation of a Continuous Integration and Continuous Delivery System for Cross-Platform Mobile Application Development
CN104331307B (zh) 一种卸载预装应用的方法和系统
CN111611153B (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
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20220721

Address after: 300450 No. 9-3-401, No. 39, Gaoxin 6th Road, Binhai Science Park, Binhai New Area, Tianjin

Patentee after: 3600 Technology Group Co.,Ltd.

Address before: 100088 room 112, block D, 28 new street, new street, Xicheng District, Beijing (Desheng Park)

Patentee before: BEIJING QIHOO TECHNOLOGY Co.,Ltd.

Patentee before: Qizhi software (Beijing) Co.,Ltd.

TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20230713

Address after: 1765, floor 17, floor 15, building 3, No. 10 Jiuxianqiao Road, Chaoyang District, Beijing 100015

Patentee after: Beijing Hongxiang Technical Service Co.,Ltd.

Address before: 300450 No. 9-3-401, No. 39, Gaoxin 6th Road, Binhai Science Park, Binhai New Area, Tianjin

Patentee before: 3600 Technology Group Co.,Ltd.

CP03 Change of name, title or address
CP03 Change of name, title or address

Address after: 1765, floor 17, floor 15, building 3, No. 10 Jiuxianqiao Road, Chaoyang District, Beijing 100015

Patentee after: Beijing 360 Zhiling Technology Co.,Ltd.

Country or region after: China

Address before: 1765, floor 17, floor 15, building 3, No. 10 Jiuxianqiao Road, Chaoyang District, Beijing 100015

Patentee before: Beijing Hongxiang Technical Service Co.,Ltd.

Country or region before: China