异常处理方法和装置与流程

文档序号:11063413阅读:284来源:国知局
异常处理方法和装置与制造工艺

本申请涉及数据处理领域,具体而言,涉及一种异常处理方法和装置。



背景技术:

在软件开发包(Software Development Kit,简称为SDK)运行过程中可能因为各种原因产生异常信息,导致SDK运行不平稳,如果在异常产生后SDK继续运行就可能产生各种无法预料的严重后果,例如,应用程序(俗称APP)崩溃等。现有技术中只是在异常产生后将异常信息记录到日志中并发送到服务器,供开发人员后续分析,因此,只能在开发人员了解到问题后修复软件后才能避免软件产生严重后果,处理十分不及时。

针对相关技术中软件开发包异常处理不及时的问题,目前尚未提出有效的解决方案。



技术实现要素:

本申请的主要目的在于提供一种异常处理方法和装置,以解决相关技术中软件开发包异常处理不及时的问题。

为了实现上述目的,根据本申请的一个方面,提供了一种异常处理方法。该方法包括:检测第一处理模块是否发生异常,其中,第一处理模块为软件开发包中的处理模块;以及在检测出第一处理模块发生异常时,通过第一处理模块的异常处理接口对第一处理模块的异常进行处理,其中,第一处理模块的异常处理接口预先封装了第一处理模块的异常的处理方式。

进一步地,在检测出第一处理模块发生异常时,通过第一处理模块的异常处理接口对第一处理模块的异常进行处理包括:判断第一处理模块的异常处理接口中是否存在第一处理模块的异常对应的处理方法;当判断出第一处理模块的异常处理接口中存在第一处理模块的异常对应的处理方法时,通过第一处理模块的异常对应的处理方法对第一处理模块的异常进行处理;以及当判断出第一处理模块的异常处理接口中不存在第一处理模块的异常对应的处理方法时,通过第一处理模块的异常处理接口将第一处理模块的异常情况通知第二处理模块,其中,第二处理模块依赖于第一处理模块,第二处理模块根据异常情况执行预设操作。

进一步地,当判断出第一处理模块的异常处理接口中不存在第一处理模块的异常对应的处理方法时,通过第一处理模块的异常处理接口将第一处理模块的异常情况通知第二处理模块包括:通过第一处理模块的异常处理接口调用第二处理模块的异常处理接口,以将第一处理模块的异常情况通知第二处理模块。

进一步地,在通过第一处理模块的异常处理接口将第一处理模块的异常情况通知第二处理模块之前,该方法还包括:根据第一处理模块的异常信息解析第一处理模块的异常类型;以及获取与第一处理模块的异常类型对应的处理模块,作为第二处理模块。

进一步地,获取与第一处理模块的异常类型对应的处理模块,作为第二处理模块包括:获取预先注册了第一处理模块的异常类型的处理模块,作为第二处理模块。

进一步地,获取与第一处理模块的异常类型对应的处理模块,作为第二处理模块包括:从预设映射表中查找第一处理模块的异常类型对应的处理模块,作为第二处理模块,其中,预设映射表中预先存储有第一处理模块的异常类型和其对应的处理模块的映射关系。

为了实现上述目的,根据本申请的另一方面,提供了一种异常处理装置。该装置包括:检测单元,用于检测第一处理模块是否发生异常,其中,第一处理模块为软件开发包中的处理模块;以及处理单元,用于在检测出第一处理模块发生异常时,通过第一处理模块的异常处理接口对第一处理模块的异常进行处理,其中,第一处理模块的异常处理接口预先封装了第一处理模块的异常的处理方式。

进一步地,处理单元包括:判断模块,用于判断第一处理模块的异常处理接口中是否存在第一处理模块的异常对应的处理方法;处理模块,用于当判断出第一处理模块的异常处理接口中存在第一处理模块的异常对应的处理方法时,通过第一处理模块的异常对应的处理方法对第一处理模块的异常进行处理;以及通知模块,用于当判断出第一处理模块的异常处理接口中不存在第一处理模块的异常对应的处理方法时,通过第一处理模块的异常处理接口将第一处理模块的异常情况通知第二处理模块,其中,第二处理模块依赖于第一处理模块,第二处理模块根据异常情况执行预设操作。

进一步地,通知模块包括:调用子模块,用于通过第一处理模块的异常处理接口调用第二处理模块的异常处理接口,以将第一处理模块的异常情况通知第二处理模块。

进一步地,该装置还包括:解析单元,用于根据第一处理模块的异常信息解析第一处理模块的异常类型;以及获取单元,用于获取与第一处理模块的异常类型对应的处理模块,作为第二处理模块。

本申请通过检测第一处理模块是否发生异常,其中,第一处理模块为软件开发包 中的处理模块;以及在检测出第一处理模块发生异常时,通过第一处理模块的异常处理接口对第一处理模块的异常进行处理,其中,第一处理模块的异常处理接口预先封装了第一处理模块的异常的处理方式,在第一处理模块发生异常时,通过第一处理模块的异常处理接口及时地对第一处理模块的异常进行处理,从而可以避免因软件开发包的处理模块的异常导致整个软件程序的崩溃,解决了相关技术中软件开发包异常处理不及时的问题,进而达到了及时处理软件开发包的异常的效果。

附图说明

构成本申请的一部分的附图用来提供对本申请的进一步理解,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1是根据本申请实施例的异常处理方法的流程图;以及

图2是根据本申请实施例的异常处理装置的示意图。

具体实施方式

需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。

为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。

需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

根据本申请实施例,提供了一种异常处理方法。图1是根据本申请实施例的异常处理方法的流程图,如图1所示,该方法包括如下的步骤S102至步骤S104:

步骤S102:检测第一处理模块是否发生异常,其中,第一处理模块为软件开发包 中的处理模块。

第一处理模块可以是软件开发包(即SDK)中的任意一个处理模块,其中,软件开发包用于应用程序、网页等软件程序中。

具体地,可以通过异常捕捉机制检测SDK中的处理模块是否发生异常,例如,可以通过try catch语句来捕捉SDK中处理模块的异常,一旦捕捉到处理模块的异常,及时抛出异常信息。本申请实施例通过异常捕捉机制实时捕捉第一处理模块的异常,从而可以在异常发生时快速抛出异常信息,以便及时地对异常信息进行处理。

步骤S104:在检测出第一处理模块发生异常时,通过第一处理模块的异常处理接口对第一处理模块的异常进行处理,其中,第一处理模块的异常处理接口预先封装了第一处理模块的异常的处理方式。

本申请实施例预先为SDK中的每个处理模块添加异常处理接口,通过该异常处理接口可以处理该处理模块的异常,也可以响应其他处理模块的异常情况。具体地,异常处理接口可以是封装了异常处理对象和异常处理方法的接口,如下所示:

class SdkException{

string exceptionInfo;//异常信息

string moduleName;//发生异常的模块名称

bool canIgnore;//是否可以忽略

bool moduleWillStop;//模块是否将要停止工作

SdkException innerSdkException;

}

Interface IHandlException{

//是否发生了异常

bool hasException();

//抛出异常

void raiseException(SdkException exception);

//添加关注该模块异常的处理模块

void addObserverHandlException(IHandlException handlException);

//移除关注该模块异常的处理模块

void removeObserverHandlException(IHandlException handlException)

}

需要说明的是,上述定义只是本申请实施例的异常处理接口的一种可选形式,并不构成对本申请实施例的异常处理接口的限制。

本申请实施例中第一处理模块的异常处理接口可以直接对第一处理模块的异常进行处理,也可以将第一处理模块的异常情况通知其依赖处理模块(例如,需要调用第一处理模块的处理模块,或是需要用到第一处理模块的输出数据的处理模块等),从而其依赖处理模块可以根据第一处理模块的异常情况调整操作行为。

本申请通过检测第一处理模块是否发生异常,其中,第一处理模块为软件开发包中的处理模块;以及在检测出第一处理模块发生异常时,通过第一处理模块的异常处理接口对第一处理模块的异常进行处理,其中,第一处理模块的异常处理接口预先封装了第一处理模块的异常的处理方式,在第一处理模块发生异常时,通过第一处理模块的异常处理接口及时地对第一处理模块的异常进行处理,从而可以避免因软件开发包的处理模块的异常导致整个软件程序的崩溃,解决了相关技术中软件开发包异常处理不及时的问题,进而达到了及时处理软件开发包的异常的效果。

优选地,为了实现对第一处理模块的全部异常的处理,在检测出第一处理模块发生异常时,通过第一处理模块的异常处理接口对第一处理模块的异常进行处理包括:判断第一处理模块的异常处理接口中是否存在第一处理模块的异常对应的处理方法;当判断出第一处理模块的异常处理接口中存在第一处理模块的异常对应的处理方法时,通过第一处理模块的异常对应的处理方法对第一处理模块的异常进行处理;以及当判断出第一处理模块的异常处理接口中不存在第一处理模块的异常对应的处理方法时,通过第一处理模块的异常处理接口将第一处理模块的异常情况通知第二处理模块,其中,第二处理模块依赖于第一处理模块,第二处理模块根据异常情况执行预设操作。

实际情况中,SDK中的处理模块存在一些异常,可以通过异常处理接口中预设的处理方法直接进行处理,例如,对应一些数据类型不匹配的异常,可以通过预设处理方法直接将数据的类型转化为目标数据类型。对于这些能够直接处理的异常,可以预先在异常处理接口中定义其对应的处理方法,在该类异常发生时,直接调用异常处理接口中对应的处理方法对其进行处理。

然而,SDK中的处理模块还存在一些不能够直接进行处理的异常,例如,内存泄露、用户定制异常等,此时,可以通过异常处理接口将处理模块的异常情况通知其依赖处理模块,从而其依赖处理模块可以根据异常情况调整操作行为。

具体地,本申请实施例的第二处理模块为SDK中依赖于第一处理模块的处理模块,例如,需要调用第一处理模块的处理模块,或是需要用到第一处理模块的输出数 据的处理模块等。本申请实施例在判断出第一处理模块的异常处理接口中不存在第一处理模块的异常对应的处理方法时,将第一处理模块的异常情况通知第二处理模块,从而第二处理模块可以根据第一处理模块的异常情况调整其自身的操作行为或将异常情况进一步通知依赖于其自身(即第二处理模块)的处理模块。

优选地,当判断出第一处理模块的异常处理接口中不存在第一处理模块的异常对应的处理方法时,通过第一处理模块的异常处理接口将第一处理模块的异常情况通知第二处理模块包括:通过第一处理模块的异常处理接口调用第二处理模块的异常处理接口,以将第一处理模块的异常情况通知第二处理模块。

在第一处理模块的异常处理接口中不存在第一处理模块的异常对应的处理方法时,可以是通过向第二处理模块发送信号以通知第二处理模块,第一处理模块存在异常,也可以是通过第二处理模块检测状态标识以得到第一处理模块的异常情况,例如,在第一处理模块发生异常时将状态标识置为0,在第一处理模块未发生异常时将状态标识置为1。

优选地,本申请实施例在第一处理模块的异常处理接口中不存在第一处理模块的异常对应的处理方法时,通过第一处理模块的异常处理接口调用第二处理模块的异常处理接口,从而可以触发第二处理模块对于第一处理模块的异常情况的处理,其中,第二处理模块的异常处理接口可以处理第二处理模块自身的异常,也可以响应其他处理模块的异常,具体地,可以在第二处理模块的异常处理接口中预先定义不同异常情况的响应方法。本申请实施例通过第一处理模块的异常处理接口调用第二处理模块的异常处理接口以将第一处理模块的异常情况通知第二处理模块,从而可以实现第二处理模块对第一处理模块的异常情况的快速响应。

优选地,在通过第一处理模块的异常处理接口将第一处理模块的异常情况通知第二处理模块之前,该方法还包括:根据第一处理模块的异常信息解析第一处理模块的异常类型;以及获取与第一处理模块的异常类型对应的处理模块,作为第二处理模块。

具体地,异常类型可以包括SDK自身运行时捕捉到的程序异常(例如,内存泄露、字符串超长等)和定制异常(例如,人为定义的不符合用户业务要求的异常)。由于第一处理模块的某些异常情况并不会影响到其所有的依赖处理模块的正常运行,因此,不需要把第一处理模块的异常情况通知其所有的依赖处理模块。

本申请实施例通过对第一处理模块的异常信息进行解析,得到第一处理模块的异常类型,并根据第一处理模块的异常类型获取其对应的处理模块。优选地,获取与第一处理模块的异常类型对应的处理模块,作为第二处理模块包括:获取预先注册了第一处理模块的异常类型的处理模块,作为第二处理模块。

本申请实施例预先对SDK中每个处理模块的异常进行注册,例如,处理模块a包括内存泄露、字符串超长两种类型的异常,处理模块b、处理模块c和处理模块d均为依赖于处理模块a的处理模块,其中,处理模块b预先注册了处理模块a内存泄露的异常,处理模块c预先注册了处理模块a字符串超长的异常,处理模块d未注册处理模块a的异常,在处理模块a发生内存泄露时,将处理模块a的异常情况通知处理模块b(例如,调用处理模块b的异常处理接口),相应地处理模块b对处理模块a的异常情况进行处理,在处理模块a发生因字符串超长导致的异常时,将处理模块a的异常情况通知处理模块c(例如,调用处理模块c的异常处理接口),相应地处理模块c对处理模块a的异常情况进行处理。通过异常的注册可以在异常发生时,注册了该类型的异常的处理模块对该异常进行快速响应。

具体地,异常的注册就是高层处理模块注册低层处理模块的异常,当低层处理模块异常时,一旦此异常是高层处理模块注册过的异常(即关注的异常),则高层处理模块会做出相应的处理,其中,高层处理模块即依赖处理模块,低层处理模块即被依赖的处理模块,例如,处理模块a需要调用处理模块b,或是处理模块a需要利用处理模块b的处理结果,此时,处理模块a依赖于处理模块b,即处理模块a为高层处理模,处理模块b为低层处理模块。

