掌桥专利:专业的专利平台
掌桥专利
首页

一种异常代码定位方法、装置、设备及存储介质

文献发布时间:2024-04-18 20:01:55


一种异常代码定位方法、装置、设备及存储介质

技术领域

本发明涉及软件开发技术领域,特别涉及一种异常代码定位方法、装置、设备及存储介质。

背景技术

在基于Vue(一款用于构建用户界面的JavaScript框架)进行开发的前端项目在线上环境运行时,由于进行编译工具的打包处理及代码安全性的缘故,会将相关的代码进行混淆处理。由于Javascript(一种具有函数优先的轻量级,解释型或即时编译型的编程语言)单线程运行的缘故,导致代码运行时,一旦发生错误,将会阻止后续代码的运行,对使用的用户造成不便。由于代码混淆的原因,开发人员大多情况下,只能通过关键字查找或者其他方法猜测出运行出错代码所在的位置,增加了排查的时间成本。因此,如何快速定位出错代码文件位置是需要解决的。

发明内容

有鉴于此,本发明的目的在于提供一种异常代码定位方法、装置、设备及存储介质,能够通过具体位置直接定位至异常代码所在的位置,进而节省排查时间。其具体方案如下:

第一方面,本申请公开了一种异常代码定位方法,包括:

在初始代码中设置异常代码收集工具以得到目标代码,并在对所述目标代码进行打包部署操作的同时确定目标位置映射信息文件;

通过所述异常代码收集工具收集所述目标代码运行过程中的异常代码的代码信息以确定异常代码文件;

通过所述目标位置映射信息文件和所述异常代码文件确定所述异常代码的位置信息,并通过所述位置信息定位至所述异常代码所在的本地文件位置。

可选的,所述在对所述目标代码进行打包部署操作的同时确定目标位置映射信息文件,包括:

对所述目标代码进行打包操作时配置相应的位置信息文件以得到打包后目标代码;

对所述打包后目标代码进行部署操作时将所述位置信息文件从所述打包后目标代码中剥离以得到目标位置映射信息文件。

可选的,所述通过所述异常代码收集工具收集所述目标代码运行过程中的异常代码的代码信息以确定异常代码文件,包括:

通过所述异常代码收集工具中的预设全局事件处理函数和预设监听事件收集所述目标代码运行过程中的运行异常代码;

通过所述异常代码收集工具中的预设全局异常处理方法收集所述目标代码中的Vue组件的错误代码;

通过预设异常信息截取方法从所述运行异常代码和所述错误代码中确定异常代码的代码信息以确定异常代码文件。

可选的,所述通过预设异常信息截取方法从所述运行异常代码和所述错误代码中确定异常代码的代码信息以确定异常代码文件,包括:

通过正则表达式匹配操作或字符串截取操作从所述运行异常代码和所述错误代码中确定异常代码的代码信息以确定异常代码文件。

可选的,所述通过所述异常代码收集工具收集所述目标代码运行过程中的异常代码的代码信息以确定异常代码文件,包括:

通过所述异常代码收集工具收集所述目标代码运行过程中的异常代码在打包后目标代码中的打包后位置;

将所述打包后位置发送至预设服务端,以便所述服务端通过所述打包后位置生成相应的异常代码文件。

可选的,所述通过所述目标位置映射信息文件和所述异常代码文件确定所述异常代码的位置信息,包括:

通过预先基于Node.js架构搭建好的Web应用服务中的位置映射信息分析插件对所述目标位置映射信息文件和所述异常代码文件进行分析生成错误信息列表,并基于所述错误信息列表确定所述异常代码的文件名和行列信息。

可选的,所述通过所述位置信息定位至所述异常代码所在的本地文件位置,包括:

将所述文件名和所述行列信息输入至Node.js架构中的预设系统调用函数调用的预设执行命令中,并将所述预设执行命令定位至所述异常代码所在的本地文件位置。

第二方面,本申请公开了一种异常代码定位装置,包括:

工具部署模块,用于在初始代码中设置异常代码收集工具以得到目标代码,并在对所述目标代码进行打包部署操作的同时确定目标位置映射信息文件;

异常代码文件生成模块,用于通过所述异常代码收集工具收集所述目标代码运行过程中的异常代码的代码信息以确定异常代码文件;

代码定位模块,用于通过所述目标位置映射信息文件和所述异常代码文件确定所述异常代码的位置信息,并通过所述位置信息定位至所述异常代码所在的本地文件位置。

第三方面,本申请公开了一种电子设备,包括:

存储器,用于保存计算机程序;

处理器,用于执行所述计算机程序以实现前述的异常代码定位方法。

第四方面,本申请公开了一种计算机可读存储介质,用于保存计算机程序,所述计算机程序被处理器执行时实现前述的异常代码定位方法。

