CN113342657A - 一种检测代码异常的方法和装置 - Google Patents

一种检测代码异常的方法和装置 Download PDF

Info

Publication number
CN113342657A
CN113342657A CN202110643409.5A CN202110643409A CN113342657A CN 113342657 A CN113342657 A CN 113342657A CN 202110643409 A CN202110643409 A CN 202110643409A CN 113342657 A CN113342657 A CN 113342657A
Authority
CN
China
Prior art keywords
code
initial
asynchronous
exception
source code
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
CN202110643409.5A
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.)
Netease Hangzhou Network Co Ltd
Original Assignee
Netease Hangzhou Network Co Ltd
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 Netease Hangzhou Network Co Ltd filed Critical Netease Hangzhou Network Co Ltd
Priority to CN202110643409.5A priority Critical patent/CN113342657A/zh
Publication of CN113342657A publication Critical patent/CN113342657A/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/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3624Software debugging by performing operations on the source code, e.g. via a compiler
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3644Software debugging by instrumenting at runtime

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本发明实施例提供了一种检测代码异常的方法及装置,所述方法包括:获取项目文件的初始源代码,识别初始源代码中的初始异步代码块,然后为初始异步代码块添加异常捕获代码,生成目标异步代码块,其中,异常捕获代码可以用于捕获项目文件运行过程中的异常状态,然后可以将目标异步代码块替换初始源代码中的初始异步代码块,生成目标源代码,得到新的项目文件,从而通过对异步代码块添加异常捕获代码实现在项目文件中添加异常捕获机制,使得项目文件在运行过程中,异常捕获代码可以对其运行过程中出现的异常状态进行捕获,进而实现快速对代码的异常状态进行定位,不仅可以实现全局的异常状态检测,而且可以有效降低代码异常排查的时间。

Description

