CN113986597A - 为代码添加异常处理模块的方法及装置 - Google Patents

为代码添加异常处理模块的方法及装置 Download PDF

Info

Publication number
CN113986597A
CN113986597A CN202111274358.XA CN202111274358A CN113986597A CN 113986597 A CN113986597 A CN 113986597A CN 202111274358 A CN202111274358 A CN 202111274358A CN 113986597 A CN113986597 A CN 113986597A
Authority
CN
China
Prior art keywords
function
processed
exception handling
syntax tree
abstract syntax
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.)
Pending
Application number
CN202111274358.XA
Other languages
English (en)
Inventor
孟繁贵
梁锐
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
China Construction Bank Corp
Original Assignee
China Construction Bank Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by China Construction Bank Corp filed Critical China Construction Bank Corp
Priority to CN202111274358.XA priority Critical patent/CN113986597A/zh
Publication of CN113986597A publication Critical patent/CN113986597A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/079Root cause analysis, i.e. error or fault diagnosis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0766Error or fault reporting or storing
    • G06F11/0772Means for error signaling, e.g. using interrupts, exception flags, dedicated error registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Software Systems (AREA)
  • Stored Programmes (AREA)

Abstract

本发明实施例公开了一种为代码添加异常处理模块的方法及装置,该方法包括:将待添加异常处理模块的代码解析为抽象语法树;确定出所述抽象语法树中的待处理函数;根据所述抽象语法树确定出待处理函数的函数名称和函数位置信息;根据待处理函数的函数体内容、函数名称以及函数位置信息生成待处理函数对应的异常处理模块;用异常处理模块替换掉所述抽象语法树中对应的待处理函数的函数体内容,得到处理后的抽象语法树,并将处理后的抽象语法树转化为代码,得到添加异常处理模块后的代码。本发明有助于提高为代码添加异常处理模块的效率。

Description

为代码添加异常处理模块的方法及装置
技术领域
本发明涉及程序开发技术领域,具体而言,涉及一种为代码添加异常处理模块的方法及装置。
背景技术
Web应用程序的代码主要包括3部分,分别是html文件、css文件和JavaScript文件。其中Web工程应用程序的鲁棒性主要取决于JavaScript代码编写是否健壮。由于JavaScript语言是单线程,若JavaScript的代码出现错误,会导致后续JavaScript代码无法执行,最终导致web应用无法正常运行。
目前为了减少JavaScript运行异常可以采用添加异常处理模块的方式,异常处理模块由try catch语句组成,其中try语句中是业务逻辑信息,catch语句可以打印异常信息。在web应用代码运行异常时,在catch中抛出异常信息,同时应用程序会继续执行(但是此时应用逻辑可能有异常,因为程序已经异常)。
目前在为代码添加异常处理模块时,开发者需要手动为每个函数添加try catch异常处理模块,重复性强,效率低。此外,一个大型web应用往往由多个开发者完成,每个开发者在代码编写规范不一致,在对每个函数添加try catch异常处理模块的执行力不一样,导致在web应用中异常处理模块或有或无,无法保证所有的函数都添加了异常处理模块。
由此可见,如何提高为代码添加异常处理模块的效率是本领域急需解决的技术问题。
发明内容
本发明为了解决目前的为代码添加异常处理模块效率较低的技术问题,提出了一种为代码添加异常处理模块的方法及装置。
为了实现上述目的,根据本发明的一个方面,提供了一种为代码添加异常处理模块的方法,该方法包括:
将待添加异常处理模块的代码解析为抽象语法树;
确定出所述抽象语法树中的待处理函数;
根据所述抽象语法树确定出待处理函数的函数名称和函数位置信息;
根据待处理函数的函数体内容、函数名称以及函数位置信息生成待处理函数对应的异常处理模块;
用异常处理模块替换掉所述抽象语法树中对应的待处理函数的函数体内容,得到处理后的抽象语法树,并将处理后的抽象语法树转化为代码,得到添加异常处理模块后的代码。
可选的,根据待处理函数的函数体内容、函数名称以及函数位置信息生成待处理函数对应的异常处理模块,具体包括:
根据待处理函数的函数名称、待处理函数的函数位置信息以及预设的错误信息生成catch语句;
根据待处理函数的函数体内容生成try语句;
根据所述catch语句和所述try语句生成待处理函数对应的异常处理模块。
可选的,所述确定出所述抽象语法树中的待处理函数,具体包括:
识别所述抽象语法树中的函数;
若识别出的函数的函数注释中不存在有不添加异常处理标识,则确定该识别出的函数为待处理函数。
可选的,所述若识别出的函数的函数注释中不存在有不添加异常处理标识,则确定该识别出的函数为待处理函数,具体包括:
若识别出的函数的函数注释中不存在有不添加异常处理标识,并且该识别出的函数的函数体内容多于预设行,则确定该识别出的函数为待处理函数。
可选的,所述根据所述抽象语法树确定出待处理函数的函数名称和函数位置信息,具体包括:
若待处理函数为函数声明,从函数声明抽象语法树中id属性下的name属性获取函数名称,从函数声明抽象语法树中loc属性下的start属性中的line属性获取函数位置信息。
可选的,所述根据所述抽象语法树确定出待处理函数的函数名称和函数位置信息,具体包括:
若待处理函数为函数表达式,从函数表达式抽象语法树的变量声明中的declarations的id属性下的name属性获取函数名称,从函数表达式抽象语法树中loc属性下的start属性中的line属性获取函数位置信息。
可选的,所述根据所述抽象语法树确定出待处理函数的函数名称和函数位置信息,具体包括:
若待处理函数为箭头函数,将箭头函数作为函数名称,从箭头函数抽象语法树中loc属性下的start属性中的line属性获取函数位置信息。
可选的,所述根据所述抽象语法树确定出待处理函数的函数名称和函数位置信息,具体包括:
若待处理函数为类函数,从类函数抽象语法树中的ClassMethod中key属性下的name属性获取函数名称,从类函数抽象语法树中loc属性下的start属性中的line属性获取函数位置信息。
为了实现上述目的,根据本发明的另一方面,提供了一种为代码添加异常处理模块的装置,该装置包括:
代码解析单元,用于将待添加异常处理模块的代码解析为抽象语法树;
待处理函数确定单元,用于确定出所述抽象语法树中的待处理函数;
函数信息确定单元,用于根据所述抽象语法树确定出待处理函数的函数名称和函数位置信息;
异常处理模块生成单元,用于根据待处理函数的函数体内容、函数名称以及函数位置信息生成待处理函数对应的异常处理模块;
异常处理模块添加单元,用于用异常处理模块替换掉所述抽象语法树中对应的待处理函数的函数体内容,得到处理后的抽象语法树,并将处理后的抽象语法树转化为代码,得到添加异常处理模块后的代码。
可选的,所述异常处理模块生成单元包括:
catch语句生成模块,用于根据待处理函数的函数名称、待处理函数的函数位置信息以及预设的错误信息生成catch语句;
try语句生成模块,用于根据待处理函数的函数体内容生成try语句;
异常处理模块生成模块,用于根据所述catch语句和所述try语句生成待处理函数对应的异常处理模块。
为了实现上述目的,根据本发明的另一方面,还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述为代码添加异常处理模块的方法中的步骤。
为了实现上述目的,根据本发明的另一方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序在计算机处理器中执行时实现上述为代码添加异常处理模块的方法中的步骤。
本发明的有益效果为:
本发明实施例通过将待添加异常处理模块的代码解析为抽象语法树,确定出所述抽象语法树中的待处理函数,根据所述抽象语法树确定出待处理函数的函数名称和函数位置信息,根据待处理函数的函数体内容、函数名称以及函数位置信息生成待处理函数对应的异常处理模块,用异常处理模块替换掉所述抽象语法树中对应的待处理函数的函数体内容,得到处理后的抽象语法树,最后将处理后的抽象语法树转化为代码,得到添加异常处理模块后的代码,由此实现自动为代码添加异常处理模块,解决了目前开发者手动为每个函数添加异常处理模块存在的重复性强、效率低下的技术问题,提高了为代码添加异常处理模块的效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1是本发明实施例为代码添加异常处理模块的方法的流程图;
图2是本发明实施例生成异常处理模块的流程图;
图3是本发明实施例确定待处理函数的流程图;
图4是本发明实施例添加异常处理模块的第一整体流程图;
图5是本发明实施例添加异常处理模块的第二整体流程图;
图6是本发明实施例为代码添加异常处理模块的装置的结构框图;
图7是本发明实施例异常处理模块生成单元的结构框图;
图8是本发明实施例计算机设备示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
本发明提供一种为代码添加异常处理模块的方法,web代码开发者只需编写业务逻辑代码,本发明方法会自动添加异常处理模块,同时在异常处理模块中自动添加信息丰富的异常信息,方便web应用开发者快速定位问题。本发明有助于提升web应用运行稳定性,同时当web应用出现问题时可以快速定位问题,提升运维效率。
图1是本发明实施例为代码添加异常处理模块的方法的流程图,如图1所示,在本发明一个实施例中,本发明的为代码添加异常处理模块的方法包括步骤S101至步骤S105。
步骤S101,将待添加异常处理模块的代码解析为抽象语法树。
抽象语法树AST(abstract syntax code),将代码抽象为树状结构表示,AST描述代码的信息。本发明可以使用“@babel/parser”库将代码解析为抽象语法树。
代码经过上述解析后变成AST,AST是一个树形的JSON结构对象,这个JSON对象包含源代码的信息,其中AST中的FunctionDeclaration(函数声明)、FunctionExpression(函数表达式)、ArrowFunctionExpression(箭头函数)和ClassMethod(类函数)内容是本发明核心要处理的节点。
步骤S102,确定出所述抽象语法树中的待处理函数。
在本发明一个实施例中,待处理函数包括:函数声明、函数表达式、箭头函数以及类函数。
函数声明是指JavaScript中使用function关键词定义函数。例如:如下代码示例为一个函数声明:
function functionName(parameters){
要执行的代码
}
函数表达式是指可以将函数定义赋值到变量上,形成函数表达式,如下示例代码所示:
var x=function(a,b){return a*b};
箭头函数(Arrow Function)是ES6新增的一种函数,可以如下示例代码所示:
x=>x*x;
箭头函数比函数声明或者函数表达式简洁,箭头函数适合需要匿名函数的地方。
类函数class是JavaScript的一种定义类型的方法,类函数class中会有方法定义。类函数class中有实例方法toString和静态方法classMethod。
本发明可以使用“@babel/traverse”库对AST执行遍历操作,找到需要处理的函数。
具体的,本步骤针对AST,遍历存在的函数声明、函数表达式、箭头函数和类方法函数,其中“FunctionDeclaration”是处理函数声明的代码,“VariableDeclaration”处理函数表达式的代码,“ArrowFunctionExpression”处理箭头函数代码,“ClassMethod”处理类函数函数代码。
步骤S103,根据所述抽象语法树确定出待处理函数的函数名称和函数位置信息。
本发明的异常信息中需要有函数名称和函数位置信息,方便开发者快速定位问题,因此需要获取到函数名称和函数位置信息,之后添加到异常信息中。
在本发明一个实施例中,若待处理函数为函数声明,本步骤可以从函数声明抽象语法树中id属性下的name属性获取函数名称,从函数声明抽象语法树中loc属性下的start属性中的line属性获取函数位置信息。
在本发明一个实施例中,若待处理函数为函数表达式,本步骤可以从函数表达式抽象语法树的变量声明(VariableDeclaration)中的declarations的id属性下的name属性获取函数名称,从函数表达式抽象语法树中loc属性下的start属性中的line属性获取函数位置信息。
需要说明的是,函数表达式的节点类型是FunctionExpression,但是函数名称是在VariableDeclaration节点上,因此AST在处理FunctionExpression时需要处理的是VariableDeclaration节点。但是VariableDeclaration(变量声明)内容不一定是函数声明,因此插件判断VariableDeclaration的内容是函数表达式时才提取函数名称和函数位置信息。
在本发明一个实施例中,若待处理函数为箭头函数,本步骤可以将箭头函数作为函数名称,从箭头函数抽象语法树中loc属性下的start属性中的line属性获取函数位置信息。
在本发明一个实施例中,若待处理函数为类函数,本步骤可以从类函数抽象语法树中的ClassMethod中key属性下的name属性获取函数名称,从类函数抽象语法树中loc属性下的start属性中的line属性获取函数位置信息。
步骤S104,根据待处理函数的函数体内容、函数名称以及函数位置信息生成待处理函数对应的异常处理模块。
在本发明一个实施例中,函数体内容为从抽象语法树AST中提取得到。
步骤S105,用异常处理模块替换掉所述抽象语法树中对应的待处理函数的函数体内容,得到处理后的抽象语法树,并将处理后的抽象语法树转化为代码,得到添加异常处理模块后的代码。
本发明添加异常处理模块后的代码中的函数代码为添加异常处理模块后的函数代码。
例如:原函数代码如下所示:
function test(){
console.log('FunctionDeclaration');}
添加异常处理模块后的函数代码如下所示:
function test(){
try{console.log('FunctionDeclaration');
}catch(error){report();}
由此可见,本发明在web项目构建后,工程中的JavaScript代码中自动添加trycatch异常处理模块,增强了web应用运行稳定性;同时在catch代码中添加了函数名称、函数位置信息和具体报错信息,便于开发人员快速定位应用异常位置,提升运维效率,减少运维成本。
图2是本发明实施例生成异常处理模块的流程图,如图2所示,在本发明一个实施例中,上述步骤S104的根据待处理函数的函数体内容、函数名称以及函数位置信息生成待处理函数对应的异常处理模块,具体包括步骤S201至步骤S203。
步骤S201,根据待处理函数的函数名称、待处理函数的函数位置信息以及预设的错误信息生成catch语句。
在本发明一个实施例中,catch语句的参数是“error”,catch语句的函数体是包含函数名称,函数位置信息和错误信息,可以如下所示:
`console.log("位于${blockStatement.loc.start.line}行的${functionName}函数发生异常,异常信息如下:"+error)`
步骤S202,根据待处理函数的函数体内容生成try语句。
在本发明一个实施例中,try语句内容的是原函数体内容。
步骤S203,根据所述catch语句和所述try语句生成待处理函数对应的异常处理模块。
在本发明一个实施例中,本发明将所述catch语句和所述try语句进行组合,得到try catch异常处理模块。
在本发明一个实施例中,本发明可以实现一个babel插件来完成上述自动为代码添加异常处理模块的方法,babel插件可以遍历项目中的JavaScript代码,根据开发者在loader中的配置信息自动添加异常处理模块,并且在异常处理模块中添加异常信息(包括函数名称、函数位置信息、错误信息)。
loader主要做代码转化,如babel-loader将高版本JavaScript代码转换为低版本JavaScript代码。本发明loader也是处理JavaScript代码,本发明loader会调用本发明实现的babel插件,babel插件对JavaScript代码进行解析并添加异常处理模块。在loader同时可以配置插件参数,本发明babel插件有2个参数,分别是函数是否添加异常处理模块(默认添加异常处理模块,当某个函数的函数注释中有不添加异常处理标识时,此函数就不会添加异常处理模块),当函数的函数体内容的行数小于某个值时不添加异常处理模块(默认是0,即全部函数添加异常处理模块,即使函数只有1行也添加异常处理模块)。
具体的,本发明babel插件有2个参数:disableTryCatch,functionLines。
disableTryCatch为是否允许添加try catch异常处理模块,默认是false,即全部添加异常处理模块。插件使用者在函数前的函数注释中有“@disableTryCatch true”字符串(即不添加异常处理标识)时,插件不对本函数添加异常处理模块。
functionLines是函数行数限制,默认值是0,当函数体内容的行数小于functionLines,函数不添加异常处理模块。如当functionLines配置为5,当代码中某个函数体内容的行数小于5行时,函数不添加异常处理模块。
图3是本发明实施例确定待处理函数的流程图,如图3所示,在本发明一个实施例中,上述步骤S102的确定出所述抽象语法树中的待处理函数,具体包括步骤S301和步骤S302。
步骤S301,识别所述抽象语法树中的函数。
步骤S302,若识别出的函数的函数注释中不存在有不添加异常处理标识,则确定该识别出的函数为待处理函数。
在本发明一个实施例中,本步骤可以先从抽象语法树中提取出识别出的函数的函数注释。函数注释可以在函数前、函数内容体内或者函数后。
在本发明一个实施例中,本发明使用函数前注释,即在函数前注释添加插件信息。本发明需要从函数注释中提取是否有不添加异常处理标识(即disableTryCatch的内容)。函数前注释AST的leadingComments字段获取,使用comment-parser库提取函数注释。
disableTryCatch从comment-parser库解析函数注释信息后的tags字段获取,tags字段是一个数组,tags包含注释中所有以@字符开始的信息。若disableTryCatch的name为“true”,表示此函数不需要添加异常处理模块。
本发明可以给某个函数设置不添加异常处理模块,设置不添加异常处理模块方法是给函数添加函数注释,函数注释的内容中需要有“@disableTryCatch true”字符串(即不添加异常处理标识),当本发明插件在解析函数AST后,从AST的leadingComments中获取是否含有tag为disableTryCatch,name为true的函数注释,若有此,则函数不添加异常处理模块。
在本发明一个实施例中,上述步骤S302具体可以为,若识别出的函数的函数注释中不存在有不添加异常处理标识,并且该识别出的函数的函数体内容多于预设行,则确定该识别出的函数为待处理函数。
在本发明一个实施例中,当函数体内容小于预设行(functionLines)时,不添加异常处理模块。functionLines默认是0,即不管函数有多少行,默认都会添加异常处理模块。functionLines在loader插件中可以配置,若用户设置functionLines为2,如下代码:
function test(){
console.log('FunctionDeclaration');
}
如上所示的test函数的函数体内容只有一行(第2行),即“console.log('FunctionDeclaration');”,此时插件不会对此函数添加异常处理模块。
图4是本发明实施例添加异常处理模块的第一整体流程图,如图4所示,在本发明一个实施例中,本发明添加异常处理模块的整体具体为,先将待添加异常处理模块的代码(CODE)解析为抽象语法树(AST),再使用预设的插件在抽象语法树(AST)上添加异常处理模块,生成新的抽象语法树(NEW AST),最后根据新的抽象语法树(NEW AST)生成新的代码(NEW CODE),即得到添加异常处理模块后的代码。
图5是本发明实施例添加异常处理模块的第二整体流程图,如图5所示,本发明在为代码中的函数添加异常处理模块时,先判断函数的函数注释中是否存在不添加异常处理标识,若存在则继续遍历后续函数,若不存在则判断函数的函数体内容的行数是否多于预设行,若少于预设行则继续遍历后续函数。若多于预设行,则获取函数的获取函数名称、数位置信息以及函数体内容,进而生成try catch异常处理模块,最后使用try catch异常处理模块替换原函数在AST中的函数体内容,完成异常处理模块的添加。
由以上实施例可以看出,本发明的为代码添加异常处理模块的方法至少实现了以下有益效果:
1、为web应用的代码自动添加异常处理模块,web应用鲁棒性提高。
2、高效添加异常处理模块,异常信息添加无遗漏。
3、web应用发生异常时可以快速定位异常信息,使web应用维护更简单,更高效,降低运维成本。
需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
基于同一发明构思,本发明实施例还提供了一种为代码添加异常处理模块的装置,可以用于实现上述实施例所描述的为代码添加异常处理模块的方法,如下面的实施例所述。由于为代码添加异常处理模块的装置解决问题的原理与为代码添加异常处理模块的方法相似,因此为代码添加异常处理模块的装置的实施例可以参见为代码添加异常处理模块的方法的实施例,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图6是本发明实施例为代码添加异常处理模块的装置的结构框图,如图6所示,在本发明一个实施例中,本发明为代码添加异常处理模块的装置包括:
代码解析单元1,用于将待添加异常处理模块的代码解析为抽象语法树;
待处理函数确定单元2,用于确定出所述抽象语法树中的待处理函数;
函数信息确定单元3,用于根据所述抽象语法树确定出待处理函数的函数名称和函数位置信息;
异常处理模块生成单元4,用于根据待处理函数的函数体内容、函数名称以及函数位置信息生成待处理函数对应的异常处理模块;
异常处理模块添加单元5,用于用异常处理模块替换掉所述抽象语法树中对应的待处理函数的函数体内容,得到处理后的抽象语法树,并将处理后的抽象语法树转化为代码,得到添加异常处理模块后的代码。
图7是本发明实施例异常处理模块生成单元4的结构框图,如图7所示,在本发明一个实施例中,本发明的异常处理模块生成单元4具体包括:
catch语句生成模块401,用于根据待处理函数的函数名称、待处理函数的函数位置信息以及预设的错误信息生成catch语句;
try语句生成模块402,用于根据待处理函数的函数体内容生成try语句;
异常处理模块生成模块403,用于根据所述catch语句和所述try语句生成待处理函数对应的异常处理模块。
在本发明一个实施例中,所述待处理函数确定单元2具体包括:
函数识别模块,用于识别所述抽象语法树中的函数;
确定模块,用于若识别出的函数的函数注释中不存在有不添加异常处理标识,则确定该识别出的函数为待处理函数。
在本发明一个实施例中,所述确定模块,具体用于若识别出的函数的函数注释中不存在有不添加异常处理标识,并且该识别出的函数的函数体内容多于预设行,则确定该识别出的函数为待处理函数。
在本发明一个实施例中,所述函数信息确定单元3,具体用于若待处理函数为函数声明,从函数声明抽象语法树中id属性下的name属性获取函数名称,从函数声明抽象语法树中loc属性下的start属性中的line属性获取函数位置信息。
在本发明一个实施例中,所述函数信息确定单元3,具体用于若待处理函数为函数表达式,从函数表达式抽象语法树的变量声明中的declarations的id属性下的name属性获取函数名称,从函数表达式抽象语法树中loc属性下的start属性中的line属性获取函数位置信息。
在本发明一个实施例中,所述函数信息确定单元3,具体用于若待处理函数为箭头函数,将箭头函数作为函数名称,从箭头函数抽象语法树中loc属性下的start属性中的line属性获取函数位置信息。
在本发明一个实施例中,所述函数信息确定单元3,具体用于若待处理函数为类函数,从类函数抽象语法树中的ClassMethod中key属性下的name属性获取函数名称,从类函数抽象语法树中loc属性下的start属性中的line属性获取函数位置信息。
为了实现上述目的,根据本申请的另一方面,还提供了一种计算机设备。如图8所示,该计算机设备包括存储器、处理器、通信接口以及通信总线,在存储器上存储有可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述实施例方法中的步骤。
处理器可以为中央处理器(Central Processing Unit,CPU)。处理器还可以为其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等芯片,或者上述各类芯片的组合。
存储器作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序、非暂态计算机可执行程序以及单元,如本发明上述方法实施例中对应的程序单元。处理器通过运行存储在存储器中的非暂态软件程序、指令以及模块,从而执行处理器的各种功能应用以及作品数据处理,即实现上述方法实施例中的方法。
存储器可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储处理器所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施例中,存储器可选包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至处理器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
所述一个或者多个单元存储在所述存储器中,当被所述处理器执行时,执行上述实施例中的方法。
上述计算机设备具体细节可以对应参阅上述实施例中对应的相关描述和效果进行理解,此处不再赘述。
为了实现上述目的,根据本申请的另一方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序在计算机处理器中执行时实现上述为代码添加异常处理模块的方法中的步骤。本领域技术人员可以理解,实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)、随机存储记忆体(RandomAccessMemory,RAM)、快闪存储器(Flash Memory)、硬盘(HardDisk Drive,缩写:HDD)或固态硬盘(Solid-State Drive,SSD)等;所述存储介质还可以包括上述种类的存储器的组合。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (12)

1.一种为代码添加异常处理模块的方法,其特征在于,包括:
将待添加异常处理模块的代码解析为抽象语法树;
确定出所述抽象语法树中的待处理函数;
根据所述抽象语法树确定出待处理函数的函数名称和函数位置信息;
根据待处理函数的函数体内容、函数名称以及函数位置信息生成待处理函数对应的异常处理模块;
用异常处理模块替换掉所述抽象语法树中对应的待处理函数的函数体内容,得到处理后的抽象语法树,并将处理后的抽象语法树转化为代码,得到添加异常处理模块后的代码。
2.根据权利要求1所述的为代码添加异常处理模块的方法,其特征在于,根据待处理函数的函数体内容、函数名称以及函数位置信息生成待处理函数对应的异常处理模块,具体包括:
根据待处理函数的函数名称、待处理函数的函数位置信息以及预设的错误信息生成catch语句;
根据待处理函数的函数体内容生成try语句;
根据所述catch语句和所述try语句生成待处理函数对应的异常处理模块。
3.根据权利要求1所述的为代码添加异常处理模块的方法,其特征在于,所述确定出所述抽象语法树中的待处理函数,具体包括:
识别所述抽象语法树中的函数;
若识别出的函数的函数注释中不存在有不添加异常处理标识,则确定该识别出的函数为待处理函数。
4.根据权利要求3所述的为代码添加异常处理模块的方法,其特征在于,所述若识别出的函数的函数注释中不存在有不添加异常处理标识,则确定该识别出的函数为待处理函数,具体包括:
若识别出的函数的函数注释中不存在有不添加异常处理标识,并且该识别出的函数的函数体内容多于预设行,则确定该识别出的函数为待处理函数。
5.根据权利要求1所述的为代码添加异常处理模块的方法,其特征在于,所述根据所述抽象语法树确定出待处理函数的函数名称和函数位置信息,具体包括:
若待处理函数为函数声明,从函数声明抽象语法树中id属性下的name属性获取函数名称,从函数声明抽象语法树中loc属性下的start属性中的line属性获取函数位置信息。
6.根据权利要求1所述的为代码添加异常处理模块的方法,其特征在于,所述根据所述抽象语法树确定出待处理函数的函数名称和函数位置信息,具体包括:
若待处理函数为函数表达式,从函数表达式抽象语法树的变量声明中的declarations的id属性下的name属性获取函数名称,从函数表达式抽象语法树中loc属性下的start属性中的line属性获取函数位置信息。
7.根据权利要求1所述的为代码添加异常处理模块的方法,其特征在于,所述根据所述抽象语法树确定出待处理函数的函数名称和函数位置信息,具体包括:
若待处理函数为箭头函数,将箭头函数作为函数名称,从箭头函数抽象语法树中loc属性下的start属性中的line属性获取函数位置信息。
8.根据权利要求1所述的为代码添加异常处理模块的方法,其特征在于,所述根据所述抽象语法树确定出待处理函数的函数名称和函数位置信息,具体包括:
若待处理函数为类函数,从类函数抽象语法树中的ClassMethod中key属性下的name属性获取函数名称,从类函数抽象语法树中loc属性下的start属性中的line属性获取函数位置信息。
9.一种为代码添加异常处理模块的装置,其特征在于,包括:
代码解析单元,用于将待添加异常处理模块的代码解析为抽象语法树;
待处理函数确定单元,用于确定出所述抽象语法树中的待处理函数;
函数信息确定单元,用于根据所述抽象语法树确定出待处理函数的函数名称和函数位置信息;
异常处理模块生成单元,用于根据待处理函数的函数体内容、函数名称以及函数位置信息生成待处理函数对应的异常处理模块;
异常处理模块添加单元,用于用异常处理模块替换掉所述抽象语法树中对应的待处理函数的函数体内容,得到处理后的抽象语法树,并将处理后的抽象语法树转化为代码,得到添加异常处理模块后的代码。
10.根据权利要求9所述的为代码添加异常处理模块的装置,其特征在于,所述异常处理模块生成单元包括:
catch语句生成模块,用于根据待处理函数的函数名称、待处理函数的函数位置信息以及预设的错误信息生成catch语句;
try语句生成模块,用于根据待处理函数的函数体内容生成try语句;
异常处理模块生成模块,用于根据所述catch语句和所述try语句生成待处理函数对应的异常处理模块。
11.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至8任一项所述的方法。
12.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序在计算机处理器中执行时实现如权利要求1至8任意一项所述的方法。
CN202111274358.XA 2021-10-29 2021-10-29 为代码添加异常处理模块的方法及装置 Pending CN113986597A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111274358.XA CN113986597A (zh) 2021-10-29 2021-10-29 为代码添加异常处理模块的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111274358.XA CN113986597A (zh) 2021-10-29 2021-10-29 为代码添加异常处理模块的方法及装置