可见,本申请中,首先在初始代码中设置异常代码收集工具以得到目标代码,并在对所述目标代码进行打包部署操作的同时确定目标位置映射信息文件;通过所述异常代码收集工具收集所述目标代码运行过程中的异常代码的代码信息以确定异常代码文件;通过所述目标位置映射信息文件和所述异常代码文件确定所述异常代码的位置信息,并通过所述位置信息定位至所述异常代码所在的本地文件位置。即,通过在初始代码中部署出异常代码收集工具,然后在代码运行过程中,所述异常代码收集工具会自动记录代码的报错信息。并且通过展示错误信息的页面,能够通过现代编辑器自动定位至出错代码的位置。这样一来,减少了排查错误代码的时间成本,进而提高代码开发的效率。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本申请公开的一种异常代码定位方法流程图;

图2为本申请公开的一种具体的异常代码定位方法流程图;

图3为本申请公开的一种具体的异常代码定位方法代码示意图;

图4为本申请公开的一种具体的异常代码定位方法代码示意图;

图5为本申请公开的一种具体的异常代码定位方法代码示意图;

图6为本申请公开的一种具体的异常代码定位方法代码示意图;

图7为本申请公开的一种异常代码定位装置结构示意图;

图8为本申请公开的一种电子设备结构图。

具体实施方式

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

为了解决Web项目在线上运行时,由于代码出错,导致程序运行异常时难以定位代码出错的位置的问题,本申请将具体介绍一种异常代码定位方法,可以自动打开错误代码所在的位置,以节省排查时间。

参见图1所示,本申请实施例公开了一种异常代码定位方法,包括:

步骤S11:在初始代码中设置异常代码收集工具以得到目标代码,并在对所述目标代码进行打包部署操作的同时确定目标位置映射信息文件。

本实施例中,所述在对所述目标代码进行打包部署操作的同时确定目标位置映射信息文件,包括:对所述目标代码进行打包操作时配置相应的位置信息文件以得到打包后目标代码;对所述打包后目标代码进行部署操作时将所述位置信息文件从所述打包后目标代码中剥离以得到目标位置映射信息文件。即,将提前设置好的异常代码收集工具配置至目标代码中,其中,所述异常代码收集工具可以在代码运行过程中,将出现错误的异常代码收集起来。但是,由于Vue组件化的特性,需要进行打包后,才可在线上环境进行部署。因此,需要对所述目标代码进行打包处理,打包过程中配置生成Sourcemap文件(一个信息文件,用于记录转换压缩后的代码与转换前的源代码之间的对应位置关系)。然后,在打包生成文件之后,将所述Sourcemap文件从所述打包后目标代码中剥离以得到目标位置映射信息文件,并将剥离出目标位置映射信息文件后的目标代码部署上线。

步骤S12:通过所述异常代码收集工具收集所述目标代码运行过程中的异常代码的代码信息以确定异常代码文件。

本实施例中,所述通过所述异常代码收集工具收集所述目标代码运行过程中的异常代码的代码信息以确定异常代码文件,包括:通过所述异常代码收集工具中的预设全局事件处理函数和预设监听事件收集所述目标代码运行过程中的运行异常代码;通过所述异常代码收集工具中的预设全局异常处理方法收集所述目标代码中的Vue组件的错误代码;通过预设异常信息截取方法从所述运行异常代码和所述错误代码中确定异常代码的代码信息以确定异常代码文件。所述通过预设异常信息截取方法从所述运行异常代码和所述错误代码中确定异常代码的代码信息以确定异常代码文件,包括:通过正则表达式匹配操作或字符串截取操作从所述运行异常代码和所述错误代码中确定异常代码的代码信息以确定异常代码文件。当用户在页面上进行操作,产生错误时,通过第一步设置的收集代码,可以得到报错代码的位置,需要说明的是,此时所获取到的位置是打包后文件的位置,还需进一步处理。所述异常代码收集工具通过window.onerror方法与监听unhandledrejection事件收集JavaScript运行时错误,通过Vue全局的errorHandler方法,收集Vue组件下的错误信息。然后通过正则表达式匹配或者字符串截取的方式,获得类似“app.a0a3d95e.js:1:2560”的报错信息。此数据就是需要上报的信息。本实施例中,通过所述异常代码收集工具收集所述目标代码运行过程中的异常代码的代码信息以确定异常代码文件,包括:通过所述异常代码收集工具收集所述目标代码运行过程中的异常代码在打包后目标代码中的打包后位置;将所述打包后位置发送至预设服务端,以便所述服务端通过所述打包后位置生成相应的异常代码文件。即,当用户在页面上进行操作,产生错误时,通过第一步设置的收集代码,可以得到报错代码的位置。简单处理后,通过服务端接口上传至服务端,服务端收到请求后,将报错信息存入数据库后,按时生成错误信息文件,并导出以确定异常代码文件。

