CN111897726B - 异常定位方法、装置、存储介质及移动终端 - Google Patents
异常定位方法、装置、存储介质及移动终端 Download PDFInfo
- Publication number
- CN111897726B CN111897726B CN202010733473.8A CN202010733473A CN111897726B CN 111897726 B CN111897726 B CN 111897726B CN 202010733473 A CN202010733473 A CN 202010733473A CN 111897726 B CN111897726 B CN 111897726B
- Authority
- CN
- China
- Prior art keywords
- information
- binder
- binder object
- abnormality
- preset
- 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
Links
- 230000005856 abnormality Effects 0.000 title claims abstract description 101
- 238000000034 method Methods 0.000 title claims abstract description 81
- 239000011230 binding agent Substances 0.000 claims abstract description 326
- 230000006378 damage Effects 0.000 claims abstract description 80
- 230000002159 abnormal effect Effects 0.000 claims abstract description 35
- 230000006870 function Effects 0.000 claims description 63
- 238000001914 filtration Methods 0.000 claims description 7
- 230000004807 localization Effects 0.000 claims description 5
- 238000004891 communication Methods 0.000 description 14
- 238000010586 diagram Methods 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 7
- 230000009286 beneficial effect Effects 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 4
- 238000001514 detection method Methods 0.000 description 4
- 238000010295 mobile communication Methods 0.000 description 4
- 238000009933 burial Methods 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 230000001133 acceleration Effects 0.000 description 2
- 230000005484 gravity Effects 0.000 description 2
- 238000012544 monitoring process Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000002688 persistence Effects 0.000 description 2
- 230000005236 sound signal Effects 0.000 description 2
- 230000001413 cellular effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000007599 discharging Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000010897 surface acoustic wave method Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3644—Software debugging by instrumenting at runtime
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3612—Software analysis for verifying properties of programs by runtime analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/544—Remote
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Software Systems (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
本申请公开了一种异常定位方法、装置、存储介质及移动终端,该方法应用于移动终端中,包括:当运行应用程序时,执行预设埋点数据,该预设埋点数据用来记录Binder对象的创建信息、销毁信息和Binder对象的调用堆栈信息,并根据所记录的创建信息、销毁信息和Binder对象的调用堆栈信息来确定目标应用程序产生异常的目标Binder对象,以及确定所述目标Binder对象产生异常的异常位置。本申请实施例能大大减少确定应用程序产生异常的目标Binder对象的时间,以及定位产生目标Binder对象异常的异常位置的时间,提高解决应用程序Binder对象异常问题(Binder对象泄露问题)的效率。
Description
技术领域
本申请涉及通信技术领域,尤其涉及一种异常定位方法、装置、存储介质及移动终端。
背景技术
Binder通信是Android移动终端系统中最重要最广泛的跨进程通信方式,通常通过Binder SDK(Software Development Kit,软件开发工具包)来实现Binder通信的功能。若开发人员在开发应用程序的过程中未合理的使用Binder SDK,如未使用Binder SDK来将应用程序开发过程中创建的Binder对象释放/销毁,则会导致创建的Binder对象泄露。大量的Binder对象泄露,会造成应用程序的异常退出、系统卡顿,甚至是移动终端重启等。
通常情况下,解决应用程序Binder对象泄露问题的人员和开发应用程序的开发人员并不是同一人,由于对该应用程序的代码不熟悉,无法快速的定位导致Binder对象泄露的代码段,大大增加了解决应用程序Binder对象泄露问题的时间,降低了解决应用程序Binder对象泄露问题的效率。
发明内容
本申请实施例提供一种异常定位方法、装置、存储介质及移动终端,能提高解决应用程序Binder对象异常问题的效率。
本申请实施例提供了一种异常定位方法,包括:
当运行应用程序时,执行预设埋点数据,该预设埋点数据用于记录Binder对象的创建信息、销毁信息和Binder对象的调用堆栈信息;
根据所记录的Binder对象的创建信息、销毁信息和Binder对象的调用堆栈信息,确定应用程序产生异常的目标Binder对象,以及确定目标Binder对象产生异常的异常位置。
本申请实施例还提供了一种异常定位装置,包括:
执行单元,用于当运行应用程序时,执行预设埋点数据,该预设埋点数据用于记录Binder对象的创建信息、销毁信息和Binder对象的调用堆栈信息;
定位单元,用于根据所记录的Binder对象的创建信息、销毁信息和Binder对象的调用堆栈信息,确定应用程序产生异常的目标Binder对象,以及确定目标Binder对象产生异常的异常位置。
本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有多条指令,所述指令适于由处理器加载以执行上述任一项异常定位方法。
本申请实施例还提供了一种移动终端,包括处理器和存储器,所述处理器与所述存储器电性连接,所述存储器用于存储指令和数据,所述处理器用于上述任一项所述的异常定位方法中的步骤。
本申请提供的异常定位方法、装置、存储介质及移动终端,通过执行预设埋点数据来记录Binder对象的创建信息、销毁信息和Binder对象的调用堆栈信息,并根据所记录的创建信息、销毁信息和Binder对象的调用堆栈信息来确定目标应用程序产生异常的目标Binder对象,以及确定所述目标Binder对象产生异常的异常位置。可以理解地,根据记录的Binder对象的创建信息和销毁信息,能快速确定应用程序产生异常的目标Binder对象,根据调用堆栈信息能快速定位目标Binder对象产生异常的异常位置。如此,大大减少确定应用程序产生异常的目标Binder对象的时间,以及定位产生目标Binder对象异常的异常位置的时间,提高解决应用程序Binder对象异常问题(Binder对象泄露问题)的效率。
附图说明
下面结合附图,通过对本申请的具体实施方式详细描述,将使本申请的技术方案及其它有益效果显而易见。
图1为本申请实施例提供的异常定位方法的流程示意图。
图2为本申请实施例提供的异常定位方法的子流程示意图。
图3为本申请实施例提供的异常定位方法的另一流程示意图。
图4为本申请实施例提供的异常定位方法的另一子流程示意图。
图5为本申请实施例提供的异常定位方法的另一子流程示意图。
图6为本申请实施例提供的在预设位置处增加Native层的BBinder对象对应的预设埋点数据的示意图。
图7为本申请实施例提供的在预设位置处增加Java层的Binder对象对应的预设埋点数据的另一示意图。
图8为本申请实施例提供的三个系统属性参数的属性值示意图;
图9为本申请实施例提供的异常定位装置的结构示意图。
图10为本申请实施例提供的移动终端的结构示意图。
图11为本申请实施例提供的移动终端的另一结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
应当理解,术语第一、第二等可以在此用来描述各种元素,但这些元素不应该受限于这些术语。这些术语仅用来将这些元素彼此区分开。例如,在不脱离本申请范围的前提下,第一参数可以被称为第二参数,并且类似地,第二参数可以被称为第一参数。第一参数和第二参数均为参数,但它们并非同一参数。
本申请实施例提供一种异常定位方法、装置、存储介质及移动终端。本申请实施例提供的任一种异常定位装置,可以集成在移动终端中,该移动终端包括智能手机、Pad、穿戴式设备、机器人等设备。优选的,该移动终端所使用的终端系统是安卓系统。
以下将以移动终端的角度来描述对应的异常定位方法、装置、存储介质以及移动终端。
请参阅图1,图1是本申请实施例提供的异常定位方法的流程示意图,该异常定位方法应用于移动终端中。该异常定位方法包括以下步骤:
101,当运行应用程序时,执行预设埋点数据,该预设埋点数据用于记录Binder对象的创建信息、销毁信息和Binder对象的调用堆栈信息。
在移动终端的终端系统内部,如安卓系统内部,那些支撑应用程序的组件往往会身处于不同的进程,那么应用程序的底层必然会牵涉大量的跨进程通信。为了保证通信的高效性,安卓系统提供了Binder机制。通过Binder机制实现跨进程通信或者实现远程过程调用。需要注意的是,Binder机制是跨进程通信的方式之一。Binder机制通过Binder对象来实现进程间的访问。
Binder对象包括两类:Native层的BBinder对象和Java层的Binder对象。安卓系统在Native层实现了进程间的Binder通信,对应的是Native层的BBinder对象;但是上层应用程序的开发及框架的实现都是使用Java,在Java层再实现一次肯定是不合理的,因此就引入了Java层的Binder对象。其中,Native层也可以理解为本地,或者底层。
在本申请实施例中,Binder对象可以仅仅是Native层的BBinder对象,则预设埋点数据对应的是Native层的BBinder对象所对应的埋点数据;也可以仅仅是Java层的Binder对象,则预设埋点数据对应的是Java层的Binder对象所对应的埋点数据;或者既包括Native层的BBinder对象,又包括Java层的Binder对象,则预设埋点数据包括Native层的BBinder对象所对应的预设埋点数据和/或Java层的Binder对象所对应的预设埋点数据。
预设埋点数据既可以埋点在应用程序所在的终端系统对应的软件开发工具包的源码中,也可以埋点在应用程序的源码中。
若预设埋点数据埋点在应用程序所在的终端系统对应的软件开发工具包的源码中,可以理解为,之后无需修改应用程序的源码,同时方便为每种类型中的所有Binder对象都设置埋点。其中,若终端系统为安卓系统,则软件开发工具包指的是Android FWK SDK,即在Android FWK SDK的源码中设置预设埋点数据。因为安卓系统中所有应用程序都是基于Zygote进程孵化出来的,因此,在Android FWK SDK中设置预设埋点数据,再根据AndroidFWK SDK的源码生成Zygote进程,再由Zygote进程得到应用程序。如此就可以在不修改应用程序源码的情况下,追踪每种类型中的所有Binder对象的相关信息,如所有Binder对象的创建信息、销毁信息和Binder对象的调用堆栈信息等。
若预设埋点数据埋点在应用程序的源码中,则可以具体到某个需要追踪的Binder对象,以来跟踪该具体Binder对象的相关信息。即若预设埋点数据埋点在应用程序的源码中,则更适合于无需跟踪每种类型中的所有Binder对象的相关信息,而只需要跟踪某一个或者多个具体Binder对象的相关信息的情况下。
预设埋点数据用于记录Binder对象的创建信息、销毁信息和Binder对象的调用堆栈信息。其中,调用堆栈是解析器的一种机制,可以在脚本调用多个函数时,跟踪每个函数在完成执行时应该返回控制的点,如当前在执行什么函数,什么函数被什么函数调用,接下来调用哪一个函数等。当脚本要调用一个函数时,解析器把该函数添加到栈中并且执行这个函数;任何被这个函数调用的函数会进一步添加到调用栈中,并且运行到它们被上个程序调用的位置;当函数运行结束后,解释器将它从堆栈中取出,并在主代码列表中继续执行代码。Binder对象的调用堆栈信息中记录了Binder对象执行的所有具体过程,如包括传递到Binder内核驱动中生成Binder Node实体等过程。
预设埋点数据可以是每次应用程序运行时都执行;也可以设置动态开关,通过控制所设置的动态开关来确定预设埋点数据是否执行。如若预先将所设置的动态开关打开,则应用程序运行时,执行预设埋点数据,若预先将所设置的动态开关关闭,则应用程序运行时,不执行预设埋点数据。
其中,动态开关可通过设置参数来实现。可设置三个参数:第一参数、第二参数、第三参数。第一参数用于表示是否开启执行预设埋点数据的执行功能;由于Binder对象的类型有两种,因此第二参数和第三参数用于表示需异常定位的Binder对象的类型,以及异常定位的应用程序。如第二参数用于表示需要记录的Native层的BBinder对象的创建信息、销毁信息、调用堆栈信息的应用程序进程标识,如进程编号或进程名称等;第三参数用于表示需要记录的Java层的Binder对象的创建信息、销毁信息、调用堆栈信息的应用程序进程标识。第一参数对应有两个参数值:是和否;是表示开启执行预设埋点数据的执行功能;否表示关闭执行预设埋点数据的执行功能。如用yes表示是,用no表示否;用1表示是,用0表示否;不为空表示是,为空表示否等,具体不做限定。对于第二参数和第三参数,如不为空(还可以是其他设定的情况,在此不再例举),则表示需要执行对应的预设埋点数据以记录对应Binder对象的创建信息、销毁信息、调用堆栈信息,若为空,则表示不执行对应的预设埋点数据,不记录对应Binder对象的创建信息、销毁信息、调用堆栈信息。其中,第二参数和第三参数中的应用程序进程标识可以相同,也可以不相同。
在该种情况下,若设置第一参数为开启执行预设埋点数据的执行功能,且设置需异常定位的应用程序,以及需异常定位的Binder对象的类型,如设置第二参数和第三参数中至少有一个不为空,则表示动态开关为开。否则,若设置第一参数为关闭执行预设埋点数据的执行功能;或者设置第一参数为执行开启预设埋点数据的执行功能,而不设置需异常定位的应用程序、需异常定位的Binder对象的类型,即第二参数和第三参数都为空,则表示动态开关为关。
需要注意的是,动态开关也可以设置其他数量的参数来实现,如五个参数,分别为第一参数、第四参数、第五参数、第六参数、第七参数。第一参数用于表示是否开启执行预设埋点数据的执行功能;由于Binder对象的类型有两种,因此第四参数可用于表示是否开启需异常定位的Native层的BBinder对象的记录功能,第五参数可用于表示需异常定位的Native层的BBinder对象的应用程序标识,第六参数可用于表示是否开启需异常定位的Java层的Binder对象的记录功能,第七参数可用于表示需异常定位的Java层的Binder对象的应用程序标识。
在该种情况下,若设置第一参数为开启执行预设埋点数据的执行功能,且设置需异常定位的应用程序,以及需异常定位的Binder对象的类型,如第四参数、第六参数中至少有一个为开启状态,对应的开启状态对应的第五参数或者第六参数中的应用程序标识不为空,则表示动态开关为开。
需要注意的是,以上设置的动态开关只是示例说明,以方便理解本申请实施例中的具体方案。
102,根据所记录的Binder对象的创建信息、销毁信息和Binder对象的调用堆栈信息,确定应用程序产生异常的目标Binder对象,以及确定目标Binder对象产生异常的异常位置。
在一些情况下,将所记录的Binder对象的创建信息、销毁信息和Binder对象的调用堆栈信息,输出至记录日志中;根据记录日志中所记录的Binder对象的创建信息、销毁信息和Binder对象的调用堆栈信息,确定应用程序产生异常的目标Binder对象,以及确定目标Binder对象产生异常的异常位置。
具体地,如图2所示,步骤102,包括步骤1021~1024。
1021,确定所记录的创建信息和销毁信息中的Binder对象相同的中间Binder对象。
在所记录的创建信息中包括所创建的Binder对象信息,在所记录的销毁信息中包括所销毁的Binder对象信息,若所创建的Binder对象信息和所销毁的Binder对象信息相同,则将所创建的Binder对象信息和所销毁的Binder对象信息相同的Binder对象作为中间Binder对象。
1022,过滤中间Binder对象所对应的创建信息、销毁信息和调用堆栈信息。
将中间Binder对象所对应的相关信息,如创建信息、销毁信息和调用堆栈信息过滤。可以理解地,中间Binder对象为所创建的Binder对象信息和所销毁的Binder对象信息相同的Binder对象,意味着Binder对象创建之后,又进行了销毁,这种的Binder对象不会出现异常,如Binder对象泄漏的问题。因此,将所创建的Binder对象信息和所销毁的Binder对象信息相同的Binder对象,即中间Binder对象过滤,以提高定位异常的速度和降低定位异常的时间。
1023,在所记录的剩余信息中,统计相同调用堆栈信息出现的数量。
所记录的剩余信息,即将中间Binder对象所对应的创建信息、销毁信息和调用堆栈信息过滤之后的信息。相同调用堆栈信息指的是调用堆栈名称、调用堆栈信息中的函数、调用堆栈信息包括多少行等都完全相同,即一模一样的调用堆栈信息。在剩余信息中,统计相同调用堆栈信息出现的数量。
1024,根据数量确定应用程序产生异常的目标Binder对象,以及定位目标Binder对象产生异常的异常位置。
如可将相同调用堆栈信息出现的数量最高的Binder对象作为目标Binder对象,或者数量排名靠前的多个Binder对象作为目标Binder对象,并根据目标Binder对象对应的调用堆栈信息定位目标Binder对象产生异常的异常位置。
具体地,步骤1024,包括:将数量靠前的预设个数的调用堆栈信息所对应的Binder对象作为应用程序产生异常的目标Binder对象;根据目标Binder对象对应的调用堆栈信息将创建目标Binder对象的代码段所在的位置确定为目标Binder对应产生异常的异常位置。
其中,预设个数可以按照需求设置,如设置为3、5、10等正整数。将数量靠前的预设个数的调用堆栈信息所对应的Binder对象作为应用程序产生异常的目标Binder对象,可以理解地,若Binder对象产生异常,如Binder对象泄露,则可能每次运行到同样的地方就停止运行或者异常提示等。如微信应用程序,打开朋友圈的功能出现Binder对象泄露,则每次打开朋友圈时异常提示。如此,若出现Bdiner对象泄露,则每次运行应用程序时,对应的调用堆栈信息都相同。若相同调用堆栈信息的数量越多,则意味着应用程序出现Binder对象异常的可能性就越大,因此将相同调用堆栈信息数量靠前的预设个数的调用堆栈信息所对应的Binder对象作为应用程序产生异常的目标Binder对象。确定目标Binder对象后,根据所记录的该目标Binder对象所对应的调用堆栈信息,确定创建目标Binder对象的代码段(如创建目标Binder对象的函数等)所在的位置,将创建目标Binder对象的代码段所在的位置确定为目标Binder对应产生异常的异常位置,如发生Binder对象泄露的泄露位置。
定位出了目标Binder对象产生异常的异常位置后,可以对该异常位置进行标记,和/或将异常位置打印出来。
该确定应用程序产生异常的目标Binder对象,以及定位目标Binder对象产生异常的异常位置的过程,即步骤102实施的过程,是自动进行的,自动确定应用程序产生异常的目标Binder对象以及异常位置,提高定位Binder对象异常的速度和效率,降低定位Binder对象异常的时间。
本申请实施例根据所记录的Binder对象的创建信息和销毁信息,能快速确定应用程序产生异常的目标Binder对象,根据调用堆栈信息能快速定位目标Binder对象产生异常的异常位置。如此,大大减少确定应用程序产生异常的目标Binder对象的时间,以及定位产生目标Binder对象异常的异常位置的时间,提高解决应用程序Binder对象异常问题(Binder对象泄露问题)的效率。
以下以在应用程序所在的终端系统对应的软件开发工具包的源码中设置预设埋点数据为例进行详细说明,具体请参看图3。
图3是本申请实施例提供的异常定位方法的流程示意图,其应用于移动终端中,该异常定位方法包括如下步骤:
201,在应用程序所在的终端系统对应的软件开发工具包的源码中设置预设埋点数据。
若终端系统为安卓系统,则终端系统对应的软件开发工具包为Android FWK SDK,即在Android FWK SDK的源码中设置预设埋点数据。
对应地,如图4所示,步骤201包括2011~2013。
2011,获取预设的Binder对象的类型。
Binder对象的类型包括两类,即预设的Binder对象的类型包括:Native层的BBinder对象和Java层的Binder对象。
2012,在应用程序所在的终端系统对应的软件开发工具包中,确定与类型匹配的源码。
可以理解地,Binder对象的类型不同,与类型匹配的源码也不相同。如对于Native层的BBinder对象来说,与类型匹配的源码包括Parcel.cpp、Binder.cpp等;对于Java层的Binder对象来说,与类型匹配的源码为Parcel.java、Binder.java等。需要注意的是,Binder.cpp、Binder.java中对应包括销毁对应Binder对象的源码,销毁对应Binder对象的源码,也可能在其他的文件中,具体不做限定。
2013,在源码中的预设位置处,增加预设埋点数据。
在对应的源码的预设位置处,增加预设埋点数据。其中,对于Native层的BBinder对象来说,在Parcel.cpp、Binder.cpp中的预设位置处,增加Native层的BBinder对象对应的预设埋点数据;对于Java层的Binder对象来说,在Parcel.java、Binder.java中的预设位置处,增加Java层的Binder对象对应的预设埋点数据。
图4所示的方案,根据不同类型的Binder对象,确定与类型匹配的源码,并在对应源码的预设位置处,增加预设埋点数据。
如图5所示,步骤2013,包括:2013a-2013c。其中,
2013a,在源码中的Binder对象预设的创建位置处,增加记录Binder对象创建信息的创建埋点数据,以及记录Binder对象的调用堆栈信息的堆栈埋点数据。
对于Native层的BBinder对象来说,创建BBinder对象的源码在Parcel.cpp中,BBinder对象预设的创建位置处包括Parcel.cpp中的writeStrongBinder函数。即在Parcel.cpp中的writeStrongBinder函数中,增加记录BBinder对象创建信息的创建埋点数据,以及记录BBinder对象的调用堆栈信息的堆栈埋点数据。其中,记录BBinder对象创建信息的创建埋点数据,可以是记录所创建的BBinder对象的指针地址;记录BBinder对象的调用堆栈信息的堆栈埋点数据可以是利用CallStack方法函数来记录调用堆栈信息。如图6所示,在Parcel.cpp的writeStrongBinder函数记录所创建的BBinder对象的指针地址,以及记录BBinder对象的调用堆栈信息。
对于Java层的Binder对象来说,创建Java层的Binder对象的源码在Parcel.java中,Java层的Binder对象预设的创建位置处包括Parcel.java中的writeStrongBinder函数。即在Parcel.java中的writeStrongBinder函数中,增加记录Java层的Binder对象创建信息的创建埋点数据,以及记录Java层的Binder对象的调用堆栈信息的堆栈埋点数据。其中,记录Java层的Binder对象创建信息的创建埋点数据,可以是记录所创建的Java层的Binder对象的哈希值(hash值);记录Java层的Binder对象的调用堆栈信息的堆栈埋点数据,可以是利用Exception方法函数来记录调用调用堆栈信息。如图7所示,在Parcel.java的writeStrongBinder函数记录所创建的Binder对象的hash值,以及记录调用堆栈信息。
2013b,在源码中的Binder对象预设的销毁位置处,增加记录Binder对象销毁信息的销毁埋点数据。
对于Native层的BBinder对象来说,销毁BBinder对象的源码在Binder.cpp中,BBinder对象预设的销毁位置处包括Binder.cpp中的BBinder对象的析构函数(~BBinder)中。即在Binder.cpp中的析构函数中,增加记录BBinder对象销毁信息的销毁埋点数据。其中,记录BBinder对象销毁信息的销毁埋点数据,可以是记录所销毁的BBinder对象的指针地址,如记录this所对应的指针地址。如图6所示,在Binder.cpp的BBinder对象的析构函数中记录所销毁的BBinder对象的指针地址。
对于Java层的Binder对象来说,销毁Java层的Binder对象的源码在Binder.java中,Java层的Binder对象预设的销毁位置处包括Binder.java中的finalize函数。即在Binder.java中的finalize函数,增加记录Java层的Binder对象销毁信息的销毁埋点数据。其中,记录Java层的Binder对象销毁信息的销毁埋点数据,可以是记录所创建的Java层的Binder对象的hash值。如图7所示,在Binder.java的finalize函数记录所销毁的对应的Binder对象的hash值。
需要注意的是,步骤2013a和步骤2013b的执行顺序不做限定,也可以是先执行步骤2013b,再执行步骤2013a。
2013c,将创建埋点数据、堆栈埋点数据和销毁埋点数据作为预设埋点数据。
上述步骤2013a~2013c具体说明了如何记录Native层的BBinder对象以及Java层的Binder对象的创建信息、销毁信息和对应的调用堆栈信息的过程。
202,开启执行预设埋点数据的执行功能,设置需异常定位的应用程序,以及确定需异常定位的Binder对象的类型。
预先设置三个系统属性的参数,作为动态开关。分别为:
persist.sys.logbinder.enable,该参数表示是否开启执行预设埋点数据的执行功能,或者也可以理解为记录Binder对象的创建信息、销毁信息和Binder对象的调用堆栈信息是否生效。该参数的属性值有两个:是和否;是表示生效,否表示不生效,具体属性值可参看上文中的描述。可设置默认不生效,如设置该参数属性值为空,以避免在日常使用中对用户产生性能影响。另外,若设置该参数的属性值为是,即生效,优选地,需要重启移动终端以生效。
debug.native.logbinder.pid,该参数表示需要记录的Native层的BBinder对象的创建信息、销毁信息、调用堆栈信息的应用程序进程PID。即设置需要异常定位的Binder对象的类型为Native层的BBinder对象,需异常定位的应用程序为应用程序进程编号所对应的应用程序。
debug.java.logbinder.pid,该参数表示需要记录的Java层的Binder对象的创建信息、销毁信息、调用堆栈信息的应用程序进程PID。即设置需要异常定位的Binder对象的类型为Java层的Binder对象,需异常定位的应用程序为应用程序进程编号所对应的应用程序。
需要注意的是,若debug.native.logbinder.pid为空,则表示无需记录Native层的BBinder对象的创建信息、销毁信息、调用堆栈信息,若debug.java.logbinder.pid为空,则表示无需记录Java层的Binder对象的创建信息、销毁信息、调用堆栈信息,其他情况可类比,将不再赘述。
如图8所示,若persist.sys.logbinder.enable的属性值为否,则关闭执行预设埋点数据的执行功能。若persist.sys.logbinder.enable的属性值为是,则通过设置debug.native.logbinder.pid参数的属性值PID,来记录应用程序进程编号为PID的Native层的BBinder对象的创建信息、销毁信息、调用堆栈信息;通过设置debug.java.logbinder.pid参数的属性值PID,来记录应用程序进程编号为PID的Java层的Binder对象的创建信息、销毁信息、调用堆栈信息。在图8中,debug.native.logbinder.pid参数的属性值与debug.java.logbinder.pid参数的属性值PID相同。表示同一个应用程序既记录Native层的BBinder对象的创建信息、销毁信息、调用堆栈信息,也记录Java层的Binder对象的创建信息、销毁信息、调用堆栈信息。
预先设置三个系统属性的参数后,当需要开启/关闭动态开关时,可通过执行adb指令来开启/关闭动态开关。
203,当运行应用程序时,执行预设埋点数据,该预设埋点数据用于记录Binder对象的创建信息、销毁信息和Binder对象的调用堆栈信息。
若既设置了Native层的BBinder对象对应的预设埋点数据,又设置了Java层的Binder对象对应的预设埋点数据,同时开启了执行预设埋点数据的执行功能,记录Native层的BBinder对象的创建信息、销毁信息、调用堆栈信息,以及记录应用程序的Java层的Binder对象的创建信息、销毁信息、调用堆栈信息。当运行应用程序时,执行预设埋点数据,该预设埋点数据用于记录应用程序的Native层的BBinder对象的创建信息、销毁信息、调用堆栈信息,以及Java层的Binder对象的创建信息、销毁信息、调用堆栈信息。其他情况将不再例举。
若只设置了Native层的BBinder对象对应的预设埋点数据,同时开启了执行预设埋点数据的执行功能,记录Native层的BBinder对象的创建信息、销毁信息、调用堆栈信息。当运行应用程序时,执行预设埋点数据,该预设埋点数据用于记录应用程序的Native层的BBinder对象的创建信息、销毁信息、调用堆栈信息。
若只设置了Java层的Binder对象对应的预设埋点数据,同时开启了执行预设埋点数据的执行功能,记录Java层的Binder对象的创建信息、销毁信息、调用堆栈信息。当运行应用程序时,执行预设埋点数据,该预设埋点数据用于记录应用程序的Java层的Binder对象的创建信息、销毁信息、调用堆栈信息。
204,根据所记录的Binder对象的创建信息、销毁信息和Binder对象的调用堆栈信息,确定应用程序产生异常的目标Binder对象,以及确定目标Binder对象产生异常的异常位置。
在一些情况下,将所记录的Binder对象的创建信息、销毁信息和Binder对象的调用堆栈信息,输出至记录日志中;根据记录日志中所记录的Binder对象的创建信息、销毁信息和Binder对象的调用堆栈信息,确定应用程序产生异常的目标Binder对象,以及确定目标Binder对象产生异常的异常位置。
(记录日志中)所记录的信息可分为以下四类:
a、Native层的BBinder对象的指针地址以及调用堆栈信息;
b、销毁的Native层的BBinder对象的指针地址;
c、Java层的Binder对象的hash值以及调用堆栈信息;
d、销毁的Java层的Binder对象的hash值。
具体地,确定a和b中的BBinder对象的指针地址相同、c和d中Binder对象的hash值相同的中间Binder对象;过滤中间Binder对象所记录的创建信息、销毁信息和调用堆栈信息,即过滤中间Binder对象所记录的所有相关信息;(记录日志中)还剩下a,c两类的相关信息(即剩余信息),统计a、c中相同调用堆栈信息出现的数量;根据数量确定应用程序产生异常的目标Binder对象,以及定位目标Binder对象产生异常的异常位置,如可将相同调用堆栈信息出现的数量最高的Binder对象作为目标Binder对象,或者数量排名靠前的多个Binder对象作为目标Binder对象,并将目标Binder对象对应的调用堆栈信息将创建目标Binder对象的代码段所在的位置确定为目标Binder对应产生异常的异常位置。
该实施例中进一步详细描述如何在应用程序所在的终端系统对应的软件开发工具包的源码中设置预设埋点数据,在应用程序所在的终端系统对应的软件开发工具包的源码中设置预设埋点数据,无需修改终端系统的源码和应用程序的源码,修改的位置和次数大大减少,如只需修改4处即可,极大了方便了用户(如开发人员/维护人员)进行异常定位。另外,设置三个系统属性的参数,通过修改该三个系统属性的参数,作为动态开关,方便开启执行预设埋点数据的执行功能,方便记录Binder对象的创建信息、销毁信息和Binder对象的调用堆栈信息。并自动根据所记录的Binder对象的创建信息、销毁信息和Binder对象的调用堆栈信息,确定应用程序产生异常的目标Binder对象,以及产生异常的异常位置,进一步提高了对Binder对象分析的效率。如此,大大减少确定应用程序产生异常的目标Binder对象的时间,以及定位产生目标Binder对象异常的异常位置的时间,提高解决应用程序Binder对象异常问题(Binder对象泄露问题)的效率。
下面将简单描述本申请实施例的两种应用场景,以进一步理解本申请实施例的内容。如下:
1、开关人员在对移动终端上的应用程序进行测试时,预先在应用程序所在的终端系统对应的软件开发工具包的源码中设置预设埋点数据后,开启执行预设埋点数据的执行功能,设置需异常定位的应用程序,以及确定需异常定位的Binder对象的类型,后面运行应用程序,以执行预设埋点数据,该预设埋点数据用于记录Binder对象的创建信息、销毁信息和所述Binder对象的调用堆栈信息,并根据所记录的Binder对象的创建信息、销毁信息和Binder对象的调用堆栈信息,确定应用程序产生异常的目标Binder对象,以及确定目标Binder对象产生异常的异常位置。
2、预先在应用程序所在的终端系统对应的软件开发工具包的源码中设置预设埋点数据,并关闭执行预设埋点数据的执行功能。用户在移动终端上安装了应用程序后,当应用程序出现异常时,移动终端向移动终端的服务器发送该异常的异常信息,服务器接收到该异常信息后,通过adb命令向移动终端发送开启执行预设埋点数据的执行功能,设置需异常定位的应用程序,以及确定需异常定位的Binder对象的类型,以开启动态开关。如此,当应用程序运行时,执行预设埋点数据,该预设埋点数据用于记录Binder对象的创建信息、销毁信息和所述Binder对象的调用堆栈信息。移动终端将一段时间所记录的相关信息发送至服务器,服务器接收到所记录的Binder对象的创建信息、销毁信息和所述Binder对象的调用堆栈信息后,自动解析,确定应用程序产生异常的目标Binder对象,以及确定目标Binder对象产生异常的异常位置。需要注意的是,服务器在接收到所记录的相关信息后,通过adb命令向移动终端发送关闭执行预设埋点数据的执行功能的信息。
以上两种应用场景只是应用场景的举例,本申请实施例还可以适用于其他可以使用的应用场景。
根据上述实施例所描述的方法,本实施例将从异常定位装置的角度进一步进行描述,该异常定位装置具体可以作为独立的实体来实现,也可以集成在移动终端中。
请参阅图9,图9具体描述了本申请实施例提供的异常定位装置,应用于移动终端中,该异常定位装置可以包括:执行单元301和定位单元302。其中:
执行单元301,用于当运行应用程序时,执行预设埋点数据,该预设埋点数据用于记录Binder对象的创建信息、销毁信息和Binder对象的调用堆栈信息。
定位单元302,用于根据所记录的Binder对象的创建信息、销毁信息和Binder对象的调用堆栈信息,确定应用程序产生异常的目标Binder对象,以及确定目标Binder对象产生异常的异常位置。
进一步地,定位单元302,包括:中间对象确定单元3021、过滤单元3022、统计单元3023以及异常定位单元3024。其中,
中间对象确定单元3021,用于确定所记录的创建信息和销毁信息中的Binder对象相同的中间Binder对象。
过滤单元3022,用于过滤中间Binder对象所对应的创建信息、销毁信息和调用堆栈信息。
统计单元3023,用于在所记录的剩余信息中,统计相同调用堆栈信息出现的数量。
异常定位单元3024,用于根据数量确定应用程序产生异常的目标Binder对象,以及定位目标Binder对象产生异常的异常位置。进一步地,异常定位单元3024,具体用于:将数量靠前的预设个数的调用堆栈信息所对应的Binder对象作为应用程序产生异常的目标Binder对象;根据目标Binder对象对应的调用堆栈信息将创建目标Binder对象的代码段所在的位置确定为目标Binder对应产生异常的异常位置。
在一些情况下,如图9所示,异常定位装置还可以包括:埋点单元303、开启设置单元304。
其中,埋点单元303,用于在应用程序所在的终端系统对应的软件开发工具包的源码中设置预设埋点数据。
具体地,埋点单元303包括类型获取单元3031、源码确定单元3032、埋点增加单元3033。其中,类型获取单元3031,用于获取预设的Binder对象的类型。源码确定单元3032,用于在应用程序所在的终端系统对应的软件开发工具包中,确定与类型匹配的源码。埋点增加单元3033,用于在源码中的预设位置处,增加预设埋点数据。
进一步地,埋点增加单元3033,具体用于在源码中的Binder对象预设的创建位置处,增加记录Binder对象创建信息的创建埋点数据,以及记录Binder对象的调用堆栈信息的堆栈埋点数据;在源码中的Binder对象预设的销毁位置处,增加记录Binder对象销毁信息的销毁埋点数据;将创建埋点数据、堆栈埋点数据和销毁埋点数据作为预设埋点数据。
开启设置单元304,用于开启执行预设埋点数据的执行功能;设置需异常定位的应用程序,以及确定需异常定位的Binder对象的类型。
具体实施时,以上各个模块和/或单元可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个模块和/或单元的具体实施可参见前面的方法实施例,具体可以达到的有益效果也请参看前面的方法实施例中的有益效果,在此不再赘述。
另外,本申请实施例还提供一种移动终端,移动终端包括智能手机、Pad、穿戴式设备、机器人等设备。优选的,该移动终端所使用的终端系统是安卓系统。如图10所示,移动终端400包括处理器401、存储器402。其中,处理器401与存储器402电性连接。
处理器401是移动终端400的控制中心,利用各种接口和线路连接整个移动终端的各个部分,通过运行或加载存储在存储器402内的应用程序,以及调用存储在存储器402内的数据,执行移动终端的各种功能和处理数据,从而对移动终端进行整体监控。
在本实施例中,移动终端400中的处理器401会按照如下的步骤,将一个或一个以上的应用程序的进程对应的指令加载到存储器402中,并由处理器401来运行存储在存储器402中的应用程序,从而实现各种功能:
当运行应用程序时,执行预设埋点数据,该预设埋点数据用于记录Binder对象的创建信息、销毁信息和Binder对象的调用堆栈信息;
根据所记录的Binder对象的创建信息、销毁信息和Binder对象的调用堆栈信息,确定应用程序产生异常的目标Binder对象,以及确定目标Binder对象产生异常的异常位置。
该移动终端可以实现本申请实施例所提供的异常定位方法任一实施例中的步骤,因此,可以实现本发明实施例所提供的任一异常定位方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
图11示出了本发明实施例提供的移动终端的具体结构框图,该移动终端可以用于实施上述实施例中提供的异常定位方法。该移动终端500包括智能手机、Pad、穿戴式设备、机器人等设备。优选的,该移动终端所使用的终端系统是安卓系统。
RF电路510用于接收以及发送电磁波,实现电磁波与电信号的相互转换,从而与通讯网络或者其他设备进行通讯。RF电路510可包括各种现有的用于执行这些功能的电路元件,例如,天线、射频收发器、数字信号处理器、加密/解密芯片、用户身份模块(SIM)卡、存储器等等。RF电路510可与各种网络如互联网、企业内部网、无线网络进行通讯或者通过无线网络与其他设备进行通讯。上述的无线网络可包括蜂窝式电话网、无线局域网或者城域网。上述的无线网络可以使用各种通信标准、协议及技术,包括但并不限于全球移动通信系统(Global System for Mobile Communication,GSM)、增强型移动通信技术(Enhanced DataGSM Environment,EDGE),宽带码分多址技术(Wideband Code Division MultipleAccess,WCDMA),码分多址技术(Code Division Access,CDMA)、时分多址技术(TimeDivision Multiple Access,TDMA),无线保真技术(Wireless Fidelity,Wi-Fi)(如美国电气和电子工程师协会标准IEEE 802.11a,IEEE 802.11b,IEEE802.11g和/或IEEE802.11n)、网络电话(Voice over Internet Protocol,VoIP)、全球微波互联接入(Worldwide Interoperability for Microwave Access,Wi-Max)、其他用于邮件、即时通讯及短消息的协议,以及任何其他合适的通讯协议,甚至可包括那些当前仍未被开发出来的协议。
存储器520可用于存储软件程序以及模块,如上述实施例中对应的程序指令/模块,处理器580通过运行存储在存储器520内的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器520可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器520可进一步包括相对于处理器580远程设置的存储器,这些远程存储器可以通过网络连接至移动终端500。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入单元530可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。具体地,输入单元530可包括触敏表面531以及其他输入设备532。触敏表面531,也称为触摸显示屏(触摸屏)或者触控板,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触敏表面531上或在触敏表面531附近的操作),并根据预先设定的程式驱动相应的连接装置。可选的,触敏表面531可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器580,并能接收处理器580发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触敏表面531。除了触敏表面531,输入单元530还可以包括其他输入设备532。具体地,其他输入设备532可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
显示单元540可用于显示由用户输入的信息或提供给用户的信息以及移动终端500的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。显示单元540可包括显示面板541,可选的,可以采用LCD(Liquid Crystal Display,液晶显示器)、OLED(Organic Light-Emitting Diode,有机发光二极管)等形式来配置显示面板541。进一步的,触敏表面531可覆盖显示面板541,当触敏表面531检测到在其上或附近的触摸操作后,传送给处理器580以确定触摸事件的类型,随后处理器580根据触摸事件的类型在显示面板541上提供相应的视觉输出。虽然在图中,触敏表面531与显示面板541是作为两个独立的部件来实现输入和输出功能,但是可以理解地,将触敏表面531与显示面板541集成而实现输入和输出功能。
移动终端500还可包括至少一种传感器550,比如光传感器、运动传感器以及其他传感器。具体地,光传感器可包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板541的亮度,接近传感器可在翻盖合上或者关闭时产生中断。作为运动传感器的一种,重力加速度传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别手机姿态的应用(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;至于移动终端500还可配置的陀螺仪、气压计、湿度计、温度计、红外线传感器等其他传感器,在此不再赘述。
音频电路560、扬声器561,传声器562可提供用户与移动终端500之间的音频接口。音频电路560可将接收到的音频数据转换后的电信号,传输到扬声器561,由扬声器561转换为声音信号输出;另一方面,传声器562将收集的声音信号转换为电信号,由音频电路560接收后转换为音频数据,再将音频数据输出处理器580处理后,经RF电路510以发送给比如另一终端,或者将音频数据输出至存储器520以便进一步处理。音频电路560还可能包括耳塞插孔,以提供外设耳机与移动终端500的通信。
移动终端500通过传输模块570(例如Wi-Fi模块)可以帮助用户接收请求、发送信息等,它为用户提供了无线的宽带互联网访问。虽然图示出了传输模块570,但是可以理解的是,其并不属于移动终端500的必须构成,完全可以根据需要在不改变发明的本质的范围内而省略。
处理器580是移动终端500的控制中心,利用各种接口和线路连接整个手机的各个部分,通过运行或执行存储在存储器520内的软件程序和/或模块,以及调用存储在存储器520内的数据,执行移动终端500的各种功能和处理数据,从而对移动终端进行整体监控。可选的,处理器580可包括一个或多个处理核心;在一些实施例中,处理器580可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解地,上述调制解调处理器也可以不集成到处理器580中。
移动终端500还包括给各个部件供电的电源590(比如电池),在一些实施例中,电源可以通过电源管理系统与处理器580逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源590还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
尽管未示出,移动终端500还包括摄像头(如前置摄像头、后置摄像头)、蓝牙模块等,在此不再赘述。具体在本实施例中,移动终端的显示单元是触摸屏显示器,移动终端还包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行一个或者一个以上程序包含用于进行以下操作的指令:
当运行应用程序时,执行预设埋点数据,该预设埋点数据用于记录Binder对象的创建信息、销毁信息和Binder对象的调用堆栈信息;
根据所记录的Binder对象的创建信息、销毁信息和Binder对象的调用堆栈信息,确定应用程序产生异常的目标Binder对象,以及确定目标Binder对象产生异常的异常位置。
具体实施时,以上各个模块可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个模块的具体实施可参见前面的方法实施例,在此不再赘述。
本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。为此,本发明实施例提供一种存储介质,其中存储有多条指令,该指令能够被处理器进行加载,以执行本发明实施例所提供的异常定位方法中任一实施例的步骤。
其中,该存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、磁盘或光盘等。
由于该存储介质中所存储的指令,可以执行本发明实施例所提供的异常定位方法任一实施例中的步骤,因此,可以实现本发明实施例所提供的任异常定位方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
以上对本申请实施例所提供的一种异常定位方法、装置、存储介质和移动终端进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (10)
1.一种异常定位方法,其特征在于,包括:
当运行应用程序时,执行预设埋点数据,所述预设埋点数据用于记录Binder对象的创建信息、销毁信息和所述Binder对象的调用堆栈信息,其中,通过所述Binder对象来实现进程间的访问,所述Binder对象包括Native层的BBinder对象和/或Java层的Binder对象;
根据所记录的Binder对象的创建信息、销毁信息和所述Binder对象的调用堆栈信息,确定所述应用程序产生异常的目标Binder对象,以及确定所述目标Binder对象产生异常的异常位置。
2.根据权利要求1所述的异常定位方法,其特征在于,在运行应用程序之前,所述方法还包括:
开启执行预设埋点数据的执行功能;
设置需异常定位的应用程序;以及确定需异常定位的Binder对象的类型。
3.根据权利要求2所述的异常定位方法,其特征在于,在开启执行预设埋点数据的执行功能之前,所述方法还包括:
在应用程序所在的终端系统对应的软件开发工具包的源码中设置预设埋点数据。
4.根据权利要求3所述的异常定位方法,其特征在于,所述在应用程序所在的终端系统对应的软件开发工具包的源码中设置预设埋点数据,包括:
获取预设的Binder对象的类型;
在应用程序所在的终端系统对应的软件开发工具包中,确定与所述类型匹配的源码;
在所述源码中的预设位置处,增加预设埋点数据。
5.根据权利要求4所述的异常定位方法,其特征在于,所述在所述源码中的预设位置处,增加预设埋点数据,包括:
在所述源码中的Binder对象预设的创建位置处,增加记录所述Binder对象创建信息的创建埋点数据,以及记录所述Binder对象的调用堆栈信息的堆栈埋点数据;
在所述源码中的Binder对象预设的销毁位置处,增加记录所述Binder对象销毁信息的销毁埋点数据;
将所述创建埋点数据、所述堆栈埋点数据和所述销毁埋点数据作为预设埋点数据。
6.根据权利要求1所述的异常定位方法,其特征在于,所述根据所记录的Binder对象的创建信息、销毁信息和所述Binder对象的调用堆栈信息,确定所述应用程序产生异常的目标Binder对象,以及确定所述目标Binder对象产生异常的异常位置,包括:
确定所记录的创建信息和销毁信息中的Binder对象相同的中间Binder对象;
过滤所述中间Binder对象所对应的创建信息、销毁信息和调用堆栈信息;
在所记录的剩余信息中,统计相同调用堆栈信息出现的数量;
根据所述数量确定所述应用程序产生异常的目标Binder对象,以及定位所述目标Binder对象产生异常的异常位置。
7.根据权利要求6所述的异常定位方法,其特征在于,所述根据所述数量确定所述应用程序产生异常的目标Binder对象,以及定位所述目标Binder对象产生异常的异常位置,包括:
将数量靠前的预设个数的调用堆栈信息所对应的Binder对象作为应用程序产生异常的目标Binder对象;
根据所述目标Binder对象对应的调用堆栈信息,将创建所述目标Binder对象的代码段所在的位置确定为所述目标Binder对应产生异常的异常位置。
8.一种异常定位装置,其特征在于,包括:
执行单元,用于当运行应用程序时,执行预设埋点数据,所述预设埋点数据用于记录Binder对象的创建信息、销毁信息和所述Binder对象的调用堆栈信息,其中,通过所述Binder对象来实现进程间的访问,所述Binder对象包括Native层的BBinder对象和/或Java层的Binder对象;
定位单元,用于根据所记录的Binder对象的创建信息、销毁信息和所述Binder对象的调用堆栈信息,确定所述应用程序产生异常的目标Binder对象,以及确定所述目标Binder对象产生异常的异常位置。
9.一种计算机可读存储介质,其特征在于,所述计算机存储介质中存储有多条指令,所述指令适于由处理器加载以执行权利要求1至7任一项所述的异常定位方法。
10.一种移动终端,其特征在于,包括处理器和存储器,所述处理器与所述存储器电性连接,所述存储器用于存储指令和数据,所述处理器用于执行权利要求1至7任一项所述的异常定位方法中的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010733473.8A CN111897726B (zh) | 2020-07-27 | 2020-07-27 | 异常定位方法、装置、存储介质及移动终端 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010733473.8A CN111897726B (zh) | 2020-07-27 | 2020-07-27 | 异常定位方法、装置、存储介质及移动终端 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111897726A CN111897726A (zh) | 2020-11-06 |
CN111897726B true CN111897726B (zh) | 2024-01-19 |
Family
ID=73190162
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010733473.8A Active CN111897726B (zh) | 2020-07-27 | 2020-07-27 | 异常定位方法、装置、存储介质及移动终端 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111897726B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113392893A (zh) * | 2021-06-08 | 2021-09-14 | 北京达佳互联信息技术有限公司 | 业务故障的定位方法、装置、存储介质及计算机程序产品 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106445769A (zh) * | 2015-08-11 | 2017-02-22 | 腾讯科技(深圳)有限公司 | 计算机运行监测方法、装置和系统 |
CN107168875A (zh) * | 2017-05-15 | 2017-09-15 | 南京大学 | 一种基于安卓应用多入口特性的Activity构件泄露检测方法 |
CN108052431A (zh) * | 2017-12-08 | 2018-05-18 | 北京奇虎科技有限公司 | 终端程序异常关闭信息处理方法、装置、终端 |
CN109739676A (zh) * | 2018-12-27 | 2019-05-10 | 努比亚技术有限公司 | 一种运行监测方法、移动终端及计算机可读存储介质 |
CN110058999A (zh) * | 2019-03-13 | 2019-07-26 | 平安普惠企业管理有限公司 | 电子装置、应用程序异常定位方法及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104346274B (zh) * | 2013-07-29 | 2017-06-06 | 国际商业机器公司 | 程序调试器及一种程序的调试方法 |
-
2020
- 2020-07-27 CN CN202010733473.8A patent/CN111897726B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106445769A (zh) * | 2015-08-11 | 2017-02-22 | 腾讯科技(深圳)有限公司 | 计算机运行监测方法、装置和系统 |
CN107168875A (zh) * | 2017-05-15 | 2017-09-15 | 南京大学 | 一种基于安卓应用多入口特性的Activity构件泄露检测方法 |
CN108052431A (zh) * | 2017-12-08 | 2018-05-18 | 北京奇虎科技有限公司 | 终端程序异常关闭信息处理方法、装置、终端 |
CN109739676A (zh) * | 2018-12-27 | 2019-05-10 | 努比亚技术有限公司 | 一种运行监测方法、移动终端及计算机可读存储介质 |
CN110058999A (zh) * | 2019-03-13 | 2019-07-26 | 平安普惠企业管理有限公司 | 电子装置、应用程序异常定位方法及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111897726A (zh) | 2020-11-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107734616B (zh) | 应用程序关闭方法、装置、存储介质和电子设备 | |
US10824449B2 (en) | Application running method and device | |
CN106502703B (zh) | 一种函数调用方法和装置 | |
CN111192578B (zh) | 应用控制方法、装置、存储介质及电子设备 | |
CN112148579B (zh) | 一种用户界面的测试方法和装置 | |
CN106713608B (zh) | 应用的功能状态修改方法、装置及终端 | |
CN110968508B (zh) | 一种小程序的加载时间确定方法、装置、终端及存储介质 | |
CN108090345B (zh) | linux系统外部命令执行方法及装置 | |
CN111723002A (zh) | 一种代码调试方法、装置、电子设备及存储介质 | |
CN110046497B (zh) | 一种函数挂钩实现方法、装置和存储介质 | |
CN111104180B (zh) | 应用程序优化方法、装置、存储介质及电子设备 | |
CN111273955B (zh) | 热修复插件优化方法、装置、存储介质及电子设备 | |
CN111897726B (zh) | 异常定位方法、装置、存储介质及移动终端 | |
CN106919458B (zh) | Hook目标内核函数的方法及装置 | |
CN114327087A (zh) | 输入事件处理方法、装置、电子设备和存储介质 | |
CN106708501B (zh) | 活动监控方法及装置 | |
US10664436B2 (en) | Application acceleration method and application acceleration device | |
CN115469937A (zh) | 插件运行方法、装置、电子设备及存储介质 | |
CN109145598A (zh) | 脚本文件的病毒检测方法、装置、终端及存储介质 | |
CN113392120A (zh) | 获取SQLite的执行信息的方法及装置 | |
CN110990606B (zh) | 图片存储方法、装置、存储介质及电子设备 | |
CN116662024B (zh) | 进程间通信监控方法、装置、电子设备及存储介质 | |
CN113867999B (zh) | 应用异常处理方法、终端及计算机可读存储介质 | |
CN116048544B (zh) | 一种弹窗广告的处理方法、电子设备及可读存储介质 | |
CN116700815B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |