一种处理异常信息的方法、装置和系统与流程

文档序号:25421994发布日期:2021-06-11 21:33阅读:208来源:国知局
一种处理异常信息的方法、装置和系统与流程

本发明涉及移动互联、自动程序设计技术领域,尤其涉及一种处理异常信息的方法、装置和系统。



背景技术:

随着互联网技术的飞速发展,基于互联网技术的互联网应用成为人们工作和生活中不可或缺的工具;保持互联网应用运行的稳定性非常重要,因此及时捕获互联网应用在运行中产生的异常信息成为运维的重要工作之一。

目前处理异常信息的方法是运维人员通过查看浏览器的控制台,而获取互联网应用运行时产生的异常信息;并根据异常信息采取相应地修复方法;但是,这样的处理异常信息的方法存在效率较低、获取异常信息实时性较差、操作复杂度较高的问题。



技术实现要素:

有鉴于此,本发明实施例提供一种处理异常信息的方法、装置和系统,能够基于应用的源代码,生成抽象语法树,从抽象语法树中查找待处理的节点,为节点增加异常处理信息后生成新的抽象语法树,并基于新的抽象语法树生成应用的目标代码,以通过新增加的异常处理代码获取应用的异常信息,通过为源代码自动添加异常处理代码提高了处理异常信息的效率,提高了获取异常信息实时性,克服了运维人员操作复杂度较高的问题。

为实现上述目的,根据本发明实施例的一个方面,提供了一种处理异常信息的方法,其特征在于,包括:获取应用的源代码,为所述源代码生成抽象语法树;从所述抽象语法树中查找与预设的特征标识相匹配的节点;在所述抽象语法树中,为查找到的所述节点添加设置的异常处理信息;基于添加了所述异常处理信息的抽象语法树,生成目标代码,所述目标代码包括基于所述异常处理信息生成的异常处理代码;响应于所述应用的触发操作,运行所述目标代码,并通过所述异常处理代码处理所述应用产生的异常信息。

可选地,所述处理异常信息的方法,其特征在于,

所述预设的特征标识包含函数声明标识、函数表达式标识、箭头函数标识中的任意一种。

可选地,所述处理异常信息的方法,其特征在于,为所述源代码生成的抽象语法树,包括:解析所述源代码;根据解析的结果包括的一个或多个节点以及节点内容,生成抽象语法树。

可选地,所述处理异常信息的方法,其特征在于,进一步包括:

获取查找到的所述节点的节点内容,判断所述节点内容是否满足添加异常处理信息的条件,如果满足,则执行为查找到的所述节点添加对应的异常处理信息的步骤,否则,不为所述节点添加对应的异常处理信息。

可选地,所述处理异常信息的方法,其特征在于,判断所述节点内容是否满足添加异常处理信息的条件,包括:

判断所述节点内容中是否包含与异常处理信息匹配的文本,若是,则确定所述节点内容不满足添加异常处理信息的条件;否则,继续判断所述节点内容是否满足添加异常处理信息的条件。

可选地,所述处理异常信息的方法,其特征在于,判断所述节点内容是否满足添加异常处理信息的条件,包括:

判断所述节点内容对应的行数是否小于设定行数阈值,若是,则确定所述节点内容不满足添加异常处理信息的条件;否则,继续判断所述节点内容是否满足添加异常处理信息的条件。

可选地,所述处理异常信息的方法,其特征在于,判断所述节点内容是否满足添加异常处理信息的条件,包括:

判断所述节点内容中包含的注释文本中,是否存在指示禁止异常处理的文本,若是,则确定所述节点内容不满足添加异常处理信息的条件;否则,继续判断所述节点内容是否满足添加异常处理信息的条件。

可选地,所述处理异常信息的方法,其特征在于,

所述异常处理信息包括相匹配的捕获异常信息和异常上报信息;

为查找到的所述节点添加对应的异常处理信息,包括:获取查找到的所述节点的节点内容,基于所述节点内容,添加相匹配的所述捕获异常信息和所述异常上报信息。

可选地,所述处理异常信息的方法,其特征在于,生成目标代码,包括:根据所述捕获异常信息,在所述节点内容对应的源代码的外层,添加捕获异常代码;根据所述异常上报信息,为所述节点内容对应的源代码添加异常上报代码。