步骤S13:通过所述目标位置映射信息文件和所述异常代码文件确定所述异常代码的位置信息,并通过所述位置信息定位至所述异常代码所在的本地文件位置。

本实施例中,所述通过所述目标位置映射信息文件和所述异常代码文件确定所述异常代码的位置信息,包括:通过预先基于Node.js架构搭建好的Web应用服务中的位置映射信息分析插件对所述目标位置映射信息文件和所述异常代码文件进行分析生成错误信息列表,并基于所述错误信息列表确定所述异常代码的文件名和行列信息。所述通过所述位置信息定位至所述异常代码所在的本地文件位置,包括:将所述文件名和所述行列信息输入至Node.js架构中的预设系统调用函数调用的预设执行命令中,并将所述预设执行命令定位至所述异常代码所在的本地文件位置。即,首先通过Express.js或者其他Node.jsWeb应用框架搭建Web应用服务。然后将所述目标位置映射信息文件和所述异常代码文件上传至所述应用服务中,然后通过Sourcemap分析插件进行分析以生成错误信息列表。其中所述Sourcemap分析插件包括并不限于NPM(Nodejs软件包管理工具)上的source-map包。通过对所述错误信息列表进行分析获取到报错所在原文件的文件名与行列信息,然后通过Node.js的child_process模板中的spawn函数,调用VSCode(一个高级的编辑器)注册的code命令,传入源码的文件位置及所在行列信息,即可在编辑器中打开并快速定位至报错代码的具体位置。

可见,本实施例中,首先在初始代码中设置异常代码收集工具以得到目标代码,并在对所述目标代码进行打包部署操作的同时确定目标位置映射信息文件;通过所述异常代码收集工具收集所述目标代码运行过程中的异常代码的代码信息以确定异常代码文件;通过所述目标位置映射信息文件和所述异常代码文件确定所述异常代码的位置信息,并通过所述位置信息定位至所述异常代码所在的本地文件位置。即,通过在初始代码中部署出异常代码收集工具,然后在代码运行过程中,所述异常代码收集工具会自动记录代码的报错信息。并且通过展示错误信息的页面,能够通过现代编辑器自动定位至出错代码的位置。这样一来,减少了排查错误代码的时间成本,进而提高代码开发的效率。

上述实施例系统介绍了一种异常代码定位方法,本实施例将从本申请实施的角度对异常代码定位方法进行更具体的介绍。

参见图2所示,本申请实施例公开了一种具体的异常代码定位方法,包括:

首先,设置代码并进行项目部署;设置报错收集代码,Vue项目主要收集以下两类错误:通过window.onerror方法与监听unhandledrejection事件收集JavaScript运行时错误;通过Vue全局的errorHandler方法,收集Vue组件下的错误信息。如图3所示的代码在运行过程中可以收集到类似于图4的的报错信息。然后通过正则表达式匹配或者字符串截取的方式,获得类似“app.a0a3d95e.js:1:2560”的报错信息。此数据就是需要上报的信息。考虑到Vue其组件化的特性,需要对代码进行打包后,才可在线上环境进行部署(可通过webpack、vite、rollup等打包工具进行打包处理)。打包过程中配置生成Sourcemap文件。打包生成文件后,剥离Sourcemap文件后,部署上线。

然后,当用户在页面上进行操作,产生错误时,通过第一步设置的收集代码,可以得到报错代码的位置(此时所获取到的位置是打包后文件的位置,还需进一步处理)。简单处理后,通过服务端接口上传至服务端,服务端收到请求后,将报错信息存入数据库后,按时生成错误信息文件,并导出。

最后,本地通过Express.js或者其他Node.js Web应用框架搭建Web应用服务。上传错误信息文件及Sourcemap文件,通过Web应用服务,通过Sourcemap分析插件(例如NPM上的source-map包)进行分析,生成错误信息列表。分析代码如图5所示,此时通过比对,可以获取到报错所在原文件的文件名与行列信息。然后如图6所示,通过Node.js的child_process模板中的spawn函数,调用VSCode注册的code命令,传入源码的文件位置及所在行列信息,即可在编辑器中打开并快速定位至报错代码的具体位置。

可见,本实施例中,通过在初始代码中部署出异常代码收集工具,然后在代码运行过程中,所述异常代码收集工具会自动记录代码的报错信息。并且通过展示错误信息的页面,能够通过现代编辑器自动定位至出错代码的位置。这样一来,减少了排查错误代码的时间成本,进而提高代码开发的效率。

参考图7所述,本申请实施例还相应公开了一种异常代码定位装置,包括:

工具部署模块11,用于在初始代码中设置异常代码收集工具以得到目标代码,并在对所述目标代码进行打包部署操作的同时确定目标位置映射信息文件;

异常代码文件生成模块12,用于通过所述异常代码收集工具收集所述目标代码运行过程中的异常代码的代码信息以确定异常代码文件;

代码定位模块13,用于通过所述目标位置映射信息文件和所述异常代码文件确定所述异常代码的位置信息,并通过所述位置信息定位至所述异常代码所在的本地文件位置。

可见,通过在初始代码中部署出异常代码收集工具,然后在代码运行过程中,所述异常代码收集工具会自动记录代码的报错信息。并且通过展示错误信息的页面,能够通过现代编辑器自动定位至出错代码的位置。这样一来,减少了排查错误代码的时间成本,进而提高代码开发的效率。

在一些具体的实施例中,所述工具部署模块11,具体可以包括:

代码打包单元,用于对所述目标代码进行打包操作时配置相应的位置信息文件以得到打包后目标代码;

文件剥离单元,用于对所述打包后目标代码进行部署操作时将所述位置信息文件从所述打包后目标代码中剥离以得到目标位置映射信息文件。

在一些具体的实施例中,所述异常代码文件生成模块12,具体可以包括:

异常代码收集单元,用于通过所述异常代码收集工具中的预设全局事件处理函数和预设监听事件收集所述目标代码运行过程中的运行异常代码;

错误代码收集单元,用于通过所述异常代码收集工具中的预设全局异常处理方法收集所述目标代码中的Vue组件的错误代码;

文件确定子模块,用于通过预设异常信息截取方法从所述运行异常代码和所述错误代码中确定异常代码的代码信息以确定异常代码文件。

在一些具体的实施例中,所述文件确定子模块,具体可以包括:

代码信息确定单元,用于通过正则表达式匹配操作或字符串截取操作从所述运行异常代码和所述错误代码中确定异常代码的代码信息以确定异常代码文件。

在一些具体的实施例中,所述异常代码文件生成模块12,具体可以包括:

打包位置确定单元,用于通过所述异常代码收集工具收集所述目标代码运行过程中的异常代码在打包后目标代码中的打包后位置;

位置发送单元,用于将所述打包后位置发送至预设服务端,以便所述服务端通过所述打包后位置生成相应的异常代码文件。

在一些具体的实施例中,所述代码定位模块13,具体可以包括:

异常代码分析定位子模块,用于通过预先基于Node.js架构搭建好的Web应用服务中的位置映射信息分析插件对所述目标位置映射信息文件和所述异常代码文件进行分析生成错误信息列表,并基于所述错误信息列表确定所述异常代码的文件名和行列信息。

在一些具体的实施例中,所述异常代码分析定位子模块,具体可以包括:

文本定位模块,用于将所述文件名和所述行列信息输入至Node.js架构中的预设系统调用函数调用的预设执行命令中,并将所述预设执行命令定位至所述异常代码所在的本地文件位置。

进一步的,本申请实施例还公开了一种电子设备,图8是根据一示例性实施例示出的电子设备20结构图,图中的内容不能认为是对本申请的使用范围的任何限制。

图8为本申请实施例提供的一种电子设备20的结构示意图。该电子设备20,具体可以包括:至少一个处理器21、至少一个存储器22、电源23、通信接口24、输入输出接口25和通信总线26。其中,所述存储器22用于存储计算机程序,所述计算机程序由所述处理器21加载并执行,以实现前述任一实施例公开的异常代码定位方法中的相关步骤。另外,本实施例中的电子设备20具体可以为电子计算机。

本实施例中,电源23用于为电子设备20上的各硬件设备提供工作电压;通信接口24能够为电子设备20创建与外界设备之间的数据传输通道,其所遵循的通信协议是能够适用于本申请技术方案的任意通信协议,在此不对其进行具体限定;输入输出接口25,用于获取外界输入数据或向外界输出数据,其具体的接口类型可以根据具体应用需要进行选取,在此不进行具体限定。

另外,存储器22作为资源存储的载体,可以是只读存储器、随机存储器、磁盘或者光盘等,其上所存储的资源可以包括操作系统221、计算机程序222等,存储方式可以是短暂存储或者永久存储。

其中,操作系统221用于管理与控制电子设备20上的各硬件设备以及计算机程序222,其可以是Windows Server、Netware、Unix、Linux等。计算机程序222除了包括能够用于完成前述任一实施例公开的由电子设备20执行的异常代码定位方法的计算机程序之外,还可以进一步包括能够用于完成其他特定工作的计算机程序。

进一步的,本申请还公开了一种计算机可读存储介质,用于存储计算机程序;其中,所述计算机程序被处理器执行时实现前述公开的异常代码定位方法。关于该方法的具体步骤可以参考前述实施例中公开的相应内容,在此不再进行赘述。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上对本申请所提供的技术方案进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

技术分类

06120116571634