一种检测代码异常的方法和装置
技术领域
本发明涉及数据处理技术领域,特别是涉及一种检测代码异常的方法和一种检测代码异常的装置。
背景技术
对于许多前端开发者而言,在编码时并不会注重脚本执行过程中的异常捕获,因此在页面出现问题时,很难定位异常出现的位置。开发者们常用的是使用console.log()这种比较基础的调试方式逐个位置打印日志从而判断问题所在,或通过windows监听全局代码的执行过程,从而捕获异常状态。
通过上述方式虽然能够捕获异常状态的信息,但是上述方式只能捕获同步代码的异常代码,而无法捕获异步代码的异常状态。然而,随着ES6标准的广泛使用,async/await异步语法得到了前端开发者的青睐。其使书写异步代码变得像书写同步代码那样方便,消除了由于多层嵌套而引发地狱回调问题,使整体代码的可阅读性和可维护性变得更强。虽然async/await能将异步代码写成同步代码的形式,但其本质上依旧是异步代码,因此仍然无法通过window.onerror事件捕获异常信息。可见,对于当前异步代码的编写过程中,存在着无法有效捕获异常信息,异常状态获取的全面性低的问题,且由于async/await的书写代码同步化的方式容易让开发者认为是同步代码,导致忽略或忘记添加异常捕获机制,无法对代码异常进行有效地定位。
发明内容
本发明实施例是提供一种检测代码异常的方法、装置、电子设备以及计算机可读存储介质,以解决或部分解决现有技术中无法有效对代码的异常进行定位、定位全面性低的问题。
本发明实施例公开了一种检测代码异常的方法,包括:
获取项目文件的初始源代码;
识别所述初始源代码中的初始异步代码块;
为所述初始异步代码块添加异常捕获代码,生成目标异步代码块,所述异常捕捉代码用于捕获所述项目文件运行过程中的异常状态;
将所述目标异步代码块替换所述初始源代码中的初始异步代码块,生成目标源代码。
可选地,还包括:
根据所述异常捕获代码对所述目标源代码运行过程中出现的异常状态进行定位,生成与所述异常状态匹配的异常结果。
可选地,所述识别所述初始源代码中的初始异步代码块,包括:
对所述初始源代码进行分词,获得两个以上的Token对象;
遍历每个所述Token对象,基于抽象语法树对每个所述Token对象进行解析,得到初始异步代码块。
可选地,所述遍历每个所述Token对象,基于抽象语法树对每个所述Token对象进行解析,得到初始异步代码块,包括:
遍历每个所述Token对象,基于抽象语法树对每个所述Token对象进行解析,提取包含异步函数的代码作为初始异步代码块。
可选地,所述异常捕获代码包含针对所述初始异步代码块的开发信息。
可选地,所述开发信息包含以下至少一种:所述项目文件的路径、所述初始异步代码块的起始行数和起始列数、开发者信息、编码时间、版本信息。
可选地,所述根据所述异常捕获代码对所述目标源代码运行过程中出现的异常状态进行定位,生成与所述异常状态匹配的异常结果之后,还包括:
根据所述异常结果生成图片对象;
将包含所述图片对象的异常报告请求发送至服务器。
本发明实施例还公开了一种检测代码异常的装置,包括:
初始源代码获取模块,用于获取项目文件的初始源代码;
源代码识别模块,用于识别所述初始源代码中的初始异步代码块;
代码添加模块,用于为所述初始异步代码块添加异常捕获代码,生成目标异步代码块,所述异常捕捉代码用于捕获所述项目文件运行过程中的异常状态;
目标源代码生成模块,用于将所述目标异步代码块替换所述初始源代码中的初始异步代码块,生成目标源代码。
可选地,还包括:
异常结果生成模块,用于根据所述异常捕获代码对所述目标源代码运行过程中出现的异常状态进行定位,生成与所述异常状态匹配的异常结果。
可选地,所述源代码识别模块包括:
代码分词子模块,用于对所述初始源代码进行分词,获得两个以上的Token对象;
异步代码块确定子模块,用于遍历每个所述Token对象,基于抽象语法树对每个所述Token对象进行解析,得到初始异步代码块。
可选地,所述异步代码块确定子模块具体用于:
遍历每个所述Token对象,基于抽象语法树对每个所述Token对象进行解析,提取包含异步函数的代码作为初始异步代码块。
可选地,所述异常捕获代码包含针对所述初始异步代码块的开发信息。
可选地,所述开发信息包含以下至少一种:所述项目文件的路径、所述初始异步代码块的起始行数和起始列数、开发者信息、编码时间、版本信息。
可选地,所述装置还包括:
图片对象生成模块,用于根据所述异常结果生成图片对象;
图片对象发送模块,用于将包含所述图片对象的异常报告请求发送至服务器。
本发明实施例还公开了一种电子设备,包括:
一个或多个处理器;和
其上存储有指令的一个或多个机器可读介质,当由所述一个或多个处理器执行时,使得所述电子设备执行如上所述的方法。
本发明实施例还公开了一种计算机可读存储介质,其上存储有指令,当由一个或多个处理器执行时,使得所述处理器执行如上所述的方法。
本发明实施例包括以下优点:
在本发明实施例中,在项目文件上线或运行之前,可以获取项目文件的初始源代码,接着识别初始源代码中的初始异步代码块,然后为初始异步代码块添加异常捕获代码,生成目标异步代码块,其中,异常捕获代码可以用于捕获项目文件运行过程中的异常状态,然后可以将目标异步代码块替换初始源代码中的初始异步代码块,生成目标源代码,得到新的项目文件,从而通过对异步代码块添加异常捕获代码实现在项目文件中添加异常捕获机制,使得项目文件在运行过程中,异常捕获代码可以对其运行过程中出现的异常状态进行捕获,进而实现在项目文件上线或运行时,快速对代码的异常状态进行定位,不仅可以实现全局中异步代码的异常状态检测,全面性高,而且可以有效降低代码异常排查的时间。
附图说明
图1是本发明实施例中提供的一种检测代码异常的方法的步骤流程图;
图2是本发明实施例中提供的一种检测代码异常的装置的结构框图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
作为一种示例,对于当前异步代码的编写过程中,存在着无法有效捕获异常信息,异常状态获取的全面性低的问题,且由于async/await的书写代码同步化的方式容易让开发者认为是同步代码,导致开发者在进行代码编写的过程中忽略或忘记添加异常捕获机制,进而导致项目文件在上线或运行过程中无法对代码的异常进行有效地定位。
对此,本发明实施例的核心发明点之一在于通过自动化构建的方式对项目文件中的异步代码添加异常捕获代码,从而在项目文件中添加异常捕获机制,进而实现在项目文件上线或运行时,快速对异步代码的异常状态进行定位,不仅可以实现全局中异步代码的异常状态检测,全面性高,而且可以有效降低代码异常排查的时间。
具体的,参照图1,示出了本发明实施例中提供的一种检测代码异常的方法的步骤流程图,具体可以包括如下步骤:
步骤101,获取项目文件的初始源代码;
在本发明实施例中,项目文件可以为前端项目工程对应的代码文件,开发者可以使用webpack将开发代码打包成最终的生产代码。可选地,本发明实施例可以在webpack执行代码之前,对项目文件中的异步代码添加异常捕获代码,实现在项目文件中添加针对异步代码的异常捕获机制。
其中,项目文件中的初始源代码中可以包括同步代码、异步代码等,则需要提取初始源代码中的异步代码,以便对异步代码进行处理,实现在项目文件中添加针对异步代码的异常捕获机制。
步骤102,识别所述初始源代码中的初始异步代码块;
在本发明实施例中,对于项目文件中初始异步代码块的识别,可以先对初始源代码进行分词,获得至少两个以上的Token对象,接着遍历每个Token对象,并基于抽象语法树对每个Token对象进行解析,得到项目文件中的所有初始异步代码块。
在具体实现中,可以通过遍历初始源代码,提取包含异步函数的代码作为初始异步代码块。其中,异步函数可以包括async、await等语法信息,则可以先对初始源代码进行分词,获得Token对象,并对各个Token对象进行组合生成Token对象数组,接着遍历Token对象数组,确定各个Token对象匹配的抽象语法树,然后将抽象语法树中包含异步函数的代码作为初始异步代码块,以便后续对项目文件中的异步代码添加对应的异常捕获代码,进而实现在项目文件运行过程中通过异常捕获代码对异步代码的异常状态进行捕获。
需要说明的是,Token对象可以为描述代码片段在整个代码中的位置以及记录当前值的相关信息,通过将Token对象组成Token对象数组,可以提高后续使用数组的遍历函数遍历数组里的每一个元素(即Token对象)的便利性,并单独生成对应的AST(抽象语法树)节点,AST是一个JS对象,其基本结构包含type、comments、sourceType、body等属性,type可以表示节点类型,comments可以表示注释内容,sourceType可以表示资源类型,body可以表示子节点等等。
在一种示例中,针对项目文件的初始源代码,可以基于抽象语法树使用babel解析初始源代码(JavaScript代码),通过babel的词法解析扫描初始源代码的每一个字符,并依据分词法则生成Token对象和去除空格注释,接着将各个Token对象组合成Token数组。对于Token数组,可以通过遍历算法遍历数组中的每一个元素并单独生成对应的AST节点,从而生成项目文件对应的抽象语法树。在抽象语法树中包含了不同的代码段,接着可以提取包含async和await两种词法的代码作为初始异步代码块,以便对初始异步代码块添加异常捕获代码。其中,对于异步代码的提取,将async/await等异步代码转换为抽象语法树后,函数整体的async属性为true,子语句的type属性为AwaitExpression,从而可以提取出源代码中的异步代码。
步骤103,为所述初始异步代码添加异常捕获代码,生成目标异步代码块,所述异常捕获代码用于捕获所述项目文件运行过程中的异常状态;
在具体实现中,在对初始异步代码块添加异常捕获代码之前,可以先获取项目文件的开发信息,以及针对项目文件的异常捕获算法,并采用开发信息与异常捕获算法,生成与项目文件对应的异常捕获代码。例如,在对异步代码进行处理之前,可以先通过Node.js的Fs模块(文件系统模块)读取当前项目文件的.git或.svn文件集合获取当前项目文件的开发者信息、编码时间和对应的开发版本,并通过设置全局变量process.devlog记录这些开发信息,以便在定位代码异常的过程中,可以携带对应的开发信息,便于相应的维护人员进行代码维护。
其中,开发信息可以包括项目文件的文件路径、初始异步代码块的起始行数和起始列数、开发者信息、编码时间以及文件版本等信息;异常捕获算法可以为try-catch等;异常捕获代码可以用于捕获项目文件运行过程中出现的异常状态,同时结合开发信息进行上报,从而在上报异常结果时,不仅可以有效对项目文件中的异步代码异常进行定位,还可以携带文件路径、开发者信息、编码时间以及文件版本等信息,以便开发者进行代码维护,有效提高了代码维护的便利性。
在本发明实施例中,在初始源代码中找到符合条件的初始异步代码块后,可以对其进行处理,添加异常捕获代码,生成目标异步代码块,然后替换原来的初始异步代码块,从而在项目文件上线或运行的过程中,即可对出现异常的异步代码进行定位。
在具体实现中,先获取初始异步代码块在初始源代码中的位置信息,接着按照位置信息,在初始异步代码块中添加异常捕获代码,生成目标异步代码块,通过以自动化构建的方式为异步代码添加捕获机制,既节省了人工添加的资源,也可以保证代码执行的效率。
在一种示例中,对于初始异步代码块,其可以包括多层对象,每个对象里的每个属性可以正确描述了该代码片段里每一个字节的信息。具体的,可以通过初始异步代码块获取所属代码块的位置信息(起始的行号和列号),接着在每一段初始异步代码块的外层添加try-catch,并结合process.devlog单独将项目文件的文件路径、异步代码块的起始行数和起始列数、开发者信息、编码时间以及版本信息等开发信息写进当前代码块的catch()中,以便在捕获代码异常时通过try-catch能够快速定位异常状态,同时将该异常状态所对应的开发信息进行上报,从而开发者能够从这些信息中定位出现问题的代码,并进行修复,提高了代码维护的便利性以及效率。可选地,process.devlog在写入时以字符串的形式而不是变量的形式。
步骤104,将所述目标异步代码块替换所述初始源代码中的初始异步代码块,生成目标源代码。
当得到对初始异步代码添加了异常捕获代码生成目标异步代码块后,可以将添加了异常捕获代码的异步代码替换源代码中的异步代码,从而基于新的异步代码输出的源代码即为添加了异常捕获机制的异步代码,进而得到目标源代码,实现在项目文件中添加针对异步代码的异常捕获机制。例如,通过async/await的代码特征确定异步代码后,可以将try-catch的代码形式包裹原来的async/await代码片段,接着使用新的异步代码代替原来的异步代码,那么基于新的异步代码输出的源码就是使用try-catch包裹的async/await代码片段了。
在本发明实施例中,对项目文件中的异步代码添加了异常捕获代码之后,可以对项目文件进行上线或运行,根据异常捕获代码对目标源代码运行过程中出现的异常状态进行定位,生成与异常状态匹配的异常结果,实现在项目文件上线或运行时,快速对代码的异常状态进行定位,不仅实现全局中异步代码的异常状态检测,全面性高,而且可以有效降低代码异常排查的时间。
在具体实现中,在运行过程中,可以通过异常捕获代码对运行过程中出现的代码异常状态进行定位,尤其是异步代码的运行异常进行定位,并生成与异步代码运行异常对应的异常结果,从而通过异常捕获代码对异步代码添加对应的异常捕获机制,实现在项目文件上线或运行时,快速对异步代码的异常进行定位,不仅可以实现全局中异步代码的异步状态检测,全面性高,而且可以有效降低代码异常排查的时间。并且,在得到与异步代码匹配的异常结果之后,还可以根据异常结果生成图片对象,然后将包含图片对象的异常报告请求发送至服务器,使得服务器侧的开发人员可以通过图片对象直观地获取项目文件中出现异常状态的代码,并进行针对性地维护,并且,服务器侧在接收到异常报告请求之后,只需要对其进行记录,而无需响应该请求,可以有效减少了带宽的消耗,以及减少前端代码异常监听的成本。
在一种示例中,若目标源代码在运行过程中出现异常状态,则可以通过异常捕获代码定位异常状态对应的代码位置,采用开发信息与代码位置,生成针对代码异常的异常结果,并上报异常结果。其中,异常捕获代码可以对出现异常的异步代码进行定位,获取运行异常的异步代码所对应的代码位置,接着结合catch()中植入的开发信息,生成对应的异常结果,在异常结果中可以包括出现异常的代码位置、项目文件的开发者、编码时间以及版本等信息,从而开发者可以通过这些信息快速定位出现问题的代码,并进行维护,有效保证了代码维护效率。并且,针对异常结果的上报,在运行目标源代码的过程中,可以使用newImage()在内存里新建图片对象,通过新建图片对象可以对异常信息进行组装,并通过触发请求发送至服务器,由服务器将这些异常信息进行记录,用于后续前端代码异常监听系统的统计和分析,从而通过使用new Image()可针对单次请求而无需服务器返回数据,即在项目文件出现代码运行异常的情况下,只需要发送单次请求,服务器无需响应该请求,有效减少了带宽的消耗,也减少了前端代码异常监听系统的接入成本。
需要说明的是,本发明实施例包括但不限于上述示例,可以理解的是,本领域技术人员在本发明的思想指导下,还可以根据实际需要进行设置,本发明对此不作限制。
在本发明实施例中,在项目文件上线或运行之前,可以获取项目文件的初始源代码,接着识别初始源代码中的初始异步代码块,然后为初始异步代码块添加异常捕获代码,生成目标异步代码块,其中,异常捕获代码可以用于捕获项目文件运行过程中的异常状态,然后可以将目标异步代码块替换初始源代码中的初始异步代码块,生成目标源代码,得到新的项目文件,从而通过对异步代码块添加异常捕获代码实现在项目文件中添加异常捕获机制,使得项目文件在运行过程中,异常捕获代码可以对其运行过程中出现的异常状态进行捕获,进而实现在项目文件上线或运行时,快速对代码的异常状态进行定位,不仅可以实现全局中异步代码的异常状态检测,全面性高,而且可以有效降低代码异常排查的时间。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
参照图2,示出了本发明实施例中提供的一种检测代码异常的装置的结构框图,具体可以包括如下模块:
初始源代码获取模块201,用于获取项目文件的初始源代码;
源代码识别模块202,用于识别所述初始源代码中的初始异步代码块;
代码添加模块203,用于为所述初始异步代码块添加异常捕获代码,生成目标异步代码块,所述异常捕捉代码用于捕获所述项目文件运行过程中的异常状态;
目标源代码生成模块204,用于将所述目标异步代码块替换所述初始源代码中的初始异步代码块,生成目标源代码。
在本发明的一种可选实施例中,还包括:
异常结果生成模块,用于根据所述异常捕获代码对所述目标源代码运行过程中出现的异常状态进行定位,生成与所述异常状态匹配的异常结果。
在本发明的一种可选实施例中,所述源代码识别模块202包括:
代码分词子模块,用于对所述初始源代码进行分词,获得两个以上的Token对象;
异步代码块确定子模块,用于遍历每个所述Token对象,基于抽象语法树对每个所述Token对象进行解析,得到初始异步代码块。
在本发明的一种可选实施例中,所述异步代码块确定子模块具体用于:
遍历每个所述Token对象,基于抽象语法树对每个所述Token对象进行解析,提取包含异步函数的代码作为初始异步代码块。
在本发明的一种可选实施例中,所述异常捕获代码包含针对所述初始异步代码块的开发信息。
在本发明的一种可选实施例中,所述开发信息包含以下至少一种:所述项目文件的路径、所述初始异步代码块的起始行数和起始列数、开发者信息、编码时间、版本信息。
在本发明的一种可选实施例中,所述装置还包括:
图片对象生成模块,用于根据所述异常结果生成图片对象;
图片对象发送模块,用于将包含所述图片对象的异常报告请求发送至服务器。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本发明实施例还提供了一种电子设备,包括:
一个或多个处理器;和
其上存储有指令的一个或多个机器可读介质,当由所述一个或多个处理器执行时,使得所述电子设备执行本发明实施例所述的方法。
本发明实施例还提供了一种计算机可读存储介质,其上存储有指令,当由一个或多个处理器执行时,使得所述处理器执行本发明实施例所述的方法。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本发明所提供的一种检测代码异常的方法和一种检测代码异常的装置,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

Claims (10)

1.一种检测代码异常的方法,其特征在于,包括:
获取项目文件的初始源代码;
识别所述初始源代码中的初始异步代码块;
为所述初始异步代码块添加异常捕获代码,生成目标异步代码块,所述异常捕捉代码用于捕获所述项目文件运行过程中的异常状态;
将所述目标异步代码块替换所述初始源代码中的初始异步代码块,生成目标源代码。
2.根据权利要求1所述的方法,其特征在于,还包括:
根据所述异常捕获代码对所述目标源代码运行过程中出现的异常状态进行定位,生成与所述异常状态匹配的异常结果。
3.根据权利要求1所述的方法,其特征在于,所述识别所述初始源代码中的初始异步代码块,包括:
对所述初始源代码进行分词,获得两个以上的Token对象;
遍历每个所述Token对象,基于抽象语法树对每个所述Token对象进行解析,得到初始异步代码块。
4.根据权利要求3所述的方法,其特征在于,所述遍历每个所述Token对象,基于抽象语法树对每个所述Token对象进行解析,得到初始异步代码块,包括:
遍历每个所述Token对象,基于抽象语法树对每个所述Token对象进行解析,提取包含异步函数的代码作为初始异步代码块。
5.根据权利要求1-4任一项所述的方法,其特征在于,所述异常捕获代码包含针对所述初始异步代码块的开发信息。
6.根据权利要求5所述的方法,其特征在于,所述开发信息包含以下至少一种:所述项目文件的路径、所述初始异步代码块的起始行数和起始列数、开发者信息、编码时间、版本信息。
7.根据权利要求1所述的方法,其特征在于,所述根据所述异常捕获代码对所述目标源代码运行过程中出现的异常状态进行定位,生成与所述异常状态匹配的异常结果之后,还包括:
根据所述异常结果生成图片对象;
将包含所述图片对象的异常报告请求发送至服务器。
8.一种检测代码异常的装置,其特征在于,包括:
初始源代码获取模块,用于获取项目文件的初始源代码;
源代码识别模块,用于识别所述初始源代码中的初始异步代码块;
代码添加模块,用于为所述初始异步代码块添加异常捕获代码,生成目标异步代码块,所述异常捕捉代码用于捕获所述项目文件运行过程中的异常状态;
目标源代码生成模块,用于将所述目标异步代码块替换所述初始源代码中的初始异步代码块,生成目标源代码。
9.一种电子设备,其特征在于,包括:
一个或多个处理器;和
其上存储有指令的一个或多个机器可读介质,当由所述一个或多个处理器执行时,使得所述电子设备执行如权利要求1-7任一项所述的方法。
10.一种计算机可读存储介质,其上存储有指令,当由一个或多个处理器执行时,使得所述处理器执行如权利要求1-7任一项所述的方法。
CN202110643409.5A 2021-06-09 2021-06-09 一种检测代码异常的方法和装置 Pending CN113342657A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110643409.5A CN113342657A (zh) 2021-06-09 2021-06-09 一种检测代码异常的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110643409.5A CN113342657A (zh) 2021-06-09 2021-06-09 一种检测代码异常的方法和装置

Publications (1)

Publication Number Publication Date
CN113342657A true CN113342657A (zh) 2021-09-03

Family

ID=77476456

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110643409.5A Pending CN113342657A (zh) 2021-06-09 2021-06-09 一种检测代码异常的方法和装置

Country Status (1)

Country Link
CN (1) CN113342657A (zh)

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106874132A (zh) * 2017-01-03 2017-06-20 努比亚技术有限公司 一种异常处理方法和装置
CN109885478A (zh) * 2018-12-30 2019-06-14 贝壳技术有限公司 一种错误代码的定位方法及系统
CN109992935A (zh) * 2019-03-15 2019-07-09 同盾控股有限公司 一种源代码保护方法及装置
CN112181815A (zh) * 2020-09-21 2021-01-05 苏州浪潮智能科技有限公司 基于Python的异常捕获方法、装置及计算机可读存储介质
CN112445706A (zh) * 2020-11-27 2021-03-05 深圳前海微众银行股份有限公司 程序异常代码获取方法、装置、电子设备以及存储介质
CN112486499A (zh) * 2020-12-09 2021-03-12 广东三维家信息科技有限公司 Ts代码中目标节点的查找方法、装置、设备及存储介质
CN112685045A (zh) * 2020-12-28 2021-04-20 北京达佳互联信息技术有限公司 页面源文件的处理方法、装置、电子设备以及存储介质

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106874132A (zh) * 2017-01-03 2017-06-20 努比亚技术有限公司 一种异常处理方法和装置
CN109885478A (zh) * 2018-12-30 2019-06-14 贝壳技术有限公司 一种错误代码的定位方法及系统
CN109992935A (zh) * 2019-03-15 2019-07-09 同盾控股有限公司 一种源代码保护方法及装置
CN112181815A (zh) * 2020-09-21 2021-01-05 苏州浪潮智能科技有限公司 基于Python的异常捕获方法、装置及计算机可读存储介质
CN112445706A (zh) * 2020-11-27 2021-03-05 深圳前海微众银行股份有限公司 程序异常代码获取方法、装置、电子设备以及存储介质
CN112486499A (zh) * 2020-12-09 2021-03-12 广东三维家信息科技有限公司 Ts代码中目标节点的查找方法、装置、设备及存储介质
CN112685045A (zh) * 2020-12-28 2021-04-20 北京达佳互联信息技术有限公司 页面源文件的处理方法、装置、电子设备以及存储介质

Similar Documents

Publication Publication Date Title
CN106656536B (zh) 一种用于处理服务调用信息的方法与设备
US8972374B2 (en) Content acquisition system and method of implementation
CN107085549B (zh) 故障信息生成的方法和装置
US7930597B2 (en) Method and apparatus for validating system properties exhibited in execution traces
CN113271237B (zh) 工控协议的解析方法、装置、存储介质及处理器
CN114528457A (zh) Web指纹检测方法及相关设备
CN112131573A (zh) 安全漏洞的检测方法、装置及存储介质
CN116088846A (zh) 一种持续集成代码格式的处理方法、相关装置及设备
CN111966339B (zh) 埋点参数的录入方法、装置、计算机设备和存储介质
CN114036526A (zh) 漏洞测试方法、装置、计算机设备和存储介质
CN111581057B (zh) 一种通用日志解析方法、终端设备及存储介质
US8429458B2 (en) Method and apparatus for system analysis
CN113934617A (zh) 一种数据处理方法、装置、设备和存储介质
CN112100035A (zh) 一种页面异常检测方法、系统及相关装置
CN109101234B (zh) 确定页面与业务模块之间对应关系的方法及装置
CN113342657A (zh) 一种检测代码异常的方法和装置
CN113037521B (zh) 识别通讯设备状态的方法、通讯系统及存储介质
CN115454702A (zh) 日志故障分析方法、装置、存储介质及电子设备
CN110968779A (zh) 网页信息爬取的处理方法和装置
CN113868137A (zh) 埋点数据的处理方法、装置、系统和服务器
CN110321130B (zh) 基于系统调用日志的不可重复编译定位方法
CN105827447A (zh) 一种业务报警方法和装置
CN105827481A (zh) 一种业务纠错方法和装置
CN111782220A (zh) 一种文件的检测方法和装置
CN116541305B (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