一种应用程序中异常处理方法及装置制造方法及图纸

技术编号:18575782 阅读:20 留言:0更新日期:2018-08-01 10:47
本发明专利技术涉及计算机技术领域,尤其涉及一种应用程序中异常处理方法及装置,该方法为,触发调用预设的异常处理逻辑时,获取在预设的目标代码位置处被捕获的异常;其中,预设的异常处理逻辑是在应用程序编译过程中,织入到应用程序的字节码文件中预设的目标代码位置中的;若确定被捕获的异常不是预设的可忽略异常,则将被捕获的异常抛出,并获得被捕获的异常抛出时生成的异常信息;根据异常信息,对被捕获的异常进行处理,这样,实现了在应用程序开发过程中,尽可能地将crash问题放大,将被捕获的异常重新抛出,防止开发人员过分依赖异常捕获逻辑导致本应该在开发过程中暴露的异常问题无法及时被发现并解决的情况,提高了开发的效率。

An exception handling method and device in an application

The invention relates to the field of computer technology, in particular an exception handling method and device in an application that gets the exception that is captured at the predetermined target code position when the default processing logic is triggered by the call, in which the default exception processing logic is woven during the application compilation process. In the location of the default target code in the bytecode file of the application; if it is determined that the captured exception is not a preset negligible exception, the captured anomaly is thrown and the exception information is generated when the captured exception is thrown; the captured anomaly is processed according to the exception information, so that it is true In the process of application development, the crash problem is magnified as much as possible, and the captured exceptions are re thrown to prevent the developers from relying too much on the exception capture logic. The abnormal problems that should be exposed during the development process can not be found and solved in time, and the efficiency of the development is improved.

【技术实现步骤摘要】
一种应用程序中异常处理方法及装置
本专利技术涉及计算机
,尤其涉及一种应用程序中异常处理方法及装置。
技术介绍
针对安卓(Android)的开发环境,通常采用java语言,会利用java的异常机制,将程序运行过程中的异常情况抛出交由调用方处理,但是如果调用方没有处理异常,则会导致程序崩溃(crash)。因此,现有技术中,根据防御式编程思想,在开发过程中,需要对这种调用方没有处理的异常增加异常捕获语句,同时异常捕获语句也可以解决许多Android系统本身兼容性问题导致的程序crash。但是,过度地使用异常捕获语句,会导致一些本来可以在开发过程中避免或是解决的crash问题,在开发过程中编程时被忽略了,可能会使得本来存在的逻辑问题被隐藏,进而导致在实际产品运行时出现运行异常情况,降低了用户体验,也增加了开发人员的维护工作量,降低开发的效率和有效性。
技术实现思路
本专利技术实施例提供一种应用程序中异常处理方法及装置,以解决现有技术中对异常的处理导致本可以在开发过程中解决的异常被忽略,降低了开发的效率和有效性的问题。本专利技术实施例提供的具体技术方案如下:根据本专利技术实施例的第一方面,提供了一种应用程序中异常处理方法,包括:触发调用预设的异常处理逻辑时,获取在预设的目标代码位置处被捕获的异常;其中,所述预设的异常处理逻辑是在所述应用程序编译过程中,织入到所述应用程序的字节码文件中所述预设的目标代码位置中的;若确定所述被捕获的异常不是预设的可忽略异常,则将所述被捕获的异常抛出,并获得所述被捕获的异常抛出时生成的异常信息;根据所述异常信息,对所述被捕获的异常进行处理。结合本专利技术实施例的第一方面,触发调用预设的异常处理逻辑之前,进一步包括:确定所述预设的异常处理逻辑对应的运行期的控制开关开启。这样,提供了控制开关,可以根据实际需求确定是否开启该控制开关,在控制开关开启时才调用异常处理逻辑,提高了灵活性和用户的可控性。结合本专利技术实施例的第一方面,确定所述被捕获的异常不是预设的可忽略异常,具体包括:获取所述被捕获的异常的类名和实例;根据预设的白名单,判断所述被捕获的异常的类名和实例是否在所述预设的白名单中,若确定在,则确定所述被捕获的异常为可忽略异常,若确定不在,则确定所述被捕获的异常不是预设的可忽略异常,其中,所述预设的白名单中至少包括预设的可忽略异常列表。这样,设置白名单,通过白名单进行校验,确定是否将被捕获的异常抛出,提高了可行性和效率。结合本专利技术实施例的第一方面,所述字节码文件,为Android系统中所述应用程序的.class文件。结合本专利技术实施例的第一方面,所述预设的目标代码位置的确定方式为:根据预设的正则表达式匹配规则,在所述应用程序的字节码文件中查找所述预设的目标代码位置,其中,所述预设的正则表达式匹配规则,是根据预设的出现异常的代码的特征进行设置的。结合本专利技术实施例的第一方面,所述预设的目标代码位置为Android系统中的异常捕获语句块所在的位置。根据本专利技术实施例的第二方面,提供了一种应用程序中异常处理装置,包括:获取模块,用于触发调用预设的异常处理逻辑时,获取在预设的目标代码位置处被捕获的异常;其中,所述预设的异常处理逻辑是在所述应用程序编译过程中,织入到所述应用程序的字节码文件中所述预设的目标代码位置中的;异常抛出模块,用于若确定所述被捕获的异常不是预设的可忽略异常,则将所述被捕获的异常抛出,并获得所述被捕获的异常抛出时生成的异常信息;处理模块,用于根据所述异常信息,对所述被捕获的异常进行处理。结合本专利技术实施例的第二方面,触发调用预设的异常处理逻辑之前,进一步包括:第一确定模块,用于确定所述预设的异常处理逻辑对应的运行期的控制开关开启。结合本专利技术实施例的第二方面,确定所述被捕获的异常不是预设的可忽略异常,所述异常抛出模块具体用于:获取所述被捕获的异常的类名和实例;根据预设的白名单,判断所述被捕获的异常的类名和实例是否在所述预设的白名单中,若确定在,则确定所述被捕获的异常为可忽略异常,若确定不在,则确定所述被捕获的异常不是预设的可忽略异常,其中,所述预设的白名单中至少包括预设的可忽略异常列表。结合本专利技术实施例的第二方面,所述字节码文件,为Android系统中所述应用程序的.class文件。结合本专利技术实施例的第二方面,进一步包括:第二确定模块,用于:根据预设的正则表达式匹配规则,在所述应用程序的字节码文件中查找所述预设的目标代码位置,其中,所述预设的正则表达式匹配规则,是根据预设的出现异常的代码的特征进行设置的。结合本专利技术实施例的第二方面,所述预设的目标代码位置为Android系统中的异常捕获语句块所在的位置。根据本专利技术实施例的第三方面,提供了一种计算机装置,包括:至少一个存储器,用于存储程序指令;至少一个处理器,用于调用所述存储器中存储的程序指令,按照获得的程序指令执行本专利技术实施例中的应用程序中异常处理方法。根据本专利技术实施例的第四方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一种应用程序中异常处理方法的步骤。本专利技术实施例中,触发调用预设的异常处理逻辑时,获取在预设的目标代码位置处被捕获的异常;其中,所述预设的异常处理逻辑是在所述应用程序编译过程中,织入到所述应用程序的字节码文件中所述预设的目标代码位置中的;若确定所述被捕获的异常不是预设的可忽略异常,则将所述被捕获的异常抛出,并获得所述被捕获的异常抛出时生成的异常信息;根据所述异常信息,对所述被捕获的异常进行处理,这样,在编译过程中织入异常处理逻辑,运行调用该异常处理逻辑时,可以将被捕获或保护的异常重新暴露出来,实现了在应用程序开发过程中,尽可能地将crash问题放大,提醒开发过程中容易忽略的异常,避免本应该在开发过程中暴露的异常问题无法及时被发现并解决的问题,使得开发人员可以在开发阶段就可以发现并解决更多的异常,减少了开发人员的维护工作量,也提高了开发的效率和有效性,并且,本专利技术实施例中,可以通过查找目标代码的位置,自动织入异常处理逻辑,无需修改程序现有的逻辑,实现了非侵入式的进攻式编程思想。附图说明图1为本专利技术实施例中一种应用程序中异常处理方法的流程图;图2为本专利技术实施例中具体应用场景中应用程序中异常处理执行过程示意图;图3为本专利技术实施例中通过白名单对被捕获的异常进行校验的执行过程流程图;图4为本专利技术实施例中在编译过程中异常处理逻辑织入的执行过程示意图;图5为本专利技术实施例中应用程序中异常处理装置结构示意图;图6为本专利技术实施例中计算机装置结构示意图。具体实施方式下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,并不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。为便于对本专利技术实施例的理解,下面先对几个概念进行简单介绍:非侵入式编程:非侵入式的代码则没有过多的依赖,可以很方便的迁移到其他地方。侵入式编程:让用户代码产生对框架的依赖,这些代码不能在框架外使用,不利于代码的复用。进攻式编程:主动暴露可能出现的错误,在开发阶段让它显现出来,而在产品代本文档来自技高网...