可选地,所述处理异常信息的方法,其特征在于,通过所述异常处理代码处理所述应用产生的异常信息,包括:通过一个或多个所述捕获异常代码,以捕获所述节点内容对应的异常信息;通过所述异常上报代码,将所述异常信息上报到服务端。

可选地,所述处理异常信息的方法,其特征在于,进一步包括:

异常上报代码包括构建图片子模块和上报子模块;

通过所述异常处理代码处理所述应用产生的异常信息,包括:

通过所述构建图片子模块为所述应用产生的异常信息构建参考图片,并将所述异常信息与所述参考图片绑定,为绑定了所述异常信息的参考图片生成对应的图片标识;通过所述上报子模块将上报异常信息的服务端地址、所述图片标识以及所述异常信息拼接为统一资源定位符,并利用所述统一资源定位符上报所述异常信息到所述服务端地址对应的服务端。

可选地,所述处理异常信息的方法,其特征在于,进一步包括:

创建插件,以利用所述插件为所述源代码生成抽象语法树,在所述抽象语法树中查找到的所述节点添加所述设置的异常处理信息,并基于所述异常处理信息生成对应的所述异常处理代码。

可选地,所述处理异常信息的方法,其特征在于,进一步包括:

从服务端获取所述应用的节点的异常信息;所述异常信息包含多个子信息;针对所述节点,按照类别汇总所述子信息,并将所述子信息进行可视化展示,以分类展示所述应用的节点的异常信息。

为实现上述目的,根据本发明实施例的第二方面,提供了一种处理异常信息的方法,其特征在于,包括:接收一个或多个上报异常信息的请求;分别从所述请求对应的统一资源定位符中获取对应的异常信息;基于预先设置的多种信息类别,解析所述异常信息;对解析的结果包括的每一种所述信息类别对应的子信息进行分类存储。

可选地,所述处理异常信息的方法,其特征在于,进一步包括:响应于接收到异常信息展示请求,将分类存储的每一种所述信息类别对应的子信息发送给客户端,以在所述客户端进行分类展示。

为实现上述目的,根据本发明实施例的第三方面,提供了一种处理异常信息的客户端,其特征在于,包括:查找节点模块、添加异常处理模块和处理异常信息模块;其中,

所述查找节点模块,用于获取应用的源代码,为所述源代码生成抽象语法树;从所述抽象语法树中查找与预设的特征标识相匹配的节点;

所述添加异常处理模块,用于在所述抽象语法树中,为查找到的所述节点添加设置的异常处理信息;基于添加了所述异常处理信息的抽象语法树,生成目标代码,所述目标代码包括基于所述异常处理信息生成的异常处理代码;

所述处理异常信息模块,用于响应于所述应用的触发操作,运行所述目标代码,并通过所述异常处理代码处理所述应用产生的异常信息。

为实现上述目的,根据本发明实施例的第四方面,提供了一种处理异常信息的服务器,其特征在于,包括:解析异常信息模块和存储异常信息模块;其中,

所述解析异常信息模块,用于接收一个或多个上报异常信息的请求;分别从所述请求对应的统一资源定位符中获取对应的异常信息;基于预先设置的多种信息类别,解析所述异常信息;

所述存储异常信息模块,用于对解析的结果包括的每一种所述信息类别对应的子信息进行分类存储。

为实现上述目的,根据本发明实施例的第五方面,提供了一种处理异常信息的系统,其特征在于,包括第三方面所述的一个或多个处理异常信息的客户端和第四方面所述的处理异常信息的服务器。

为实现上述目的,根据本发明实施例的第六方面,提供了一种处理异常信息的电子设备,其特征在于,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如上述处理异常信息的方法中任一所述的方法。

为实现上述目的,根据本发明实施例的第七方面,提供了一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如上述处理异常信息的方法中任一所述的方法。

上述发明中的一个实施例具有如下优点或有益效果:本发明通过基于应用源代码生成抽象语法树,基于抽象语法树查找需要添加异常处理代码的节点并自动添加异常处理信息,从而基于各个异常处理信息生成对应的异常处理代码,实现了自动为应用添加异常处理的代码模块,从而提高了处理异常信息的效率,提高了获取异常信息实时性,克服了运维人员操作复杂度较高的问题。

上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。

附图说明

附图用于更好地理解本发明,不构成对本发明的不当限定。其中:

图1是本发明一个实施例提供的一种处理异常信息的方法的流程示意图;

图2是本发明一个实施例提供的一种添加异常处理代码的流程示意图;

图3是本发明一个实施例提供的一种处理异常信息的方法的示意图;

图4是本发明一个实施例提供的一种处理异常信息的客户端的装置的结构示意图;

图5是本发明一个实施例提供的一种处理异常信息的服务器的装置的结构示意图;

图6是本发明一个实施例提供的一种处理异常信息的系统的结构示意图;

图7是本发明实施例可以应用于其中的示例性系统架构图;

图8是适于用来实现本发明实施例的终端设备或服务器的计算机系统的结构示意图。

具体实施方式

以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。

互联网应用程序代码通常主要包括html文本、css和javascript。其中html文本用来展示信息,是互联网应用页面的骨架;css是层叠样式表,用于互联网应用的展现,关联于互联网应用的外观;javascript在互联网应用程序中用于执行业务逻辑交互,如用户点击按钮,用户提交操作等。

互联网应用程序的运行中的异常主要来自于javascript代码执行。由于javascript语言是单线程,若javascript的某一行代码出现错误或异常,会导致后续所有的javascript代码无法执行,由此导致互联网应用无法提供稳定服务。当互联网应用报错(出现异常)时,应用维护人员往往通过查看浏览器的控制台查看报错信息,javascript报错信息会在浏览器控制台显示(例如:按下键盘的f12键可以打开浏览器控制台)。

现有方法的缺陷是:1.效率较低,需要维护人员手动打开浏览器,在控制台查看相关报错或异常信息。2.异常信息容易丢失,当运维人员在控制台查看信息时,可能异常已经不存在了,导致应用运维人员看不到相关信息。3.操作复杂,javascript的异常可能是由于浏览器版本不兼容的原因,此时应用运维人员需要安装多个低版本浏览器来复现异常,而且,有些异常复现的难度高,从而提高了操作的复杂度。

因此将javascript代码运行产生的异常信息实时上报,对于快速定位互联网应用的运维有重要作用,同时可以根据异常信息不断优化应用,进而提升互联网应用的性能和稳定性。

鉴于此,如图1所示,本发明实施例提供了一种处理异常信息的方法,该方法可以包括以下步骤:

步骤s101:获取应用的源代码,为所述源代码生成抽象语法树;从所述抽象语法树中查找与预设的特征标识相匹配的节点。

具体地,获取应用的源代码,其中,应用为需要监控是否产生异常信息的应用,例如互联网应用;进一步地,基于应用的源代码,为所述源代码生成抽象语法树,其中,抽象语法树(abstractsyntaxcode,ast),用于将源代码解析为树状结构表示,并描述源代码的信息。具体地,为所述源代码生成的抽象语法树,包括:解析所述源代码;根据解析的结果包括的一个或多个节点以及节点内容,生成抽象语法树。以javascript代码作为源代码为例,可以使用“@babel/parser”库解析源代码;

例如:如下为源代码包含的一个函数的示例:

functiontest(){

console.log('functiondeclaration');

}

将过解析后得到抽象语法树中一个节点的示意片段,“body”指示的部分为节点内容;即,基于一个或多个节点以及节点内容,生成抽象语法树;其中,抽象语法树的格式可以为json结构对象,示例如下所示:

进一步地,从所述抽象语法树中查找与预设的特征标识相匹配的节点。其中,预设的特征标识包含函数声明标识、函数表达式标识、箭头函数标识中的任意一种;在上述抽象语法树片段中,"type":"functiondeclaration"中的functiondeclaration为函数声明标识。进一步地,函数表达式标识可以为“functionexpression”,箭头函数标识可以为“arrowfunctionexpression”,即,从所述抽象语法树中查找与预设的特征标识相匹配的节点即查找函数声明标识、函数表达式标识、箭头函数标识中的任意一种。

进一步地,以javascript语言中函数为例说明预设的特征标识,例如:javascript语言中函数包含以下表示形式:函数声明(具有对应的函数声明标识)、函数表达式(具有对应的函数表达式标识)、箭头函数(具有对应的箭头函数标识)。其中:

函数声明:指javascript中使用function关键词定义函数。例如:如下代码示例为一个函数声明:

functionfunctionname(parameters){

待执行的代码

}

函数表达式:指可以将函数定义赋值到变量上,形成函数表达式,如下示例代码所示:

varx=function(a,b){returna*b};

箭头函数:如下示例代码所示:x=>x*x。箭头函数比函数声明或者函数表达式简洁,箭头函数适合需要匿名函数的地方。

进一步地,遍历所述抽象语法树,从所述抽象语法树中查找与预设的特征标识相匹配的节点即查找函数声明标识、函数表达式标识、箭头函数标识中的任意一种。可以理解的是,通过查找预设的特征标识确定执行代码的业务逻辑的函数,从而为函数代码添加捕获异常信息,达到为应用处理异常信息的目的。

步骤s102:在所述抽象语法树中,为查找到的所述节点添加设置的异常处理信息;基于添加了所述异常处理信息的抽象语法树,生成目标代码,所述目标代码包括基于所述异常处理信息生成的异常处理代码。

具体地,根据步骤s101所描述,从所述抽象语法树中查找与预设的特征标识相匹配的节点,在查找到匹配的节点后,为查找到的所述节点添加设置的异常处理信息,并基于添加了所述异常处理信息的抽象语法树,生成目标代码。

例如:源代码的片段如下所示:

functiontest(){

console.log('functiondeclaration');}

基于上述示例源代码生成的目标代码的示例如下所示:

functiontest(){

try{console.log('functiondeclaration');

}catch(error){report();}

具体地,所述异常处理信息包括相匹配的捕获异常信息和异常上报信息;其中捕获异常信息例如为try语句和catch语句对应的抽象语法树描述;与捕获异常信息匹配的异常上报信息包含于catch语句中,用于处理将捕获到的异常信息上报的业务逻辑。进一步地,为查找到的所述节点添加对应的异常处理信息,包括:获取查找到的所述节点的节点内容,基于所述节点内容,添加相匹配的所述捕获异常信息和所述异常上报信息。

进一步地,根据所述捕获异常信息,在所述节点内容对应的源代码的外层,添加捕获异常代码;例如:节点内容(“body”)对应的源代码为:

console.log('functiondeclaration');

则在所述节点内容对应的源代码的外层,添加捕获异常代码,如下所示:

try{console.log('functiondeclaration');}catch(error){report();}

其中,report()为异常上报代码的示例;即,根据所述异常上报信息,为所述节点内容对应的源代码添加异常上报代码。具体地,从抽象语法树遍历匹配的函数声明、函数表达式和箭头函数的节点,使用“babel-traverse”库对以上各种函数添加异常处理信息,异常处理信息包括:try语句和对应的catch语句,配置catch语句内容,catch语句的参数是“error”,catch语句内实现异常信息实时上报操作;配置try语句内容,try语句内容的由函数体和catch语句组成。

关于基于应用的源代码,自动生成包含异常处理代码的目标代码的流程与步骤s201-步骤s209的描述一致,在此不再赘述。

进一步地,可以使用“@babel/core”库将添加异常处理信息的抽象语法树生成为目标代码,例如:使用transformfromastsync方法生成javascript代码。优选地,本发明的一个实施例为创建插件,利用插件自动添加异常处理信息,以生成异常处理代码,可以采用如下方法使用该插件:

1)安装本插件。

2)在webpack中配置本插件。配置的示例代码如下所示,通过示例代码可完成对应用中对javascript代码自动添加异常处理代码:

rules:[{test:/\.js$/,exclude:/node_modules/,

use:["插件","babel-loader",]}]

即,创建插件,以利用所述插件为所述源代码生成抽象语法树,在所述抽象语法树中查找到的所述节点添加所述设置的异常处理信息,并基于所述异常处理信息生成对应的所述异常处理代码。

其中,webpack是一个javascript应用程序的静态模块打包器。webpack会打包所有应用的资源(例如:样式文件、javascript文件、图片文件、字体文件),以使应用可以直接引入打包后的文件。使用webpack打包应用,可以提升应用的性能,提高浏览器版本的兼容性。babel是一个javascript编译器,主要用于将ecmascript2015+版本的代码转换为向后兼容的javascript语法,以使javascript代码能够运行在当前版本和旧版本的浏览器或其他运行环境中。本发明实施例所创建的插件可以为babel插件,通过该babel插件可以自动添加异常处理代码。

步骤s103:响应于所述应用的触发操作,运行所述目标代码,并通过所述异常处理代码处理所述应用产生的异常信息。

具体地,当应用运行时,即运行所述目标代码,以通过目标代码包含的异常处理代码处理所述应用产生的异常信息;通过一个或多个所述捕获异常代码,以捕获所述节点内容对应的异常信息(例如:从catch语句的error对象获取到异常信息);通过所述异常上报代码,将所述异常信息上报到服务端。具体地,关于捕获异常代码和异常上报代码的描述与步骤s102的描述一致,在此不再赘述。

其中,上报的异常信息可以包括:

异常信息的描述:从catch的error对象获取到(在error的消息字段中),通过该字段直接表示异常发生的根本原因。

浏览器版本:可以通过使用navigator对象获取,可以获取异常是在哪个浏览器的哪个版本出现的异常。

产生异常信息所在的页面的url:可以通过使用window.location.href获取,表示此异常发生的页面,以使运维人员在查看异常信息后可以基于相应页面复现异常。

异常发生时间:可以获取异常发生时间,并转换为年月日时分秒(yyyy-mm-ddhh:mm:ss)的格式,以使运维人员可以根据异常发生的时间信息,在发生异常比较多的时间段加大运维力度。

可以理解的是,尽可能多的上报异常信息,以帮助应用运维人员更准确地、有效率地通过异常信息确定引起异常的代码。

进一步,处理异常信息包括上报异常信息;

上报异常信息可以用两种方法:

第一种方法:异常信息上报可以使用ajax请求上报,即当异常发生时,通过异常处理代码获取异常信息,给服务端发送上报请求,上报请求信息包括异常信息的描述(或指示异常的代码)、浏览器版本、产生异常信息页面的url、异常发生时间。使用ajax上报异常信息的一个缺陷是需要解决浏览器和服务端的跨域问题,服务端的接收异常信息上报的接口都需要配置支持跨域请求,操作比较复杂。

第二种方法:优选地,所利用的异常上报代码包括构建图片子模块和上报子模块;通过所述异常处理代码处理所述应用产生的异常信息,包括:通过所述构建图片子模块为所述应用产生的异常信息构建参考图片,并将所述异常信息与所述参考图片绑定,为绑定了所述异常信息的参考图片生成对应的图片标识。

其中构建图片子模块,包括:

1)创建一个参考图片的对象,优选地,设置参考图片的大小是宽度为1像素,高度为1像素,即尽可能减小网络中传输文件的体积。

2)封装获取的异常信息。将异常信息的描述、浏览器版本、生成异常信息页面的url和异常发生时间等异常信息使用“&”字符拼接在服务端接收异常信息接口后,例如“http://服务端异常信息上报域名:端口?异常信息=a&异常页面url=b&浏览器信息=c&异常发生时间=d”格式,其中a,b,c,d分别代表异常相关子信息。例如:http://errorreport.com:8088/123.png?异常信息=a&异常页面url=b&浏览器信息=c&异常发生时间=d。

3)将所述异常信息与所述参考图片绑定,例如:将参考图片的属性中的地址设置为2)的步骤中所描述的封装后的异常信息(格式为url)。然后利用url(统一资源定位符)向服务端发送请求,以将异常信息上报到服务端。即,通过所述上报子模块将上报异常信息的服务端地址、所述图片标识以及所述异常信息拼接为统一资源定位符,并利用所述统一资源定位符上报所述异常信息到所述服务端地址对应的服务端;这种异常信息上报方法解决了浏览器跨域问题,服务器不需要额外相关配置。由此可见,该方法操作简单,相比于ajax请求不会占用大的网络带宽;同时使用参考图片作为请求的一部分,解决跨域问题(web应用中图片请求不受浏览器跨域限制)。

进一步地,在上报异常信息以后,可以从服务器获取各个异常信息,并利用可视化显示应用对应的各个异常信息的子信息,例如:如表1的示意图所示,针对节点,分类显示异常信息的子信息,分类的方法例如:将异常信息分为异常信息的描述(或指示异常的代码)、浏览器版本、产生异常信息页面的url、异常发生时间等类别并分别显示。

即,从服务端获取所述应用的节点的异常信息;所述异常信息包含多个子信息;针对所述节点,按照类别汇总所述子信息,并将所述子信息进行可视化展示,以分类展示所述应用的节点的异常信息。

本发明对异常信息可视化展示页面的形式和内容不做限定,例如:异常信息展示页面除了包含页面展示区可以添加搜索区,运维人员可以根据将异常信息分为异常信息的描述(或指示异常的代码)、浏览器版本、产生异常信息页面的url、异常发生时间搜索异常信息,进而查看应用包含对应的程序代码,从而修复异常问题,提高了定位异常信息和对应的代码的效率。

如图2所示,本发明实施例提供了一种添加异常处理代码的方法,该方法可以包括以下步骤:

步骤s201:获取应用的源代码,为所述源代码生成的抽象语法树,遍历抽象语法树中的节点。

具体地,关于获取应用的源代码,为所述源代码生成的抽象语法树,遍历抽象语法树中的节点的描述与步骤s101的描述一致,在此不再赘述。

步骤s202:从所述抽象语法树中查找的节点是否与预设的特征标识相匹配。若是,则执行步骤s203;否则继续查找下一个节点。

具体地,判断从所述抽象语法树中查找的节点是否与预设的特征标识相匹配;关于预设的特征标识,以及查找节点的描述与步骤s101的描述一致,在此不再赘述。

步骤s203:获取查找到的所述节点的节点内容,判断所述节点内容是否满足添加异常处理信息的条件。

具体地,在查找到匹配于预设的特征标识的节点的情况下,获取节点的节点内容,例如:节点对应的抽象语法树中的“body”对应的内容,如下所示的示例函数节点中包含的console.log('functiondeclaration')部分为对应节点内容的代码。

functiontest(){console.log('functiondeclaration');}

进一步地,判断所述节点内容是否满足添加异常处理信息的条件。示例性地,如步骤s204、步骤s205、步骤s206描述的情况,为“不为所述节点添加对应的异常处理信息”的情况,否则,则执行为查找到的所述节点添加对应的异常处理信息的步骤。

步骤s204:判断所述节点内容中是否包含与异常处理信息匹配的文本。

具体地,判断所述节点内容中是否包含与异常处理信息匹配的文本,例如:函数已包含了try-catch异常处理代码,即函数已经具有处理异常信息的代码。如下面的示例代码所示:

则解析得到抽象语法树中的节点内容(body对象)是try语句,try语句即为与异常处理信息匹配的文本,则不为所述节点添加对应的异常处理信息

即,判断所述节点内容是否满足添加异常处理信息的条件,包括:

判断所述节点内容中是否包含与异常处理信息匹配的文本,若是,则确定所述节点内容不满足添加异常处理信息的条件;否则,继续判断所述节点内容是否满足添加异常处理信息的条件。

步骤s205:判断所述节点内容对应的行数是否小于设定行数阈值。

具体地,判断所述节点内容对应的行数是否小于设定行数阈值;例如:当函数主体内容少于设定行数阈值(limit_line)时,不为所述节点添加对应的异常处理信息。当limit_line设置为0时,不管函数包含多少行代码,默认都会添加对应的异常处理信息。可以理解的是,limit_line是根据可以设置的,例如:用户设置limit_line为2,则,在如下代码中:

functiontest(){

console.log('functiondeclaration');

}

其中,可知test函数的包含的函数体为一行,即:

“console.log('functiondeclaration');”

即,函数主体内容的行数(即节点内容对应的行数)为1,小于设定行数阈值limit_line(例如设置为2),则不为所述节点添加对应的异常处理信息。

即,判断所述节点内容是否满足添加异常处理信息的条件,包括:

判断所述节点内容对应的行数是否小于设定行数阈值,若是,则确定所述节点内容不满足添加异常处理信息的条件;否则,继续判断所述节点内容是否满足添加异常处理信息的条件。

步骤s206:判断所述节点内容中包含的注释文本中,是否存在指示禁止异常处理的文本。若是,执行步骤s209,否则执行s207。

具体地,判断所述节点内容中包含的注释文本中,是否存在指示禁止异常处理的文本,其中,可以为某个函数的注释文本添加指示禁止异常处理的文本,例如:字符串“disable-try-catch”为指示禁止异常处理的文本,则当函数的注释文本中包含“disable-try-catch”字符时,指示不为所述节点添加对应的异常处理信息

例如:注释文本可以包含以下类型:函数前面的注释文本(leadingcomments),行内注释文本(innercomments)和尾部注释文本(trailingcomments)。

函数前面的注释文本(leadingcomments)如下所示的/**/符号所包含的内容:

/*leadingcommentsdisable-try-catch*/

functiontest(){console.log('functiondeclaration');}

行内注释(innercomments)如下所示的//符号后所对应的内容:

functiontest(){

//innercommentsdisable-try-catch

console.log('functiondeclaration');}

尾部注释(trailingcomments)如下所示的//符号后所对应的内容:

functiontest(){

console.log('functiondeclaration');

//trailingcommentsdisable-try-catch}

针对上述类型的注释文本,判断所述节点内容中包含的注释文本中,是否存在指示禁止异常处理的文本,若在注释文本中查找到“disable-try-catch”字符串,则不为所述节点添加对应的异常处理信息。

即,判断所述节点内容中包含的注释文本中,是否存在指示禁止异常处理的文本,若是,则确定所述节点内容不满足添加异常处理信息的条件;否则,继续判断所述节点内容是否满足添加异常处理信息的条件。

步骤s207:执行为查找到的所述节点添加对应的异常处理信息的步骤。

具体地,关于添加异常处理信息的描述与步骤s102的描述一致,在此不再赘述。

步骤s208:基于添加了所述异常处理信息的抽象语法树,生成目标代码,所述目标代码包括基于所述异常处理信息生成的异常处理代码。

具体地,关于基于添加了所述异常处理信息的抽象语法树,生成目标代码的描述与步骤s102的描述一致,在此不再赘述。

步骤s209:不为所述节点添加对应的异常处理信息。

具体地,基于步骤s205、步骤s206、步骤s207的描述的情况,则执行不为节点添加对应的异常处理信息。步骤s205、步骤s206、步骤s207的顺序只是一种示例,本发明对步骤s205、步骤s206、步骤s207的执行顺序不做限定;可以理解的是,通过判断节点内容是否满足添加异常处理信息的条件,提高了自动添加异常信息的灵活性。

如图3所示,本发明实施例提供了一种处理异常信息的方法,应用于服务端,该方法可以包括以下步骤:

步骤s301:接收一个或多个上报异常信息的请求;分别从所述请求对应的统一资源定位符中获取对应的异常信息;基于预先设置的多种信息类别,解析所述异常信息。

具体地,接收一个或多个上报异常信息的请求,所述请求是一个或多个客户端发送的,进一步地,分别从所述请求对应的统一资源定位符中获取对应的异常信息,例如:请求对应的统一资源定位符为http://errorreport.com:8088/123.png?异常信息=a&异常页面url=b&浏览器信息=c&异常发生时间=d;则基于基于预先设置的多种信息类别,解析所述异常信息;例如:预先设置的多种信息类别包括:异常信息的描述、浏览器版本、生成异常信息页面的url和异常发生时间等,进一步地,根据预先设置的多种信息类别分别解析该url得到各个子信息。关于异常信息的描述与步骤s103的描述一致,在此不再赘述。

步骤s302:对解析的结果包括的每一种所述信息类别对应的子信息进行分类存储。

具体地,经过解析,得到各个信息类别对应的子信息,并分类存储,例如:使用服务端的程序将异常信息存储到数据库,可以使用mongodb作为数据库分类存储各个字信息。本发明对服务端的程序语言和使用的数据库的类型不做限定。

进一步地,响应于接收到异常信息展示请求,将分类存储的每一种所述信息类别对应的子信息发送给客户端,以在所述客户端进行分类展示。当客户端请求子信息时,发送各个子信息给客户端,关于客户端分类展示的具体描述与步骤s103的描述一致,在此不再赘述。

如图4所示,本发明实施例提供了一种处理异常信息的客户端400,包括:查找节点模块401、添加异常处理模块402和处理异常信息模块403;其中,

所述查找节点模块401,用于获取应用的源代码,为所述源代码生成抽象语法树;从所述抽象语法树中查找与预设的特征标识相匹配的节点;

所述添加异常处理模块402,用于在所述抽象语法树中,为查找到的所述节点添加设置的异常处理信息;基于添加了所述异常处理信息的抽象语法树,生成目标代码,所述目标代码包括基于所述异常处理信息生成的异常处理代码;

所述处理异常信息模块403,用于响应于所述应用的触发操作,运行所述目标代码,并通过所述异常处理代码处理所述应用产生的异常信息。

如图5所示,本发明实施例提供了一种处理异常信息的服务器500,包括:解析异常信息模块501和存储异常信息模块502;其中,

所述解析异常信息模块501,用于接收一个或多个上报异常信息的请求;分别从所述请求对应的统一资源定位符中获取对应的异常信息;基于预先设置的多种信息类别,解析所述异常信息;

所述存储异常信息模块502,用于对解析的结果包括的每一种所述信息类别对应的子信息进行分类存储。

如图6所示,本发明实施例提供了一种处理异常信息的系统600,包括:一个或多个图4所示的处理异常信息的客户端400,和图5所示的处理异常信息的服务器500。

本发明实施例还提供了一种处理异常信息的电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现上述任一实施例提供的方法。

本发明实施例还提供了一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现上述任一实施例提供的方法。

图7示出了可以应用本发明实施例的处理异常信息的方法或处理异常信息的装置的示例性系统架构700。

如图7所示,系统架构700可以包括终端设备701、702、703,网络704和服务器705。网络704用以在终端设备701、702、703和服务器705之间提供通信链路的介质。网络704可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。

用户可以使用终端设备701、702、703通过网络704与服务器705交互,以接收或发送消息等。终端设备701、702、703上可以安装有各种客户端应用,例如电子商城客户端应用、网页浏览器应用、搜索类应用、即时通信工具和邮箱客户端等。

终端设备701、702、703可以是具有显示屏并且支持各种客户端应用的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。

服务器705可以是提供各种服务的服务器,例如对用户利用终端设备701、702、703所使用的客户端应用提供支持的后台管理服务器。后台管理服务器可以对接收到的处理异常信息请求进行处理,并将分类的异常信息反馈给终端设备。

需要说明的是,本发明实施例所提供的处理异常信息的方法一般由终端设备701、702、703执行,相应地,处理异常信息的客户端一般设置于终端设备701、702、703中,处理异常信息的服务器一般设置于服务器705中。

应该理解,图7中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。

下面参考图8,其示出了适于用来实现本发明实施例的终端设备的计算机系统800的结构示意图。图8示出的终端设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。

如图8所示,计算机系统800包括中央处理单元(cpu)801,其可以根据存储在只读存储器(rom)802中的程序或者从存储部分808加载到随机访问存储器(ram)803中的程序而执行各种适当的动作和处理。在ram803中,还存储有系统800操作所需的各种程序和数据。cpu801、rom802以及ram803通过总线804彼此相连。输入/输出(i/o)接口805也连接至总线804。

以下部件连接至i/o接口805:包括键盘、鼠标等的输入部分806;包括诸如阴极射线管(crt)、液晶显示器(lcd)等以及扬声器等的输出部分807;包括硬盘等的存储部分808;以及包括诸如lan卡、调制解调器等的网络接口卡的通信部分809。通信部分809经由诸如因特网的网络执行通信处理。驱动器810也根据需要连接至i/o接口805。可拆卸介质811,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器810上,以便于从其上读出的计算机程序根据需要被安装入存储部分808。

特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分809从网络上被下载和安装,和/或从可拆卸介质811被安装。在该计算机程序被中央处理单元(cpu)801执行时,执行本发明的系统中限定的上述功能。

需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、rf等等,或者上述的任意合适的组合。

附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

描述于本发明实施例中所涉及到的模块和/或单元可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块和/或单元也可以设置在处理器中,例如,可以描述为:一种处理器包括查找节点模块、添加异常处理模块和处理异常信息模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,处理异常信息模块还可以被描述为“根据自动生成的异常处理代码,处理异常信息的模块”。

作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:获取应用的源代码,为所述源代码生成抽象语法树;从所述抽象语法树中查找与预设的特征标识相匹配的节点;在所述抽象语法树中,为查找到的所述节点添加设置的异常处理信息;基于添加了所述异常处理信息的抽象语法树,生成目标代码,所述目标代码包括基于所述异常处理信息生成的异常处理代码;响应于所述应用的触发操作,运行所述目标代码,并通过所述异常处理代码处理所述应用产生的异常信息。

接收一个或多个上报异常信息的请求;分别从所述请求对应的统一资源定位符中获取对应的异常信息;基于预先设置的多种信息类别,解析所述异常信息;对解析的结果包括的每一种所述信息类别对应的子信息进行分类存储。

由此可见,本发明的实施例能够基于应用的源代码,生成抽象语法树,从抽象语法树中查找待处理的节点,为节点增加异常处理信息后生成新的抽象语法树,并基于新的抽象语法树生成应用的目标代码,以通过新增加的异常处理代码获取应用的异常信息;通过自动添加异常处理代码提高了处理异常信息的效率,提高了获取异常信息实时性,克服了运维人员操作复杂度较高的问题。

上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

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