CN104156275B - 一种安卓Android平台异常处理的方法和装置 - Google Patents
一种安卓Android平台异常处理的方法和装置 Download PDFInfo
- Publication number
- CN104156275B CN104156275B CN201410308634.3A CN201410308634A CN104156275B CN 104156275 B CN104156275 B CN 104156275B CN 201410308634 A CN201410308634 A CN 201410308634A CN 104156275 B CN104156275 B CN 104156275B
- Authority
- CN
- China
- Prior art keywords
- layers
- abnormal data
- java
- abnormal
- function
- 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
- 238000012545 processing Methods 0.000 title claims abstract description 80
- 230000005856 abnormality Effects 0.000 title claims abstract description 57
- 238000000034 method Methods 0.000 title claims abstract description 47
- 230000002159 abnormal effect Effects 0.000 claims abstract description 230
- 238000006243 chemical reaction Methods 0.000 claims abstract description 14
- 230000007488 abnormal function Effects 0.000 claims description 6
- 241001269238 Data Species 0.000 claims description 3
- 238000001514 detection method Methods 0.000 claims description 3
- 230000006870 function Effects 0.000 description 105
- 230000008569 process Effects 0.000 description 13
- 238000004590 computer program Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 6
- 230000007727 signaling mechanism Effects 0.000 description 6
- 230000007246 mechanism Effects 0.000 description 4
- 238000013480 data collection Methods 0.000 description 3
- 238000003672 processing method Methods 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 239000011800 void material Substances 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000026676 system process Effects 0.000 description 1
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明实施例提供了一种安卓Android平台异常处理的方法和装置,所述安卓Android平台包括JAVA层及C++层,所述方法包括:在所述JAVA层中某一程序的运行过程中,当检测到C++层的异常数据时,将所述C++层的异常数据转换为JAVA层的异常数据;收集转换后的JAVA层的异常数据;在所述安卓Android平台中保存所述JAVA层的异常数据;中止所述程序的运行。本发明实施例用以在安卓Android平台检测到C++层出现异常时,将C++层的异常转换为JAVA层的异常后进行收集。
Description
技术领域
本发明涉及异常处理技术领域,特别是涉及一种安卓Android平台异常处理的方法和一种安卓Android平台异常处理的装置。
背景技术
大多数终端都具有检测程序运行时错误情况的能力,使程序能够按照一种标准的方式,在检测出某种事件的发生时,通知程序以便能够做出必要地反应。简而言之,当程序出现异常后,程序将针对异常进行相应的处理。这种机制被统称为异常机制。
异常机制的处理流程可以包括:1、遇到程序出现异常,立即结束该程序调用的方法,并不返回一个值;同时,抛出一个异常对象;2、搜索可以处理该异常的异常处理器进行异常捕获,停止调用该方法的程序的继续执行。
在具体实现中,安卓Android平台中一般包括JAVA层和C++层,在程序运行的过程中,如果在JAVA层出现异常时,JAVA层可以直接根据异常打印调用堆栈信息,从而根据调用栈信息获得JAVA层的异常信息,但是如果在C++层出现异常时,由于在安卓Android平台中C++层不支持直接打印调用栈信息,故无法获取到C++层的异常信息。因此,由于无法收集到C++层的异常信息,对于程序故障bug的修复毫无帮助。
发明内容
本发明实施例所要解决的技术问题是提供一种安卓Android平台异常处理的方法,用以在安卓Android平台检测到C++层出现异常时,将C++层的异常转换为JAVA层的异常后进行收集。
相应的,本发明实施例还提供了一种安卓Android平台异常处理的装置,用以保证上述方法的实现及应用。
为了解决上述问题,本发明公开了一种安卓Android平台异常处理的方法,所述安卓Android平台包括JAVA层及C++层,所述方法包括:
在所述JAVA层中某一程序的运行过程中,当检测到C++层的异常数据时,将所述C++层的异常数据转换为JAVA层的异常数据;
收集转换后的JAVA层的异常数据;
在所述安卓Android平台中保存所述JAVA层的异常数据;
中止所述程序的运行。
优选地,在所述安卓Android平台中注册有针对C++层的各类异常数据对应的各种异常处理函数;所述将C++层的异常数据转换为JAVA层的异常数据的步骤包括:
调用预置的查询或设置信号处理函数sigaction获取所述C++层的异常数据;
采用所述异常数据获取所述对应的异常处理函数;
采用所述异常处理函数调用JAVA本地接口JNI;
采用所述JAVA本地接口JNI调用预置的JAVA层信号捕获函数;所述预置的JAVA层信号捕获函数用于依据所述C++层的异常数据生成JAVA层的异常数据。
优选地,在安卓Android平台包括日志LOG信息;所述收集转换后的JAVA层的异常数据的步骤包括:
调用预置的未捕获异常处理函数UncaughtExceptionHandler获取所述调用栈信息;所述调用栈信息包括所述JAVA层的异常的函数调用关系;
从所述日志LOG信息中提取所述函数调用关系对应的异常数据。
优选地,所述方法还包括:
若检测到JAVA层的异常数据时,调用预置的未捕获异常处理函数UncaughtExceptionHandler获取调用栈信息;所述调用栈信息包括所述JAVA层的异常的函数调用关系;
从所述日志LOG信息中提取所述函数调用关系对应的异常数据。
优选地,所述在安卓Android平台中保存所述JAVA层的异常数据的步骤包括:
获取在所述安卓Android平台中运行程序的程序名及当前时间;
将所述异常数据保存于采用程序名以及当前时间命名的文件中;
对所述文件进行压缩。
优选地,在所述安卓Android平台中保存所述JAVA层的异常数据的步骤之后,还包括:查询是否上传所述JAVA层的异常数据至预置的服务器;
若是,则上传所述JAVA层的异常数据至所述预置的服务器。
本发明实施例还公开了一种安卓Android平台异常处理的装置,所述安卓Android平台包括JAVA层及C++层,所述装置包括:
转换模块,用于在所述JAVA层中某一程序的运行过程中,当检测到C++层的异常数据时,将所述C++层的异常数据转换为JAVA层的异常数据;
收集模块,用于收集转换后的JAVA层的异常数据;
保存模块,用于在所述安卓Android平台中保存所述JAVA层的异常数据;
中止模块,用于中止所述程序的运行。
优选地,在所述安卓Android平台中注册有针对C++层的各类异常对应的各种异常处理函数;所述转换模块包括:
函数调用单元,用于调用预置的查询或设置信号处理函数sigaction获取所述C++层的异常信号;
函数获取单元,用于采用所述异常数据获取所述对应的异常处理函数;
接口调用子模块,用于采用所述异常处理函数调用JAVA本地接口JNI;
异常生成子模块,用于采用所述异常处理函数通过JAVA本地接口JNI调用预置的JAVA层信号捕获函数;所述预置的JAVA层信号捕获函数用于依据所述C++层的异常数据生成JAVA层的异常数据。
优选地,所述收集模块包括:
调用栈信息获取子模块,用于调用预置的未捕获异常处理函数UncaughtExceptionHandler获取所述调用栈信息;所述调用栈信息包括所述JAVA层的异常的函数调用关系;
第一异常信息获取子模块,用于从所述日志LOG信息中提取所述函数调用关系对应的异常数据。
优选地,所述装置还包括:
JAVA层检测模块,用于若检测到JAVA层的异常数据时,调用预置的未捕获异常处理函数UncaughtExceptionHandler获取调用栈信息;所述调用栈信息包括所述JAVA层的异常的函数调用关系;
第二异常信息获取模块,用于从所述日志LOG信息中提取所述函数调用关系对应的异常数据。
优选地,所述保存模块包括:
程序名获取子模块,用于获取在所述安卓Android平台中运行程序的程序名及当前时间;
异常信息存入子模块,用于将所述异常数据保存于采用程序名以及当前时间命名的文件中;
文件压缩子模块,用于对所述文件进行压缩。
优选地,所述装置还包括:
查询子模块,用于查询是否上传所述JAVA层的异常数据至预置的服务器;若是,则调用上传子模块;
上传子模块,用于上传所述JAVA层的异常数据至所述预置的服务器。
与现有技术相比,本发明实施例包括以下优点:
在本发明实施例中,在安卓Android平台检测到C++层出现异常数据时,将C++层的异常数据转换为JAVA层的异常数据,并收集转换后JAVA层的异常数据上传至服务器。本发明实施例将C++层的异常数据转换为JAVA层的异常数据,并交由JAVA层进行收集操作,无论JAVA层发生异常还是C++层发生异常,JAVA层都能捕获到,实现异常数据收集的统一处理,提高安卓Android平台处理性能。
附图说明
图1是本发明的一种安卓Android平台异常处理方法实施例一的步骤流程图;
图2是本发明的一种安卓Android平台异常处理方法实施例二的步骤流程图;
图3是本发明的一种安卓Android平台异常捕获和收集的流程示意图;
图4是本发明的一种安卓Android平台异常处理装置实施例的结构框图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
实施例一:
参照图1,示出了本发明的一种安卓Android平台异常处理方法实施例一的步骤流程图,所述安卓Android平台可以包括JAVA层及C++层,具体可以包括如下步骤:
步骤101,在所述JAVA层中某一程序的运行过程中,当检测到C++层的异常数据时,将所述C++层的异常数据转换为JAVA层的异常数据;
在具体实现中,安装有安卓Android系统的平台可以为手机,计算机等等其他设备。
在安卓Android平台中,可以分为采用JAVA代码编写的应用程序的JAVA层,如Framework层,以及采用C++代码编写的虚拟机的C++层,如Native层。JAVA编写的应用程序的运行依赖JAVA虚拟机,JAVA的虚拟机可以方便JAVA应用程序在不同系统和型号机器上运行,出于效率考虑,JAVA的虚拟机一般采用C++语言来编写的。当然,也可以采用C语言或者其他语言进行编写,本发明实施例对此并不加以限制
目前基于JAVA层异常捕获的实现原理,在安卓Android平台集成了完善的异常捕获功能,通过JAVA层异常捕获的实现原理,能将程序运行时出现异常数据的获取。
需要说明的是,C++层不能直接获取异常数据息,故在本发明实施例中,可以将C++层的异常数据转换为JAVA层的异常数据,然后再交由JAVA层去获取异常数据。
步骤102,收集转换后的JAVA层的异常数据;
在本发明实施例中,对于从C++层的异常数据转换后JAVA层的异常数据,在JAVA层中进行收集。
步骤103,在所述安卓Android平台中保存所述JAVA层的异常数据;
在本发明的一种优选实施例中,所述步骤103可以包括如下子步骤:
子步骤S11,获取在所述安卓Android平台中运行程序的程序名及当前时间;
子步骤S12,将所述异常信息保存于采用程序名以及当前时间命名的文件中;
子步骤S13,对所述文件进行压缩。
在具体实现中,将获取到的异常信息存入到采用当前程序的程序名,以及,当前时间命名的文件中,同时还可以对该文件进行压缩,以便于在本地安卓Android平台中进行保存。
当然,在实际应用中还可以采用其他规则对于异常信息进行保存,本发明实施例对此并不加以限制。
在本发明的一种优选实施例中,所述方法还可以包括如下步骤:
步骤S21,查询是否上传所述JAVA层的异常数据至所述异常信息文件服务器;若是,则执行子步骤S42;
步骤S22,上传所述JAVA层的异常数据至所述异常信息文件服务器。
在本发明实施例中,收集到异常数据后,可以提示用户是否上传异常信息至服务器,若用户同意上传,则将该异常数据上传至异常信息文件服务器中,以供给开发者进行分析。在具体实现中,还可以将出现异常数据的终端的参数信息,比如终端型号,版本号、系统信息等一起上传至服务器。
当然,在具体实现中,还可以在收集到的异常数据就上传至服务器,或者,隔一段时间上传收集到的异常数据,本发明实施例对此并不加以限制。
步骤104,中止所述程序的运行。
当程序出现异常时,可以中止该程序的运行,若用户需要再次运行该程序,则可以对该程序进行刷新,以重新启动。或者,当程序出现异常时,也可以直接退出该程序,并弹出对话框提示用户程序退出。
在具体实现中,C++层不能直接获取异常数据息,而目前在安卓Android平台集成了完善的JAVA层的异常捕获功能,通过JAVA层异常捕获的实现原理,能将程序运行时出现JAVA层异常数据的获取。故在本发明实施例中,可以将C++层的异常数据转换为JAVA层的异常数据,然后再交由可以直接通过异常获取异常数据,实现JAVA层的异常数据与C++层的异常数据的统一处理,提高安卓Android平台的系统处理性能。
实施例二:
参照图2,示出了本发明的一种安卓Android平台异常处理方法实施例二的步骤流程图,所述安卓Android平台可以包括JAVA层及C++层,具体可以包括如下步骤:
步骤201,在所述JAVA层中某一程序的运行过程中,当检测到C++层的异常数据时,将所述C++层的异常数据转换为JAVA层的异常数据;
在本发明的一种优选实施例中,在所述安卓Android平台中可以注册有针对C++层的异常数据对应的异常处理函数;所述步骤201可以包括如下子步骤:
子步骤S31,调用预置的查询或设置信号处理函数sigaction获取所述C++层的异常数据;
子步骤S32,采用所述异常处理函数调用JAVA本地接口JNI;
子步骤S33,采用所述异常处理函数通过JAVA本地接口JNI调用预置的JAVA层信号捕获函数;所述预置的JAVA层信号捕获函数可以用于生成JAVA层的异常数据。
在本发明实施例中,对于程序在运行过程中可能出现的C++层的异常数据,在安卓Android平台注册有相应的异常处理函数。
当C++层出现异常时,获取该C++层的异常在安卓Android平台注册的异常处理函数,并采用异常处理函数调用JAVA层的JNI(Java Native Interface,JAVA本地接口),调用JAVA层的信号捕获函数,将该C++层转换为JAVA层的异常数据。
在本发明实施例中,利用LINUX的信号机制进行异常数据的获取及传递。在LINUX的信号机制中,信号用来通知程序发生了异步事件。需要说明的是,信号是用来通知某程序发生了什么事件,并不需要给该程序传递任何数据。收到信号的程序对各种信号可以有不同的处理方法。在本发明实施例中,对于需要处理的信号,程序可以指定处理函数,并由该函数来进行处理。
具体而言,首先通过查询或设置信号处理sigaction()函数,发送捕获到C++层的异常数据至当前程序中,程序根据C++层的异常数据查找到对应的异常处理函数,采用所述异常处理函数通过JAVA本地接口JNI调用预置的JAVA层信号捕获函数,运行C++层的异常数据生成JAVA层的异常数据。
需要说明的是,在本发明实施例中也可以采用其他方式将所述C++层的异常数据转换为JAVA层的异常数据,本发明实施例对此并不加以限制。
步骤202,收集转换后的JAVA层的异常数据;
在本发明的一种优选实施例中,所述步骤202可以包括如下子步骤:
子步骤S41,调用预置的未捕获异常处理函数UncaughtExceptionHandler获取所述调用栈信息;所述调用栈信息包括所述JAVA层的异常的函数调用关系;
子步骤S42,从所述日志LOG信息中提取所述函数调用关系对应的异常数据。
在具体实现中,安卓Android平台中的日志LOG信息存储有程序运行时的函数调用关系。调用栈信息可以记录程序在运行中的函数调用关系(也叫做函数执行顺序),每个程序的线程都有其独自的调用栈信息,调用栈信息记录了程序运行顺序,同时也记录程序异常时的运行顺序,故在本发明实施例中可以通过获取调用栈信息,从安卓Android平台中的日志LOG信息中获取对应的异常的函数调用关系。
调用栈信息在程序中有很重要的作用。通常对程序调试时,需要查看当前函数的调用栈信息,调用栈信息一个体现函数调用关系的函数调用链,比如,函数f1调用函数f2,函数f2调用函数f3,则f1→f2→f3就是一个调用栈信息。具体地,一个函数到另一个函数之间可能存在多种调用情况,例如,函数f1到函数f3的调用栈可以是f1→f2→f3,也可以是f1→f4→f5→f3,因此,当程序出现异常、检测到错误或被断点断住时,可以查看当前程序的当前调用栈信息。
在本发明实施例中,将C++层异常数据转换为JAVA层的异常数据后,调用JAVA层的未捕获异常处理函数UncaughtExceptionHandler去获取所述调用栈信息,并根据调用栈信息中JAVA层的异常的函数调用关系从日志LOG信息中获取对应的异常数据。
需要说明的是,在本发明实施例中也可以采用其他方式获取到JAVA层的异常数据,本发明实施例对此并不加以限制。
步骤203,若检测到JAVA层的异常数据时,调用预置的未捕获异常处理函数UncaughtExceptionHandler获取调用栈信息;所述调用栈信息包括所述JAVA层的异常的函数调用关系;
在JAVA层中编写应用程序Application,安卓Android提供给开发者的概念空间中应用程序Application是松散的表征概念,没有多少实质上的表征。在安卓Android实际空间中看不到实际意义上的应用程序的概念,虽然存在应用程序Application的类,但其指的是应用程序上下文状态,是极度弱化的概念。在应用程序Application的onCreate()函数中将异常处理类设置为默认异常处理句柄。
具体地,JAVA层中编写异常处理类,用以实现onCreate()函数中的未捕获异常处理函数UncaughtExceptionHandler的public void uncaughtException(Thread thread,Throwable exception),在未捕获异常处理函数uncaughtException中打印出现异常数据的调用栈信息并存储到本地。
步骤204,从所述日志LOG信息中提取所述函数调用关系对应的异常数据。
当应用程序在运行的过程中在JAVA层出现异常数据时,会触发默认异常处理类的uncaughtException函数,此函数可以实现异常数据打印和存储功能。
步骤205,在所述安卓Android平台中保存所述JAVA层的异常数据;
步骤206,中止所述程序的运行。
应用本发明实施例,可以在安卓Android平台的C++层出现异常数据时,利用LINUX信号机制利用Android平台的JAVA本地接口JNI,将C++层的异常数据转换为JAVA层的异常数据,从而可以打印C++层的异常数据的调用栈信息,进而打印出日志LOG信息中的异常信息,将C++层和JAVA层的异常数据收集处理统一起来,提高安卓Android平台的系统处理性能。
需要说明的是,本发明实施例除可以对终端中的JAVA应用程序进行异常捕获外,也可以其他的C++层和JAVA层结合的场合中进行应用。
为了使本领域技术人员进一步理解本发明实施例,以下采用具体的实例进行说明。
参照图3所示的本发明的一种安卓Android平台异常捕获和收集的流程示意图,具体可以包括如下步骤:
1、检测到JAVA层出现异常数据;
2、检测到C++层出现异常数据;
3、根据所述C++层的异常数据获取在安卓Android异常中已注册,该C++层的异常数据对应的异常处理函数;
4、采用异常处理数函调用JAVA本地接口JNI;
5、异常处理数函采用JAVA本地接口JNI调用JAVA层信号捕获函数;
6、JAVA层信号捕获函数根据C++层的异常运行并转换成JAVA层的异常数据;
7、调用JAVA层的异常处理函数;
8、采用JAVA层的异常处理函数打印JAVA层的异常的调用栈信息;
9、根据异常的调用栈信息打印日志LOG信息;
10、读取日志LOG信息获得JAVA层和C++层的异常数据,存储到相应的文件中进行压缩处理;
11、询问是否上传异常信息至异常信息文件服务器;若是,则执行步骤12;若否,则执行步骤13;
12、上传异常数据至异常信息文件服务器;
13、退出程序。
在本发明实施例中,安卓Andorid平台异常捕获和收集的原理综合如下:
一、针对JAVA层的异常数据捕获;
1、在JAVA层编写异常处理类,实现未捕获处理函数UncaughtExceptionHandler的public void uncaughtException(Thread thread,Throwable exception)函数,在uncaughtException函数中打印出现异常的调用栈信息并存储到本地,并杀死出现异常数据的应用。在应用程序Application的onCreate()函数中将异常处理类设置为默认异常处理句柄。
2、当应用程序运行过程中在JAVA层出现异常数据时,会触发默认异常处理类的uncaughtException函数,此函数实现异常数据打印和存储功能。
二、针对C++层的异常数据捕获;
1、利用LINUX的信号机制,首先采用LINUX机制中查询或设置信号处理函数sigaction()函数,指定需要捕获的异常信号来设置该异常数据的异常处理函数。主要完成异常数据的对应处理的注册过程。
2、在实际中,由于JAVA语法可以直接通过异常数据(exception)获取调用堆栈信息,即JAVA层可以直接通过异常数据获取调用堆栈信息,但是C++层则不支持直接打印调用栈信息。
3、采用JAVA本地接口JNI的调用解决C++层不支持直接打印调用栈信息的问题,当C++层出现异常数据时,LINUX信号机制,会发送信号到当前进程,如果此信号在步骤1中已注册,会调用注册的异常处理函数,异常处理函数中采用本地接口JNI,通过C++层的异常代码调用JAVA层信号捕获函数,JAVA层信号捕获处理函数,产生运行时异常,提供给针对JAVA层异常捕获使用。
4、C++层异常数据的捕获利用LINUX信号机制和安卓Android平台的JNI,将C++异常数据转换为JAVA层异常数据,从而将C++和JAVA层异常数据收集处理统一起来。
三、异常收集;
1、首先、打印调用JAVA层调用栈信息,此调用栈信息包括有JAVA层的异常数据,以及,C++层的异常数据转换的JAVA层的异常数据;其次、打印系统的日志LOG信息中异常的函数调用关系;最后、读取安卓Android平台的日志LOG信息,将日志LOG信息存储到按照程序名+时间的命名规则文件中,并进行压缩处理。
2、询问用户是否同意将存储异常数据的文件上传指定的服务器,当用户同意上传到指定的服务器中,上传所述异常数据的文件。
应用本发明实施例,在安卓Android平台检测到C++层出现异常数据时,将C++层的异常数据转换为JAVA层的异常数据,并收集转换后JAVA层的异常数据上传至服务器。本发明实施例将C++层的异常数据转换为JAVA层的异常数据,并交由JAVA层进行统一的收集,故无论JAVA层发生异常还是C++层发生异常,JAVA层都能收到捕获到异常数据,实现异常数据收集的统一处理,提高安卓Android平台处理性能。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
实施例三:
参照图4,示出了本发明一种安卓Android平台异常处理的装置实施例的结构框图,所述安卓Android平台可以包括JAVA层及C++层,具体可以包括如下模块:
转换模块401,用于在所述JAVA层中某一程序的运行过程中,当检测到C++层的异常数据时,将所述C++层的异常数据转换为JAVA层的异常数据;
在本发明的一种优选实施例中,在所述安卓Android平台中可以注册有针对C++层的各类异常数据对应的各种异常处理函数;所述转换模块401可以包括如下子模块:
函数调用单元,用于调用预置的查询或设置信号处理函数sigaction获取所述C++层的异常数据;
函数获取单元,用于采用所述异常数据获取所述对应的异常处理函数;
接口调用子模块,用于采用所述异常处理函数调用JAVA本地接口JNI;
异常生成子模块,用于采用所述异常处理函数通过JAVA本地接口JNI调用预置的JAVA层信号捕获函数;所述预置的JAVA层信号捕获函数用于依据所述C++层的异常数据生成JAVA层的异常数据。
收集模块402,用于收集转换后的JAVA层的异常信息;
在本发明的一种优选实施例中,所述收集模块402可以包括如下子模块:
调用栈信息获取子模块,用于调用预置的未捕获异常处理函数UncaughtExceptionHandler获取所述调用栈信息;所述调用栈信息包括所述JAVA层的异常的函数调用关系;
第一异常信息获取子模块,用于从所述日志LOG信息中提取所述函数调用关系对应的异常数据。
保存模块403,用于在所述安卓Android平台中保存所述JAVA层的异常数据;
在本发明的一种优选实施例中,所述保存模块403可以包括如下子模块:
程序名获取子模块,用于获取在所述安卓Android平台中运行程序的程序名及当前时间;
异常信息存入子模块,用于将所述异常信息保存于采用程序名以及当前时间命名的文件中;
文件压缩子模块,用于对所述文件进行压缩。
在本发明的一种优选实施例中,所述装置还可以包括如下模块:
JAVA层检测模块,用于当检测到JAVA层的异常数据时,调用预置的未捕获异常处理函数UncaughtExceptionHandler获取调用栈信息;所述调用栈信息包括所述JAVA层的异常的函数调用关系;
第二异常信息获取模块,用于从所述日志LOG信息中提取所述函数调用关系对应的异常数据。
在本发明的一种优选实施例中,所述装置还可以包括如下模块:
查询子模块,用于查询是否上传所述文件至预置的服务器;若是,则调用上传子模块;
上传子模块,用于上传所述文件至所述预置的服务器。
中止模块405,用于中止所述程序的运行。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本发明所提供的一种安卓Android平台异常处理的方法和一种安卓Android平台异常处理的装置,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (8)
1.一种安卓Android平台异常处理的方法,其特征在于,所述安卓Android平台包括JAVA层及C++层,所述方法包括:
在所述JAVA层中某一程序的运行过程中,当检测到C++层的异常数据时,将所述C++层的异常数据转换为JAVA层的异常数据;
收集转换后的JAVA层的异常数据;
在所述安卓Android平台中保存所述JAVA层的异常数据;
查询是否上传所述JAVA层的异常数据至预置的服务器;
若是,则上传所述JAVA层的异常数据至所述预置的服务器;
中止所述程序的运行;
其中,在所述安卓Android平台中注册有针对C++层的各类异常数据对应的各种异常处理函数;所述将C++层的异常数据转换为JAVA层的异常数据的步骤包括:
调用预置的查询或设置信号处理函数sigaction获取所述C++层的异常数据;
采用所述C++层的异常数据获取所述对应的异常处理函数;
采用所述异常处理函数调用JAVA本地接口JNI;
采用所述JAVA本地接口JNI调用预置的JAVA层信号捕获函数;所述预置的JAVA层信号捕获函数用于依据所述C++层的异常数据生成JAVA层的异常数据。
2.根据权利要求1所述的方法,其特征在于,在安卓Android平台包括日志LOG信息;所述收集转换后的JAVA层的异常数据的步骤包括:
调用预置的未捕获异常处理函数UncaughtExceptionHandler获取调用栈信息;所述调用栈信息包括所述JAVA层的异常的函数调用关系;
从所述日志LOG信息中提取所述函数调用关系对应的异常数据。
3.根据权利要求1所述的方法,其特征在于,还包括:
若检测到JAVA层的异常数据时,调用预置的未捕获异常处理函数UncaughtExceptionHandler获取调用栈信息;所述调用栈信息包括所述JAVA层的异常的函数调用关系;
从日志LOG信息中提取所述函数调用关系对应的异常数据。
4.根据权利要求3所述的方法,其特征在于,所述在安卓Android平台中保存所述JAVA层的异常数据的步骤包括:
获取在所述安卓Android平台中运行程序的程序名及当前时间;
将所述JAVA层的异常数据保存于采用程序名以及当前时间命名的文件中;
对所述文件进行压缩。
5.一种安卓Android平台异常处理的装置,其特征在于,所述安卓Android平台包括JAVA层及C++层,所述装置包括:
转换模块,用于在所述JAVA层中某一程序的运行过程中,当检测到C++层的异常数据时,将所述C++层的异常数据转换为JAVA层的异常数据;
收集模块,用于收集转换后的JAVA层的异常数据;
保存模块,用于在所述安卓Android平台中保存所述JAVA层的异常数据;
查询子模块,用于查询是否上传所述JAVA层的异常数据至预置的服务器;若是,则调用上传子模块;
上传子模块,用于上传所述JAVA层的异常数据至所述预置的服务器;
中止模块,用于中止所述程序的运行;
其中,在所述安卓Android平台中注册有针对C++层的各类异常对应的各种异常处理函数;所述转换模块包括:
函数调用单元,用于调用预置的查询或设置信号处理函数sigaction获取所述C++层的异常信号;
函数获取单元,用于采用所述C++层的异常数据获取所述对应的异常处理函数;
接口调用子模块,用于采用所述异常处理函数调用JAVA本地接口JNI;
异常生成子模块,用于采用所述异常处理函数通过JAVA本地接口JNI调用预置的JAVA层信号捕获函数;所述预置的JAVA层信号捕获函数用于依据所述C++层的异常数据生成JAVA层的异常数据。
6.根据权利要求5所述的装置,其特征在于,所述收集模块包括:
调用栈信息获取子模块,用于调用预置的未捕获异常处理函数UncaughtExceptionHandler获取调用栈信息;所述调用栈信息包括所述JAVA层的异常的函数调用关系;
第一异常信息获取子模块,用于从日志LOG信息中提取所述函数调用关系对应的异常数据。
7.根据权利要求5所述的装置,其特征在于,还包括:
JAVA层检测模块,用于若检测到JAVA层的异常数据时,调用预置的未捕获异常处理函数UncaughtExceptionHandler获取调用栈信息;所述调用栈信息包括所述JAVA层的异常的函数调用关系;
第二异常信息获取模块,用于从日志LOG信息中提取所述函数调用关系对应的异常数据。
8.根据权利要求7所述的装置,其特征在于,所述保存模块包括:
程序名获取子模块,用于获取在所述安卓Android平台中运行程序的程序名及当前时间;
异常信息存入子模块,用于将所述JAVA层的异常数据保存于采用程序名以及当前时间命名的文件中;
文件压缩子模块,用于对所述文件进行压缩。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410308634.3A CN104156275B (zh) | 2014-06-30 | 2014-06-30 | 一种安卓Android平台异常处理的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410308634.3A CN104156275B (zh) | 2014-06-30 | 2014-06-30 | 一种安卓Android平台异常处理的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104156275A CN104156275A (zh) | 2014-11-19 |
CN104156275B true CN104156275B (zh) | 2017-10-17 |
Family
ID=51881780
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410308634.3A Active CN104156275B (zh) | 2014-06-30 | 2014-06-30 | 一种安卓Android平台异常处理的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104156275B (zh) |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104503918B (zh) * | 2015-01-12 | 2017-12-19 | 北京国双科技有限公司 | 异常信息的处理方法及装置 |
CN104503770B (zh) * | 2015-01-12 | 2018-07-13 | 北京国双科技有限公司 | 异常信息的处理方法及装置 |
CN104992081B (zh) * | 2015-06-24 | 2018-02-27 | 华中科技大学 | 一种Android应用程序第三方代码的安全增强方法 |
CN105159832B (zh) * | 2015-09-29 | 2018-09-25 | 北京奇虎科技有限公司 | 一种在应用测试中收集应用异常信息的方法、装置和系统 |
CN105354101A (zh) * | 2015-10-09 | 2016-02-24 | 上海瀚银信息技术有限公司 | 一种运行错误处理方法及系统以及智能终端 |
CN105472417B (zh) * | 2015-11-24 | 2020-02-07 | 腾讯科技(深圳)有限公司 | 获取视频播放器异常的方法及装置 |
CN105893248A (zh) * | 2015-12-30 | 2016-08-24 | 乐视致新电子科技(天津)有限公司 | 获取终端设备中异常相关信息的方法和装置 |
CN105760302A (zh) * | 2016-02-29 | 2016-07-13 | 浪潮软件集团有限公司 | 一种移动应用异常信息处理方法 |
CN106201756B (zh) * | 2016-07-12 | 2019-09-06 | 努比亚技术有限公司 | 日志获取装置、移动终端及方法 |
CN106227622B (zh) * | 2016-07-29 | 2019-11-29 | 上海斐讯数据通信技术有限公司 | 一种安卓应用软件异常处理的方法及系统 |
CN106293629B (zh) * | 2016-08-16 | 2019-08-06 | 北京小米移动软件有限公司 | 堆栈获取方法及装置 |
CN106844136B (zh) * | 2016-12-06 | 2020-07-14 | 北京儒博科技有限公司 | 一种程序崩溃信息的收集方法及系统 |
CN106599180A (zh) * | 2016-12-13 | 2017-04-26 | 北京小米移动软件有限公司 | 异常数据的处理方法和装置 |
CN106598770B (zh) * | 2016-12-19 | 2020-08-18 | 北京奇虎科技有限公司 | Android系统中Native层异常上报处理方法及装置 |
CN108268332A (zh) * | 2017-08-10 | 2018-07-10 | 广州神马移动信息科技有限公司 | 网页异常监控方法、设备及系统 |
CN108984203A (zh) * | 2018-06-08 | 2018-12-11 | 广东伊莱特电器有限公司 | 一种用于Android应用运行时数据采集的方法及其系统 |
CN111147445B (zh) * | 2019-11-29 | 2022-05-31 | 杭州数梦工场科技有限公司 | 抓包方法、装置、系统及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20120126920A (ko) * | 2011-05-13 | 2012-11-21 | (주)쉬프트웍스 | Jni를 이용한 안드로이드 난독화 방법 |
CN102981885A (zh) * | 2012-12-11 | 2013-03-20 | 中国工程物理研究院流体物理研究所 | C语言程序设计中基于对象编程的方法及系统 |
CN103544095A (zh) * | 2012-07-12 | 2014-01-29 | 腾讯科技(深圳)有限公司 | 服务器程序的监控方法及其系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9268678B2 (en) * | 2011-12-02 | 2016-02-23 | Vmware, Inc. | Memory defragmentation in a hosted hypervisor |
-
2014
- 2014-06-30 CN CN201410308634.3A patent/CN104156275B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20120126920A (ko) * | 2011-05-13 | 2012-11-21 | (주)쉬프트웍스 | Jni를 이용한 안드로이드 난독화 방법 |
CN103544095A (zh) * | 2012-07-12 | 2014-01-29 | 腾讯科技(深圳)有限公司 | 服务器程序的监控方法及其系统 |
CN102981885A (zh) * | 2012-12-11 | 2013-03-20 | 中国工程物理研究院流体物理研究所 | C语言程序设计中基于对象编程的方法及系统 |
Non-Patent Citations (1)
Title |
---|
android和iOS平台的崩溃捕获和收集;sqq521;《http://blog.csdn.net/sqq521/article/details/19130825》;20140212;第1,3-7页 * |
Also Published As
Publication number | Publication date |
---|---|
CN104156275A (zh) | 2014-11-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104156275B (zh) | 一种安卓Android平台异常处理的方法和装置 | |
CN102479084A (zh) | 一种Android终端获取日志的方法及装置 | |
CN107643981A (zh) | 一种多元业务流程的自动化测试平台及运行方法 | |
CN105589783A (zh) | 应用程序卡顿问题数据获取方法及装置 | |
CN102855184B (zh) | 一种Android自动测试跨应用的装置及方法 | |
CN102419727A (zh) | 一种自动化测试方法及装置 | |
CN103246606B (zh) | Esb平台的性能测试方法和系统 | |
CN108920364A (zh) | 软件缺陷定位方法、装置、终端及计算机可读存储介质 | |
CN108521339A (zh) | 一种基于集群日志的反馈式节点故障处理方法及系统 | |
CN106682036A (zh) | 一种数据交换系统及其交换方法 | |
CN108390920A (zh) | 基于web端的Docker镜像构建方法、装置、存储设备及终端设备 | |
CN105653401A (zh) | 应用系统灾备、运维、监控和应急启停调度方法及装置 | |
CN109388556A (zh) | 一种测试过程的分析方法及装置 | |
CN110515821A (zh) | 基于埋点的事件处理方法、电子设备及计算机存储介质 | |
CN102291274A (zh) | 一种实现网络测试仪表自动适配的系统及方法 | |
CN107025224A (zh) | 一种监控任务运行的方法和设备 | |
CN110309065A (zh) | 测试任务的并发执行方法、装置、设备及存储介质 | |
CN104298671B (zh) | 数据统计分析方法及装置 | |
CN108920379B (zh) | 捕获lua代码异常的方法和装置 | |
CN104008043B (zh) | 跨终端测试方法、待测试端及测试端 | |
CN112532736A (zh) | 一种基于Spring依赖注入的物联网智能设备数据采集方法 | |
CN111107062A (zh) | 一种基于贪婪算法的游戏资源打包方法及系统 | |
CN102184137A (zh) | 一种无人值守的智能的自动化回归测试方法 | |
CN106844211A (zh) | 一种软件测试方法、装置及系统 | |
CN111142859A (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 | ||
CP03 | Change of name, title or address |
Address after: 266071 Shandong city of Qingdao province Jiangxi City Road No. 11 Patentee after: Qingdao Hisense Mobile Communication Technology Co.,Ltd. Country or region after: China Address before: 266071 Shandong city of Qingdao province Jiangxi City Road No. 11 Patentee before: HISENSE MOBILE COMMUNICATIONS TECHNOLOGY Co.,Ltd. Country or region before: China |
|
CP03 | Change of name, title or address |