【技术保护点】
1.一种应用程序中异常处理方法,其特征在于,包括:触发调用预设的异常处理逻辑时,获取在预设的目标代码位置处被捕获的异常;其中,所述预设的异常处理逻辑是在所述应用程序编译过程中,织入到所述应用程序的字节码文件中所述预设的目标代码位置中的;若确定所述被捕获的异常不是预设的可忽略异常,则将所述被捕获的异常抛出,并获得所述被捕获的异常抛出时生成的异常信息;根据所述异常信息,对所述被捕获的异常进行处理。

【技术特征摘要】
1.一种应用程序中异常处理方法,其特征在于,包括:触发调用预设的异常处理逻辑时,获取在预设的目标代码位置处被捕获的异常;其中,所述预设的异常处理逻辑是在所述应用程序编译过程中,织入到所述应用程序的字节码文件中所述预设的目标代码位置中的;若确定所述被捕获的异常不是预设的可忽略异常,则将所述被捕获的异常抛出,并获得所述被捕获的异常抛出时生成的异常信息;根据所述异常信息,对所述被捕获的异常进行处理。2.如权利要求1所述的方法,其特征在于,触发调用预设的异常处理逻辑之前,进一步包括:确定所述预设的异常处理逻辑对应的运行期的控制开关开启。3.如权利要求1或2所述的方法,其特征在于,确定所述被捕获的异常不是预设的可忽略异常,具体包括:获取所述被捕获的异常的类名和实例;根据预设的白名单,判断所述被捕获的异常的类名和实例是否在所述预设的白名单中,若确定在,则确定所述被捕获的异常为可忽略异常,若确定不在,则确定所述被捕获的异常不是预设的可忽略异常,其中,所述预设的白名单中至少包括预设的可忽略异常列表。4.如权利要求1所述的方法,其特征在于,所述预设的目标代码位置的确定方式为:根据预设的正则表达式匹配规则,在所述应用程序的字节码文件中查找所述预设的目标代码位置,其中,所述预设的正则表达式匹配规则,是根据预设的出现异常的代码的特征进行设置的。5.如权利要求1所述的方法,其特征在于,所述预设的目标代码位置为Android系统中的异常捕获语句块所在的位置。6.一种应用程序中异常处理装置,其特征...

【专利技术属性】
技术研发人员:龙泉
申请(专利权)人:腾讯科技深圳有限公司
类型:发明
国别省市:广东,44

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

1