可选地,获取与第一处理模块的异常类型对应的处理模块,作为第二处理模块包括:从预设映射表中查找第一处理模块的异常类型对应的处理模块,作为第二处理模块,其中,预设映射表中预先存储有第一处理模块的异常类型和其对应的处理模块的映射关系。

本申请实施例也可以通过预先建立各种异常类型和其对应的处理模块(即关注该异常类型的处理模块)的映射关系来快速查找某一类型异常对应的处理模块。本申请实施例在解析得到第一处理模块的异常类型后,从预设表中查找该异常类型对应的处理模块,并将第一处理模块的异常情况通知其对应的处理模块,从而其对应的处理模块可以根据第一处理模块的异常情况调整其自身的操作行为(例如,暂停运行或是进入等待状态等)或是将异常情况进一步通知依赖于其自身(即第二处理模块)的处理模块。

需要说明的是,本申请实施例可以是实时对SDK中的每个处理模块进行异常检测,在检测出SDK中某个处理模块异常时,主动将该处理模块异常的异常情况通知SDK中依赖于该处理模块的处理模块,例如,在检测出SDK中的第一处理模块发生异常时,获取SDK中关注第一处理模块的异常情况的处理模块(即第二处理模块),并将第一处理模块的异常情况通知第二处理模块;本申请实施例也可以是在SDK中某个处理模块需要调用其他处理模块时主动询问其调用的处理模块是否异常,例如,在 第二处理模块需要调用第一处理模块时,调用第一处理模块的异常处理接口,通过第一处理模块的异常处理接口返回第一处理模块的运行状态至第二处理模块。

本申请实施例通过跟踪SDK中的处理模块的异常信息,当SDK中的某个处理模块发生异常后,能够及时对异常进行处理,或是及时通知依赖于该处理模块的其他处理模块异常已经发生,并告知依赖处理模块该处理模块是否将要停止工作,从而其他处理模块可以根据情况调整自身的操作行为或将情况反馈给其他依赖处理模块,实现了及时地对SDK的异常进行处理,使得SDK不会因为异常导致应用程序(APP)的崩溃。

需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

根据本申请实施例的另一方面,提供了一种异常处理装置,该异常处理装置可以用于执行本申请实施例的异常处理方法,本申请实施例的异常处理方法也可以通过本申请实施例的异常处理装置来执行。

图2是根据本申请实施例的异常处理装置的示意图,如图2所示,该装置包括:检测单元10和处理单元20。

检测单元10,用于检测第一处理模块是否发生异常,其中,第一处理模块为软件开发包中的处理模块。

第一处理模块可以是软件开发包(即SDK)中的任意一个处理模块,其中,软件开发包用于应用程序、网页等软件程序中。

处理单元20,用于在检测出第一处理模块发生异常时,通过第一处理模块的异常处理接口对第一处理模块的异常进行处理,其中,第一处理模块的异常处理接口预先封装了第一处理模块的异常的处理方式。

本申请实施例预先为SDK中的每个处理模块添加异常处理接口,通过该异常处理接口可以捕捉该处理模块的异常,也可以响应其他处理模块的异常情况。

本申请通过检测单元10检测第一处理模块是否发生异常,其中,第一处理模块为软件开发包中的处理模块;以及处理单元20在检测出第一处理模块发生异常时,通过第一处理模块的异常处理接口对第一处理模块的异常进行处理,其中,第一处理模块的异常处理接口预先封装了第一处理模块的异常的处理方式,在第一处理模块发生异常时,通过第一处理模块的异常处理接口及时地对第一处理模块的异常进行处理,从而可以避免因软件开发包的处理模块的异常导致整个软件程序的崩溃,解决了相关技 术中软件开发包异常处理不及时的问题,进而达到了及时处理软件开发包的异常的效果。

优选地,处理单元20包括:判断模块,用于判断第一处理模块的异常处理接口中是否存在第一处理模块的异常对应的处理方法;处理模块,用于当判断出第一处理模块的异常处理接口中存在第一处理模块的异常对应的处理方法时,通过第一处理模块的异常对应的处理方法对第一处理模块的异常进行处理;以及通知模块,用于当判断出第一处理模块的异常处理接口中不存在第一处理模块的异常对应的处理方法时,通过第一处理模块的异常处理接口将第一处理模块的异常情况通知第二处理模块,其中,第二处理模块依赖于第一处理模块,第二处理模块根据异常情况执行预设操作。

优选地,通知模块包括:调用子模块,用于通过第一处理模块的异常处理接口调用第二处理模块的异常处理接口,以将第一处理模块的异常情况通知第二处理模块。

优选地,该装置还包括:解析单元,用于根据第一处理模块的异常信息解析第一处理模块的异常类型;以及获取单元,用于获取与第一处理模块的异常类型对应的处理模块,作为第二处理模块。

上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。

在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用 时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1