Publications (1)

Publication Number Publication Date
CN113986597A true CN113986597A (zh) 2022-01-28

Family

ID=79744619

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111274358.XA Pending CN113986597A (zh) 2021-10-29 2021-10-29 为代码添加异常处理模块的方法及装置

Country Status (1)

Country Link
CN (1) CN113986597A (zh)

Similar Documents

Publication Publication Date Title
US9747190B2 (en) Analysis system, analysis method, and computer program product
US9710243B2 (en) Parser that uses a reflection technique to build a program semantic tree
EP3623948B1 (en) Method and system for code analysis to identify causes of code smells
CN107015839B (zh) 一种实现前端事件代理的方法及装置
CN111124479B (zh) 配置文件的解析方法、系统及电子设备
CN107015904B (zh) 堆栈的保护方法及装置
US9384017B2 (en) System and method to provide grouping of warnings generated during static analysis
CN115639980A (zh) 一种低代码平台可拖拽的前端逻辑编排方法及装置
CN111240772B (zh) 一种基于区块链的数据处理方法、装置及存储介质
CN114968807A (zh) 代码检测方法、装置、电子设备及可读存储介质
CN113901083A (zh) 基于多解析器的异构数据源操作资源解析定位方法和设备
CN114579203B (zh) 脚本文件检查方法、装置、电子设备及存储介质
CN111767217A (zh) Js单元测试案例生成方法及装置
CN111309332A (zh) 文件内容按需加载方法、装置及电子设备、存储介质
CN108897678B (zh) 静态代码检测方法和静态代码检测系统、存储设备
CN114385148A (zh) 一种实现联动功能的方法、装置、设备和存储介质
CN117008920A (zh) 引擎系统、请求处理方法、装置、计算机设备及存储介质
CN113176999A (zh) 基于分布式应用程序的软件测试方法及系统
CN112445706A (zh) 程序异常代码获取方法、装置、电子设备以及存储介质
CN113986597A (zh) 为代码添加异常处理模块的方法及装置
CN110244954B (zh) 一种应用程序的编译方法及设备
US20130042224A1 (en) Application analysis device
JP2022029423A (ja) ソフトウェア・パッチに関連する投稿の自動識別
CN113391812A (zh) 应用程序模块的分析方法、装置以及分析工具
CN113721916B (zh) 一种操作系统的编译方法、装置、设备及可读存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination