Android系统中Native层崩溃溯源方法、装置、存储介质及终端制造方法及图纸

技术编号:19341648 阅读:41 留言:0更新日期:2018-11-07 13:43
本发明专利技术涉及软件维护领域,具体涉及一种Android系统中Native层崩溃溯源方法、装置、存储介质及终端,所述方法包括:捕获应用程序出现的在Native层崩溃的信号事件,检测所述信号事件是否已被所述应用程序注册;若所述信号事件已被所述应用程序注册,调用应用程序进程预置的该信号事件对应的处理函数,执行所述处理函数:在Native层中调用Java层的函数接口,获取接收到所述信号事件的线程的JNIEnv变量;通过所述JNIEnv变量调用FindClass函数获取各个Java类;反射调用getStackTrace函数,获取所述各个Java类的调用栈信息,得到整个Java层调用栈的全部信息;根据所述整个Java层调用栈的全部信息追溯Native层崩溃产生的原因。本发明专利技术解决目前无法很好地追溯Android系统中Native层崩溃的原因的问题。

Native layer collapse tracing method, device, storage medium and terminal in Android system

The invention relates to the field of software maintenance, in particular to a Native layer crash traceability method, device, storage medium and terminal in an Android system. The method includes: capturing the signal event of an application crash in the Native layer, detecting whether the signal event has been registered by the application program; and The component has been registered with the application program and calls the corresponding processing function of the signal event preset by the application process to execute the processing function: calling the function interface of the Java layer in the Native layer to obtain the JNIEnv variable of the thread receiving the signal event; calling the FindClass function to obtain the JNIEnv variable through the JNIEnv variable to obtain the JNIEnv function AVA class; reflection call getStackTrace function, get the call stack information of each Java class, get all the information of the whole Java layer call stack; trace the cause of the collapse of the Native layer according to all the information of the whole Java layer call stack. The invention solves the problem that the cause of the Native layer collapse in the Android system can not be traced well at present.

【技术实现步骤摘要】
Android系统中Native层崩溃溯源方法、装置、存储介质及终端
本专利技术涉及软件维护领域,具体涉及一种Android系统中Native层崩溃溯源方法、装置、存储介质及终端。
技术介绍
由于Android设备品牌多、系统版本杂,所以在Android系统中会因为兼容性等问题,造成应用程序的各种崩溃(Crash),而且在这些Crash中,Native层崩溃(NativeCrash)一直是Crash里的大头,NativeCrash具有上下文不全、出错信息模糊、难以捕捉等特点,比JavaCrash更难修复,当应用程序的Crash是发生在Native层的时候,大部分都是很难定位到具体的问题的,因为在很多时候,在这些Crash的信息中,只能看到当前崩溃点的一些有限的信息,很多都是崩溃在系统库中,看不到Java层的相关逻辑或是调用栈等可用信息,所以此类问题的解决,一直都是解决应用程序性能和稳定性中最大的难点。
技术实现思路
为克服以上技术问题,特别是现有技术无法很好地追溯的Android系统中Native层崩溃的原因问题,特提出以下技术方案:第一方面,本专利技术提供了一种Android系统中Native层崩溃溯源方法,包括:捕获应用程序出现的在Native层崩溃的信号事件,检测所述信号事件是否已被所述应用程序注册;若所述信号事件已被所述应用程序注册,调用应用程序进程预置的该信号事件对应的处理函数,执行所述处理函数:在Native层中调用Java层的函数接口,获取接收到所述信号事件的线程的JNIEnv变量;通过所述JNIEnv变量调用FindClass函数获取各个Java类;反射调用getStackTrace函数,获取所述各个Java类的调用栈信息,得到整个Java层调用栈的全部信息;根据所述整个Java层调用栈的全部信息追溯Native层崩溃产生的原因。进一步的,所述信号事件包括SIGSEGV、SIGABRT、SIGFPE、SIGILL、SIGBUS、SIGSTKFLT,所述应用程序通过调用Sigaction函数对所述信号事件进行注册。进一步的,所述检测所述信号事件是否已被所述应用程序注册之后,还包括:若所述信号事件没有被所述应用程序注册,对该信号事件的处理保留系统的默认值或忽略该信号事件。具体的,所述在Native层中调用Java层的函数接口获取接收到所述信号事件的线程的JNIEnv变量,包括:在Native层中调用AttachCurrentThread函数获取接收到所述信号事件的当前线程的JNIEnv变量。进一步的,所述获取整个Java层调用栈的全部信息之后,还包括:将所述应用程序出现的在Native层崩溃的信号事件及所述整个Java调用栈的全部信息生成dump文件后上报到服务器。第二方面,本专利技术还提供一种Android系统中Native层崩溃溯源装置,其特征在于,包括:捕获模块:用于捕获应用程序出现的在Native层崩溃的信号事件,检测所述信号事件是否已被所述应用程序注册;获取模块:用于若所述信号事件已被所述应用程序注册,调用应用程序进程预置的该信号事件对应的处理函数,执行所述处理函数:在Native层中调用Java层的函数接口,获取接收到所述信号事件的线程的JNIEnv变量;通过所述JNIEnv变量调用FindClass函数获取各个Java类;反射调用getStackTrace函数,获取所述各个Java类的调用栈信息,得到整个Java层调用栈的全部信息;分析模块:用于根据所述整个Java层调用栈的全部信息追溯Native层崩溃产生的原因。进一步的,所述信号事件包括SIGSEGV、SIGABRT、SIGFPE、SIGILL、SIGBUS、SIGSTKFLT,所述应用程序通过调用Sigaction函数对所述信号事件进行注册。进一步的,所述获取模块执行在Native层中调用Java层的函数接口获取接收到所述信号事件的线程的JNIEnv变量,包括:在Native层中调用AttachCurrentThread函数获取接收到所述信号事件的当前线程的JNIEnv变量。第三方面,本专利技术还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,该程序被处理器执行时实现上述的Android系统中Native层崩溃溯源方法。第四方面,本专利技术还提供了一种终端,所述终端包括一个或多个处理器、存储器、一个或多个计算机程序,其中所述一个或多个计算机程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个计算机程序配置用于执行上述的Android系统中Native层崩溃溯源方法。本专利技术与现有技术相比,具有以下有益效果:本专利技术提出了一种从Android系统的Native层溯源Java层的调用栈的功能,通过捕获应用程序出现的在Native层崩溃的信号事件,调用应用程序进程预置的该信号事件对应的处理函数,使用了Native层和Java层的反射调用相结合获取接收到所述信号事件的线程的Java层中的调用栈信息,找到整个崩溃产生的调用链,进而找到整个代码的相关调用逻辑,从而追溯出Native层崩溃是由应用程序中哪个动作引起的,帮助开发人员快速定位应用程序出现的问题,解决目前应用程序出现Native层崩溃而难以定位、难以修复的问题,从而有利于提高应用程序的性能稳定性。本专利技术附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变得明显,或通过本专利技术的实践了解到。附图说明本专利技术上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:图1为本专利技术Android系统中Native层崩溃溯源方法的一实施例流程示意图;图2为本专利技术Android系统中Native层崩溃溯源方法的另一实施例流程示意图;图3为本专利技术Android系统中Native层崩溃溯源装置的一实施例示意图;图4为本专利技术终端的一实施例结构示意图。具体实施方式下面详细描述本专利技术的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本专利技术,而不能解释为对本专利技术的限制。本
技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本专利技术的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作。本
技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本专利技术所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。本领域技术人员可以理解,这里所使用的服务器、云端、远端网络设备等概念,具有等同效果,其包括但不限于计算机、网络主机、单个网络服务器、多个网络服务器集或多个服务器构成的云。在此,云由基于云计算(CloudComputing)的大量计算机或网络服务器构成,其中,云计算是分布式计算的一种本文档来自技高网
...

【技术保护点】
1.一种Android系统中Native层崩溃溯源方法,其特征在于,包括:捕获应用程序出现的在Native层崩溃的信号事件;检测所述信号事件是否已被所述应用程序注册;若所述信号事件已被所述应用程序注册,调用应用程序进程预置的该信号事件对应的处理函数,执行所述处理函数:在Native层中调用Java层的函数接口,获取接收到所述信号事件的线程的JNIEnv变量;通过所述JNIEnv变量调用FindClass函数获取各个Java类;反射调用getStackTrace函数,获取所述各个Java类的调用栈信息,得到整个Java层调用栈的全部信息;根据所述整个Java层调用栈的全部信息追溯Native层崩溃产生的原因。

【技术特征摘要】
1.一种Android系统中Native层崩溃溯源方法,其特征在于,包括:捕获应用程序出现的在Native层崩溃的信号事件;检测所述信号事件是否已被所述应用程序注册;若所述信号事件已被所述应用程序注册,调用应用程序进程预置的该信号事件对应的处理函数,执行所述处理函数:在Native层中调用Java层的函数接口,获取接收到所述信号事件的线程的JNIEnv变量;通过所述JNIEnv变量调用FindClass函数获取各个Java类;反射调用getStackTrace函数,获取所述各个Java类的调用栈信息,得到整个Java层调用栈的全部信息;根据所述整个Java层调用栈的全部信息追溯Native层崩溃产生的原因。2.根据权利要求1所述的方法,其特征在于,所述信号事件包括SIGSEGV、SIGABRT、SIGFPE、SIGILL、SIGBUS、SIGSTKFLT,所述应用程序通过调用Sigaction函数对所述信号事件进行注册。3.根据权利要求2所述的方法,其特征在于,所述检测所述信号事件是否已被所述应用程序注册之后,还包括:若所述信号事件没有被所述应用程序注册,对该信号事件的处理保留系统的默认值或忽略该信号事件。4.根据权利要求1所述的方法,其特征在于,所述在Native层中调用Java层的函数接口获取接收到所述信号事件的线程的JNIEnv变量,包括:在Native层中调用AttachCurrentThread函数获取接收到所述信号事件的当前线程的JNIEnv变量。5.根据权利要求1所述的方法,其特征在于,所述获取整个Java层调用栈的全部信息之后,还包括:将所述应用程序出现的在Native层崩溃的信号事件及所述整个Java层调用栈的全部信息生成dump文件后上报到服务器。6.一种Android系统中Native层崩溃溯源装置,...

【专利技术属性】
技术研发人员:卢雄涛
申请(专利权)人:广州华多网络科技有限公司
类型:发明
国别省市:广东,44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1