CN111258887A - 脚本语言应用的调试方法及其装置、终端 - Google Patents
脚本语言应用的调试方法及其装置、终端 Download PDFInfo
- Publication number
- CN111258887A CN111258887A CN202010020773.1A CN202010020773A CN111258887A CN 111258887 A CN111258887 A CN 111258887A CN 202010020773 A CN202010020773 A CN 202010020773A CN 111258887 A CN111258887 A CN 111258887A
- Authority
- CN
- China
- Prior art keywords
- debugging
- script
- statement
- instruction
- script statement
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
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)
- Debugging And Monitoring (AREA)
Abstract
本说明书实施例公开了一种脚本语言应用的调试方法及其装置、终端,该方法在终端上实现,包括:对待调试的脚本语言应用进行静态分析。其中,脚本语言应用包括脚本语言文件,脚本语言文件包括脚本语句。根据分析结果,以脚本语句为调试单元,对脚本语言文件进行可调试化处理。接收调试服务器的调试指令,根据调试指令,对脚本语言应用进行调试。由此,实现了以脚本语句为调试单元,对脚本语言文件进行可调试化处理,通过调试服务器对终端上的脚本语言应用进行调试,无需使用脚本语言引擎内核提供的调试端口,能够在不同操作系统的终端上对脚本语言应用进行调试。
Description
【技术领域】
本说明书涉及计算机软件技术领域,尤其涉及一种脚本语言应用的调试方法及其装置、终端。
【背景技术】
随着移动互联网技术的不断发展,终端应用不断出现,终端应用分为原生应用和Web应用。其中,Web应用是一种页面展示类应用,应用的数据由服务器提供,终端只安装应用的框架部分,当用户使用Web应用时,从服务器上获取应用的数据,在终端上进行加载。
HTML5(简称H5)是构建Web内容的一种语言描述方式,使用H5开发的Web应用被称作H5 Web应用,规范标准统一。在应用开发过程中,能够使用引擎内核提供的调试端口进行调试。
小程序是一种新型的Web应用,使用H5开发,但不是标准的H5 Web应用,在应用开发过程中,使用引擎内核提供的调试端口进行调试时,操作复杂,并且在不同的操作系统中需要使用不同的调试方案,不具有通用性。
【发明内容】
本说明书实施例旨在至少在一定程度上解决相关技术中的技术问题之一。
为此,本说明书实施例的第一个目的在于提出一种脚本语言应用的调试方法,无需使用脚本语言引擎内核提供的调试端口,能够在不同操作系统的终端上对脚本语言应用进行调试。
本说明书实施例的第二个目的在于提出一种脚本语言应用的调试装置。
本说明书实施例的第三个目的在于提出一种终端。
本说明书实施例的第四个目的在于提出一种非临时性计算机可读存储介质。
为达上述目的,本说明书实施例第一方面实施例提出了一种脚本语言应用的调试方法,所述方法在终端上实现,包括:对待调试的脚本语言应用进行静态分析;其中,所述脚本语言应用包括脚本语言文件,所述脚本语言文件包括脚本语句;根据分析结果,以所述脚本语句为调试单元,对所述脚本语言文件进行可调试化处理;接收调试服务器的调试指令;以及根据所述调试指令,对所述脚本语言应用进行调试。
和现有技术相比,本说明书实施例以脚本语句为调试单元,对脚本语言文件进行可调试化处理,通过调试服务器对终端上的脚本语言应用进行调试,无需使用脚本语言引擎内核提供的调试端口,能够在不同操作系统的终端上对脚本语言应用进行调试。
另外,本说明书实施例的脚本语言应用的调试方法,还具有如下附加的技术特征:
可选地,所述根据分析结果,以所述脚本语句为调试单元,对所述脚本语言文件进行可调试化处理,包括:根据所述分析结果,确定所述脚本语言文件中每条所述脚本语句的位置;根据每条所述脚本语句的位置,在所述脚本语句中设置调试代码的入口。
可选地,在所述根据所述分析结果,确定所述脚本语言文件中每条所述脚本语句的位置之后,还包括:确定与每条所述脚本语句相关的作用域;将所述作用域内的变量作为与所述脚本语句相关的变量;将每条所述脚本语句的行号,以及与所述脚本语句相关的变量作为所述脚本语言文件的元信息;其中,所述元信息位于所述脚本语言文件的第一行。
可选地,所述确定与每条所述脚本语句相关的作用域,包括:确定所述脚本语句所在的作用域;判断所述脚本语句所在的作用域是否存在父作用域;如果是,则确定所述脚本语句所在的作用域的父作用域;将所述父作用域作为与所述脚本语句相关的作用域。
可选地,所述根据所述调试指令,对所述脚本语言应用进行调试,包括:根据所述脚本语言文件的元信息,确定每条所述脚本语句的行号,以及与所述脚本语句相关的变量;获取与所述脚本语句相关的变量的数值;确定与所述调试指令相关的脚本语句的行号;执行与所述调试指令相关的脚本语句,以对所述脚本语言应用进行调试。
可选地,所述调试指令包括设置断点指令、逐行执行指令、读取变量指令、修改变量指令中的至少一条。
本说明书实施例第二方面实施例提出了一种脚本语言应用的调试装置,所述调试装置位于终端上,包括:分析模块,用于对待调试的脚本语言应用进行静态分析;其中,所述脚本语言应用包括脚本语言文件,所述脚本语言文件包括脚本语句;处理模块,用于根据分析结果,以所述脚本语句为调试单元,对所述脚本语言文件进行可调试化处理;接收模块,用于接收调试服务器的调试指令;以及调试模块,用于根据所述调试指令,对所述脚本语言应用进行调试。
另外,本说明书实施例的脚本语言应用的调试装置,还具有如下附加的技术特征:
可选地,所述处理模块,包括:第一确定子模块,用于根据所述分析结果,确定所述脚本语言文件中每条所述脚本语句的位置;第一设置子模块,用于根据每条所述脚本语句的位置,在所述脚本语句中设置调试代码的入口。
可选地,所述装置还包括:确定模块,用于确定与每条所述脚本语句相关的作用域;第一设置模块,用于将所述作用域内的变量作为与所述脚本语句相关的变量;第二设置模块,用于将每条所述脚本语句的行号,以及与所述脚本语句相关的变量作为所述脚本语言文件的元信息;其中,所述元信息位于所述脚本语言文件的第一行。
可选地,所述确定模块,包括:第二确定子模块,确定所述脚本语句所在的作用域;判断子模块,用于判断所述脚本语句所在的作用域是否存在父作用域;第三确定子模块,用于当所述判断子模块确定所述脚本语句所在的作用域存在父作用域时,确定所述脚本语句所在的作用域的父作用域;第二设置子模块,用于将所述父作用域作为与所述脚本语句相关的作用域。
可选地,所述调试模块,包括:第四确定子模块,用于根据所述脚本语言文件的元信息,确定每条所述脚本语句的行号,以及与所述脚本语句相关的变量;获取子模块,用于获取与所述脚本语句相关的变量的数值;第五确定子模块,用于确定与所述调试指令相关的脚本语句的行号;执行子模块,用于执行与所述调试指令相关的脚本语句,以对所述脚本语言应用进行调试。
可选地,所述调试指令包括设置断点指令、逐行执行指令、读取变量指令、修改变量指令中的至少一条。
本说明书实施例第三方面实施例提出了一种终端,包括存储器和处理器;所述存储器上存储有可由处理器运行的计算机程序;所述处理器运行所述计算机程序时,执行如前述方法实施例所述的脚本语言应用的调试方法。
本说明书实施例第四方面实施例提出了一种非临时性计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如前述方法实施例所述的脚本语言应用的调试方法。
本说明书实施例附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本说明书实施例的实践了解到。
【附图说明】
为了更清楚地说明本说明书实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。
图1为本说明书实施例所提出的一种脚本语言应用的调试方法的流程示意图;
图2为本说明书实施例所提出的另一种脚本语言应用的调试方法的流程示意图;
图3为本说明书实施例所提出的又一种脚本语言应用的调试方法的流程示意图;
图4为本说明书实施例所提出的再一种脚本语言应用的调试方法的流程示意图;
图5为本说明书实施例所提供的脚本语言应用的调试方法的一个示例的流程图;
图6为本说明书实施例所提出的一种脚本语言应用的调试装置的结构示意图;
图7为本说明书实施例所提出的另一种脚本语言应用的调试装置的结构示意图;
图8为本说明书实施例所提出的又一种脚本语言应用的调试装置的结构示意图;以及
图9为本说明书实施例所提出的再一种脚本语言应用的调试装置的结构示意图。
【具体实施方式】
下面详细描述本说明书的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本说明书实施例,而不能理解为对本说明书实施例的限制。
下面参考附图描述本说明书实施例的脚本语言应用的调试方法及其装置、终端。
基于前述说明,可以知道,Web应用从服务器获取应用的数据,在终端上进行加载,因此在应用开发过程中,需要在终端上加载应用的数据,才能及时发现Web应用存在的不足,即实现真机调试。
H5 Web应用是一种跨平台的应用,能够在不同操作系统的终端上使用,而不同操作系统对H5页面中JavaScript代码的调试方案存在区别。具体来说,JavaScript代码的调试依赖于JavaScript引擎内核提供的调试端口,而在H5层和JavaScript调试层之间具有容器层和JavaScript引擎层。在Android系统中,JavaScript引擎层为v8引擎,在iOS中,JavaScript引擎为JavaScriptCore引擎,因此在Android系统和iOS中,使用JavaScript调试层对JavaScript代码进行调试需要采用不同的实现方式。
进一步地,在Android系统的终端上实现真机调试时,将JavaScript引擎内核替换为暴露调试端口的JavaScript引擎内核即可,而在iOS系统的终端上,由于iOS对各项权限的限制,只能通过模拟器模拟真机来实现“真机”调试,调试结果可能与真机上运行的效果不同。
与H5 Web应用相类似,在Android系统的终端上实现真机调试时,由于小程序不是标准的H5 Web应用,由JavaScript引擎内核实现真机调试时,不具有通用性,对不同的小程序需要使用不同的实现方法,而在iOS系统的终端上,同样只能通过模拟器模拟真机来实现“真机”调试。
针对这一问题,本说明书实施例提出了一种脚本语言应用的调试方法,该方法在终端上实现,以脚本语句为调试单元,对脚本语言文件进行可调试化处理,通过调试服务器对终端上的脚本语言应用进行调试,无需使用脚本语言引擎内核提供的调试端口,能够在不同操作系统的终端上对脚本语言应用进行调试。
为了便于说明本说明书实施例所提出的脚本语言应用的调试方法,首先从整体上对技术方案进行说明。
本说明书实施例所提出的脚本语言应用的调试方法需要在终端和调试服务器上实现,其中,终端即为前述的真机调试中的“真机”,调试服务器为真机调试的研发人员操作的设备。调试服务器具有调试界面(与现有的标准调试工具的界面相同,无需重新适应),用于与研发人员进行人机交互,调试界面中具有调试面板,研发人员通过调试面板向调试服务器输入调试指令,并将调试指令进行翻译,转化为chrome devtools或者safarideveloper tools等标准调试面板的调试指令,由调试服务器将翻译后的调试指令发送给终端。由终端执行调试指令,对终端上脚本语言应用进行调试,并将调试结果反馈给调试服务器,由调试服务器将结果展示在调试面板上,供研发人员阅读。
应当理解,对脚本语言应用进行调试的过程,其实就是让脚本语言应用中的程序暂停,读取程序状态,以隔离、消除的方式对错误进行定位,确定错误产生的原因并提出纠正错误的解决办法的过程。因此,终端接收调试服务器的调试指令之前,还需要对待调试的脚本语言应用进行相应的处理,以便能够让应用中的程序暂停,读取程序状态。
图1为本说明书实施例所提出的一种脚本语言应用的调试方法的流程示意图。如图1所示,该方法包括以下步骤:
步骤S101,对待调试的脚本语言应用进行静态分析。
其中,脚本语言应用包括脚本语言文件,脚本语言文件包括脚本语句。
其中,脚本语句即为JavaScript文件中的Statement,脚本语句之间通过分号进行间隔,每条脚本语句实现程序的一个行为,JavaScript文件是一系列脚本语句的结合。
应当理解,本说明书实施例所提供的脚本语言应用的调试方法无需借助脚本语言引擎内核(即JavaScript引擎内核)提供的调试端口来进行调试,既可以用于对H5 Web应用进行调试,还可以用于对小程序进行调试。因此,脚本语言应用既包括H5 Web应用,还包括小程序。
无论是H5 Web应用还是小程序,既包括脚本语言文件(以js为后缀名的JavaScript文件),还包括其他文件,比如资源文件、配置文件等,而在脚本语言应用的调试过程中,主要是对脚本语言文件进行调试。
可以理解,对脚本语言应用进行静态分析的目的,是为了对脚本语言文件进行模块化拆分,从调试服务器接收到调试命令后,对不同程序模块进行修改、执行和暂停操作,获取对应的程序状态,实现对程序模块的调试。
步骤S103,根据分析结果,以脚本语句为调试单元,对脚本语言文件进行可调试化处理。
需要说明的是,本说明书实施例将脚本语句作为调试单元,也就是说,只对脚本语句之间的逻辑进行调试,而不对脚本语句内部的逻辑进行调试。
换句话说,根据对脚本语言文件的分析结果,对脚本语言文件进行模块化拆分,将每条脚本语句作为一个调试单元,使得脚本语言文件在接收到调试服务器的调试指令后,能够对每条脚本语句单独进行调试。
步骤S105,接收调试服务器的调试指令。
其中,调试服务器的调试指令包括设置断点指令、逐行执行指令、读取变量指令、修改变量指令中的至少一条。
步骤S107,根据调试指令,对脚本语言应用进行调试。
基于前述说明,可以知道,在步骤S103,根据分析结果,以脚本语句为调试单元,对脚本语言文件进行可调试化处理之后,就能够根据调试指令,对不同的调试单元,即脚本语句进行修改、执行和暂停操作,读取对应的程序状态,实现对脚本语句的调试。
在步骤S105,接收调试服务器的调试指令之后,执行与调试指令相关的脚本语句,以及对应的调试代码,将调试结果反馈给调试服务器,即可实现对终端上的脚本语言应用的调试。
综上所述,本说明书实施例所提出的脚本语言应用的调试方法,该方法在终端上实现,包括:对待调试的脚本语言应用进行静态分析。其中,脚本语言应用包括脚本语言文件,脚本语言文件包括脚本语句。根据分析结果,以脚本语句为调试单元,对脚本语言文件进行可调试化处理。接收调试服务器的调试指令,根据调试指令,对脚本语言应用进行调试。由此,实现了以脚本语句为调试单元,对脚本语言文件进行可调试化处理,通过调试服务器对终端上的脚本语言应用进行调试,无需使用脚本语言引擎内核提供的调试端口,能够在不同操作系统的终端上对脚本语言应用进行调试。
基于前述说明,可以知道,对脚本语言应用进行调试的过程,也就是对脚本语言应用中的不同程序模块进行修改、执行和暂停操作,获取对应的程序状态,从而实现对程序模块的调试。由于本说明书实施例将脚本语句作为调试单元,因此在调试过程中,不需要执行脚本语言文件中的全部脚本语句,只需要执行与调试指令相关的脚本语句,为了能够将脚本语句作为调试单元,对脚本语言文件进行可调试化处理,本说明书实施例还提出了另一种脚本语言应用的调试方法。图2为本说明书实施例所提出的另一种脚本语言应用的调试方法的流程示意图,如图2所示,该方法包括以下步骤:
步骤S201,对待调试的脚本语言应用进行静态分析。
其中,脚本语言应用包括脚本语言文件,脚本语言文件包括脚本语句。
步骤S203,根据分析结果,确定脚本语言文件中每条脚本语句的位置。
应当理解,为了将脚本语句作为调试单元,实现脚本语言文件的可调试化,需要对脚本语言文件中每条脚本语句进行处理,使得每条脚本语句能够根据调试指令,执行对应的操作,并将执行结果反馈给调试服务器。
可以理解,为了能够对每条脚本语句进行处理,需要先确定脚本语言文件中每条脚本语句的位置,进而根据脚本语言的位置,找到脚本语句,并进行可调试化处理。
步骤S205,根据每条脚本语句的位置,在脚本语句中设置调试代码的入口。
基于前述说明,可以知道,调试服务器的调试指令包括设置断点指令、逐行执行指令、读取变量指令、修改变量指令中的至少一条。为了执行上述调试指令,本说明书实施例需要在脚本语句中设置对应的调试代码的入口。
具体来说,调试代码的入口是用于跳转到对应的调试代码的指令,通过执行脚本语句中调试代码的入口,能够跳转执行对应的调试代码。不同的调试指令对应于不同的调试代码,设置断点指令对应于设置断点代码,逐行执行指令对应于逐行执行代码,读取变量指令对应于读取变量代码,修改变量指令对应于修改变量代码。也就是说,在脚本语句执行不同的调试指令时,脚本语句需要跳转执行不同的调试代码。
步骤S207,接收调试服务器的调试指令。
步骤S209,根据调试指令,对脚本语言应用进行调试。
需要说明的是,对前述实施例中的步骤S101-步骤S107的解释说明,也适用于本实施例中的步骤S201-步骤S209,此处不再赘述。
从而,实现了在脚本语句中设置调试代码的入口,将脚本语句变为调试单元。
基于前述说明,可以知道,每条脚本语句实现程序的一个行为,程序的执行实现对相关变量的数据处理,因此脚本语句执行时,需要使用相关变量的数值,并在脚本语句执行后,变更相关变量的数值。为了能够在接收到调试服务器的调试指令后,获取与待执行脚本语句相关的变量的数值,本说明书实施例还提出了又一种脚本语言应用的调试方法。图3为本说明书实施例所提出的又一种脚本语言应用的调试方法的流程示意图,如图3所示,该方法包括以下步骤:
步骤S301,对待调试的脚本语言应用进行静态分析。
其中,脚本语言应用包括脚本语言文件,脚本语言文件包括脚本语句。
步骤S303,根据分析结果,确定脚本语言文件中每条脚本语句的位置。
步骤S305,确定与每条脚本语句相关的作用域。
应当理解,在执行脚本语言文件中的脚本语句之前,需要确定与脚本语句相关的变量的数值,以便在执行脚本语言文件中的脚本语句时,使用该变量的数值。
可以理解,本说明书实施例将脚本语言文件划分为多个作用域,即区块(block)作用域,脚本语句执行过程中可能会使用到的变量与该脚本语句位于同一个作用域中。因此,将脚本语句所在的作用域作为与脚本语句相关的作用域,将作用域内的变量作为与脚本语句相关的变量。
也就是说,在执行该脚本语句之前,先确定脚本语句所在的作用域内的变量的名称和数值,再执行该脚本语句。
需要说明的是,在脚本语言文件中,一个大的作用域中可能包括小的作用域,因此对于脚本语句来说,所在的小的作用域和大的作用域都是该脚本语句相关的作用域,而大的作用域中的变量包括了小的作用域中的变量。因此,一种可能的实现方式是,确定与每条脚本语句相关的作用域,包括以下步骤:
步骤S11,确定脚本语句所在的作用域。
步骤S13,判断脚本语句所在的作用域是否存在父作用域。
步骤S15,如果是,则确定脚本语句所在的作用域的父作用域。
步骤S16,将父作用域作为与脚本语句相关的作用域。
换句话说,确定与每条脚本语句相关的作用域的目的在于确定与脚本语句相关的变量,而与脚本语句相关的最大的作用域中的全部变量,就是与脚本语句相关的全部变量。
步骤S307,将作用域内的变量作为与脚本语句相关的变量。
步骤S309,将每条脚本语句的行号,以及与脚本语句相关的变量作为脚本语言文件的元信息。
其中,元信息位于脚本语言文件的第一行。
需要说明的是,元信息是关于信息的信息,用于描述信息的结构、语义、用途和用法等,本说明书实施例中的脚本语言文件的元信息将每条脚本语句的行号,以及与脚本语句相关的变量存储在元信息中。
应当理解,当调试脚本语言文件时,首先读取位于第一行的元信息,从而确定与调试指令相关的脚本语句的位置,以及与该脚本语句相关的变量,为后续执行与调试指令相关的脚本语句做好准备。
步骤S311,根据每条脚本语句的位置,在脚本语句中设置调试代码的入口。
步骤S313,接收调试服务器的调试指令。
步骤S315,根据调试指令,对脚本语言应用进行调试。
需要说明的是,对前述实施例中的步骤S201-步骤S209的解释说明,也适用于本实施例中的步骤S301-步骤S315,此处不再赘述。
从而,在调试开始时,先确定与调试指令相关的脚本语句的位置,以及与该脚本语句相关的变量,为后续执行与调试指令相关的脚本语句做好准备。
在上述实施例中,元信息中存储了每条脚本语句的行号,以及与脚本语句相关的变量,为了能够快速定位到与调试指令相关的脚本语句的位置,本说明书实施例还提出了再一种脚本语言应用的调试方法,图4为本说明书实施例所提出的再一种脚本语言应用的调试方法的流程示意图。如图4所示,该方法包括以下步骤:
步骤S401,对待调试的脚本语言应用进行静态分析。
其中,脚本语言应用包括脚本语言文件,脚本语言文件包括脚本语句。
步骤S403,根据分析结果,确定脚本语言文件中每条脚本语句的位置。
步骤S405,确定与每条脚本语句相关的作用域。
步骤S407,将作用域内的变量作为与脚本语句相关的变量。
步骤S409,将每条脚本语句的行号,以及与脚本语句相关的变量作为脚本语言文件的元信息。
其中,元信息位于脚本语言文件的第一行。
步骤S411,根据每条脚本语句的位置,在脚本语句中设置调试代码的入口。
步骤S413,接收调试服务器的调试指令。
步骤S415,根据脚本语言文件的元信息,确定每条脚本语句的行号,以及与脚本语句相关的变量。
可以理解,在接收到调试服务器的调试指令后,终端进入调试模式,先根据脚本语言文件的元信息,确定每条脚本语句的行号,以及与脚本语句相关的变量的名称。
步骤S417,获取与脚本语句相关的变量的数值。
可以理解,为了让与调试指令相关的脚本语句能够正常执行,需要获取与脚本语句相关的变量的数值。
步骤S419,确定与调试指令相关的脚本语句的行号。
可以理解,在调试指令中包括了与调试指令相关的脚本语句,根据元信息中记载的每条脚本语句的行号,可以确定与调试指令相关的脚本语句的行号。
步骤S421,执行与调试指令相关的脚本语句,以对脚本语言应用进行调试。
应当理解,在确定了与调试指令相关的脚本语句的行号之后,可以快速定位到与调试指令相关的脚本语句的位置,开始执行与调试指令相关的脚本语句。
需要说明的是,对前述实施例中的步骤S301-步骤S315的解释说明,也适用于本实施例中的步骤S401-步骤S421,此处不再赘述。
从而,实现了快速定位到与调试指令相关的脚本语句的位置。
为了更加清楚地说明本说明书实施例所提供的脚本语言应用的调试方法,下面进行举例说明。
图5为本说明书实施例所提供的脚本语言应用的调试方法的一个示例的流程图。如图5所示,研发人员对位于终端上的脚本语言应用进行调试时,需要将待调试的脚本语言应用转化为可调试的脚本语言应用,并通过调试服务器输入调试指令,实现调试。
具体来说,待调试的脚本语言应用包括脚本语言文件、资源文件和配置文件,对脚本语言应用进行静态分析后,确定脚本语言文件中每条脚本语句的位置,并在每条脚本语句中设置调试代码的入口。此外,还将每条脚本语句的行号和该脚本语句相关的变量作为元信息在脚本语言文件的第一行进行存储,从而将脚本语言应用转化为可调试的脚本语言应用。
研发人员通过调试服务器的调试面板输入调试指令,调试服务器将调试面板的调试指令翻译成标准调试指令,并发送给终端。终端接收到调试指令后,首先根据元信息确定与调试指令相关的脚本语句的行号,以及与该脚本语句相关的变量的名称,进而确定变量的数值。
根据与调试指令相关的脚本语句的行号,定位并执行与调试指令相关的脚本语句。此外,根据调试指令,执行脚本语句中插入的对应的调试代码,将结果反馈给调试服务器,在调试服务器的调试面板上进行显示,研发人员使用。
为了实现上述实施例,本说明书实施例还提出了一种脚本语言应用的调试装置,该调试装置位于终端上,图6为本说明书实施例所提出的一种脚本语言应用的调试装置的结构示意图。如图6所示,该装置包括:分析模块510,处理模块520,接收模块530,调试模块540。
分析模块510,用于对待调试的脚本语言应用进行静态分析。
其中,脚本语言应用包括脚本语言文件,脚本语言文件包括脚本语句。
处理模块520,用于根据分析结果,以脚本语句为调试单元,对脚本语言文件进行可调试化处理。
接收模块530,用于接收调试服务器的调试指令。
调试模块540,用于根据调试指令,对脚本语言应用进行调试。
进一步地,为了能够实现对脚本语言应用进行调试,一种可能的实现方式是,调试指令包括设置断点指令、逐行执行指令、读取变量指令、修改变量指令中的至少一条。
需要说明的是,前述对脚本语言应用的调试方法实施例的解释说明也适用于该实施例的脚本语言应用的调试装置,此处不再赘述。
综上所述,本说明书实施例所提出的脚本语言应用的调试装置,该调试装置位于终端上,当该调试装置进行调试时,对待调试的脚本语言应用进行静态分析。其中,脚本语言应用包括脚本语言文件,脚本语言文件包括脚本语句。根据分析结果,以脚本语句为调试单元,对脚本语言文件进行可调试化处理。接收调试服务器的调试指令,根据调试指令,对脚本语言应用进行调试。由此,实现了以脚本语句为调试单元,对脚本语言文件进行可调试化处理,通过调试服务器对终端上的脚本语言应用进行调试,无需使用脚本语言引擎内核提供的调试端口,能够在不同操作系统的终端上对脚本语言应用进行调试。
为了实现上述实施例,本说明书实施例还提出了另一种脚本语言应用的调试装置,该调试装置位于终端上,图7为本说明书实施例所提出的另一种脚本语言应用的调试装置的结构示意图。如图7所示,该装置包括:分析模块610,处理模块620,接收模块630,调试模块640。
分析模块610,用于对待调试的脚本语言应用进行静态分析。
其中,脚本语言应用包括脚本语言文件,脚本语言文件包括脚本语句。
处理模块620,用于根据分析结果,以脚本语句为调试单元,对脚本语言文件进行可调试化处理。
接收模块630,用于接收调试服务器的调试指令。
调试模块640,用于根据调试指令,对脚本语言应用进行调试。
其中,处理模块620,包括:第一确定子模块621,用于根据分析结果,确定脚本语言文件中每条脚本语句的位置。第一设置子模块622,用于根据每条脚本语句的位置,在脚本语句中设置调试代码的入口。
需要说明的是,前述对脚本语言应用的调试方法实施例的解释说明也适用于该实施例的脚本语言应用的调试装置,此处不再赘述。
从而,实现了在脚本语句中设置调试代码的入口,将脚本语句变为调试单元。
为了实现上述实施例,本说明书实施例还提出了又一种脚本语言应用的调试装置,该调试装置位于终端上,图8为本说明书实施例所提出的又一种脚本语言应用的调试装置的结构示意图。如图8所示,该装置包括:分析模块710,处理模块720,接收模块730,调试模块740,确定模块750,第一设置模块760,第二设置模块770。
分析模块710,用于对待调试的脚本语言应用进行静态分析。
其中,脚本语言应用包括脚本语言文件,脚本语言文件包括脚本语句。
处理模块720,用于根据分析结果,以脚本语句为调试单元,对脚本语言文件进行可调试化处理。
接收模块730,用于接收调试服务器的调试指令。
调试模块740,用于根据调试指令,对脚本语言应用进行调试。
确定模块750,用于确定与每条脚本语句相关的作用域。
第一设置模块760,用于将作用域内的变量作为与脚本语句相关的变量。
第二设置模块770,用于将每条脚本语句的行号,以及与脚本语句相关的变量作为脚本语言文件的元信息。
其中,元信息位于脚本语言文件的第一行。
其中,处理模块720,包括:第一确定子模块721,用于根据分析结果,确定脚本语言文件中每条脚本语句的位置。第一设置子模块722,用于根据每条脚本语句的位置,在脚本语句中设置调试代码的入口。
进一步地,为了确定与脚本语句相关的作用域,一种可能的实现方式是,确定模块750,包括:第二确定子模块751,确定脚本语句所在的作用域。判断子模块752,用于判断脚本语句所在的作用域是否存在父作用域。第三确定子模块753,用于当判断子模块752确定脚本语句所在的作用域存在父作用域时,确定脚本语句所在的作用域的父作用域。第二设置子模块754,用于将父作用域作为与脚本语句相关的作用域。
需要说明的是,前述对脚本语言应用的调试方法实施例的解释说明也适用于该实施例的脚本语言应用的调试装置,此处不再赘述。
从而,在调试开始时,先确定与调试指令相关的脚本语句的位置,以及与该脚本语句相关的变量,为后续执行与调试指令相关的脚本语句做好准备。
为了实现上述实施例,本说明书实施例还提出了再一种脚本语言应用的调试装置,该调试装置位于终端上,图9为本说明书实施例所提出的再一种脚本语言应用的调试装置的结构示意图。如图9所示,该装置包括:分析模块810,处理模块820,接收模块830,调试模块840,确定模块850,第一设置模块860,第二设置模块870。
分析模块810,用于对待调试的脚本语言应用进行静态分析。
其中,脚本语言应用包括脚本语言文件,脚本语言文件包括脚本语句。
处理模块820,用于根据分析结果,以脚本语句为调试单元,对脚本语言文件进行可调试化处理。
接收模块830,用于接收调试服务器的调试指令。
调试模块840,用于根据调试指令,对脚本语言应用进行调试。
确定模块850,用于确定与每条脚本语句相关的作用域。
第一设置模块860,用于将作用域内的变量作为与脚本语句相关的变量。
第二设置模块870,用于将每条脚本语句的行号,以及与脚本语句相关的变量作为脚本语言文件的元信息。
其中,元信息位于脚本语言文件的第一行。
其中,处理模块820,包括:第一确定子模块821,用于根据分析结果,确定脚本语言文件中每条脚本语句的位置。第一设置子模块822,用于根据每条脚本语句的位置,在脚本语句中设置调试代码的入口。
调试模块840,包括:第四确定子模块841,用于根据脚本语言文件的元信息,确定每条脚本语句的行号,以及与脚本语句相关的变量。获取子模块842,用于获取与脚本语句相关的变量的数值。第五确定子模块843,用于确定与调试指令相关的脚本语句的行号。执行子模块844,用于执行与调试指令相关的脚本语句,以对脚本语言应用进行调试。
需要说明的是,前述对脚本语言应用的调试方法实施例的解释说明也适用于该实施例的脚本语言应用的调试装置,此处不再赘述。
从而,实现了快速定位到与调试指令相关的脚本语句的位置。
为了实现上述实施例,本说明书实施例还提出一种终端,包括存储器和处理器;存储器上存储有可由处理器运行的计算机程序;当处理器运行计算机程序时,执行如前述方法实施例的脚本语言应用的调试方法。
为了实现上述实施例,实施例还提出一种非临时性计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现如前述方法实施例的脚本语言应用的调试方法。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本说明书实施例的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。
在本说明书实施例中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”、“固定”等术语应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或成一体;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通或两个元件的相互作用关系,除非另有明确的限定。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本说明书实施例中的具体含义。
在本说明书实施例中,除非另有明确的规定和限定,第一特征在第二特征“上”或“下”可以是第一和第二特征直接接触,或第一和第二特征通过中间媒介间接接触。而且,第一特征在第二特征“之上”、“上方”和“上面”可是第一特征在第二特征正上方或斜上方,或仅仅表示第一特征水平高度高于第二特征。第一特征在第二特征“之下”、“下方”和“下面”可以是第一特征在第二特征正下方或斜下方,或仅仅表示第一特征水平高度小于第二特征。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本说明书实施例的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。
Claims (14)
1.一种脚本语言应用的调试方法,所述方法在终端上实现,包括:
对待调试的脚本语言应用进行静态分析;其中,所述脚本语言应用包括脚本语言文件,所述脚本语言文件包括脚本语句;
根据分析结果,以所述脚本语句为调试单元,对所述脚本语言文件进行可调试化处理;
接收调试服务器的调试指令;以及
根据所述调试指令,对所述脚本语言应用进行调试。
2.如权利要求1所述的调试方法,其中,所述根据分析结果,以所述脚本语句为调试单元,对所述脚本语言文件进行可调试化处理,包括:
根据所述分析结果,确定所述脚本语言文件中每条所述脚本语句的位置;
根据每条所述脚本语句的位置,在所述脚本语句中设置调试代码的入口。
3.如权利要求2所述的调试方法,其中,在所述根据所述分析结果,确定所述脚本语言文件中每条所述脚本语句的位置之后,还包括:
确定与每条所述脚本语句相关的作用域;
将所述作用域内的变量作为与所述脚本语句相关的变量;
将每条所述脚本语句的行号,以及与所述脚本语句相关的变量作为所述脚本语言文件的元信息;其中,所述元信息位于所述脚本语言文件的第一行。
4.如权利要求3所述的调试方法,其中,所述确定与每条所述脚本语句相关的作用域,包括:
确定所述脚本语句所在的作用域;
判断所述脚本语句所在的作用域是否存在父作用域;
如果是,则确定所述脚本语句所在的作用域的父作用域;
将所述父作用域作为与所述脚本语句相关的作用域。
5.如权利要求3所述的调试方法,其中,所述根据所述调试指令,对所述脚本语言应用进行调试,包括:
根据所述脚本语言文件的元信息,确定每条所述脚本语句的行号,以及与所述脚本语句相关的变量;
获取与所述脚本语句相关的变量的数值;
确定与所述调试指令相关的脚本语句的行号;
执行与所述调试指令相关的脚本语句,以对所述脚本语言应用进行调试。
6.如权利要求1-5中任一项所述的调试方法,其中,所述调试指令包括设置断点指令、逐行执行指令、读取变量指令、修改变量指令中的至少一条。
7.一种脚本语言应用的调试装置,所述调试装置位于终端上,包括:
分析模块,用于对待调试的脚本语言应用进行静态分析;其中,所述脚本语言应用包括脚本语言文件,所述脚本语言文件包括脚本语句;
处理模块,用于根据分析结果,以所述脚本语句为调试单元,对所述脚本语言文件进行可调试化处理;
接收模块,用于接收调试服务器的调试指令;以及
调试模块,用于根据所述调试指令,对所述脚本语言应用进行调试。
8.如权利要求7所述的调试装置,其中,所述处理模块,包括:
第一确定子模块,用于根据所述分析结果,确定所述脚本语言文件中每条所述脚本语句的位置;
第一设置子模块,用于根据每条所述脚本语句的位置,在所述脚本语句中设置调试代码的入口。
9.如权利要求8所述的调试装置,其中,所述装置还包括:
确定模块,用于确定与每条所述脚本语句相关的作用域;
第一设置模块,用于将所述作用域内的变量作为与所述脚本语句相关的变量;
第二设置模块,用于将每条所述脚本语句的行号,以及与所述脚本语句相关的变量作为所述脚本语言文件的元信息;其中,所述元信息位于所述脚本语言文件的第一行。
10.如权利要求9所述的调试装置,其中,所述确定模块,包括:
第二确定子模块,确定所述脚本语句所在的作用域;
判断子模块,用于判断所述脚本语句所在的作用域是否存在父作用域;
第三确定子模块,用于当所述判断子模块确定所述脚本语句所在的作用域存在父作用域时,确定所述脚本语句所在的作用域的父作用域;
第二设置子模块,用于将所述父作用域作为与所述脚本语句相关的作用域。
11.如权利要求9所述的调试装置,其中,所述调试模块,包括:
第四确定子模块,用于根据所述脚本语言文件的元信息,确定每条所述脚本语句的行号,以及与所述脚本语句相关的变量;
获取子模块,用于获取与所述脚本语句相关的变量的数值;
第五确定子模块,用于确定与所述调试指令相关的脚本语句的行号;
执行子模块,用于执行与所述调试指令相关的脚本语句,以对所述脚本语言应用进行调试。
12.如权利要求7-11中任一项所述调试装置,其中,所述调试指令包括设置断点指令、逐行执行指令、读取变量指令、修改变量指令中的至少一条。
13.一种终端,包括存储器和处理器;所述存储器上存储有可由处理器运行的计算机程序;所述处理器运行所述计算机程序时,执行如权利要求1-6中任一项所述的脚本语言应用的调试方法。
14.一种非临时性计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1-6中任一项所述的脚本语言应用的调试方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010020773.1A CN111258887A (zh) | 2020-01-09 | 2020-01-09 | 脚本语言应用的调试方法及其装置、终端 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010020773.1A CN111258887A (zh) | 2020-01-09 | 2020-01-09 | 脚本语言应用的调试方法及其装置、终端 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111258887A true CN111258887A (zh) | 2020-06-09 |
Family
ID=70946780
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010020773.1A Pending CN111258887A (zh) | 2020-01-09 | 2020-01-09 | 脚本语言应用的调试方法及其装置、终端 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111258887A (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101719093A (zh) * | 2009-12-09 | 2010-06-02 | 上海普元信息技术有限责任公司 | 企业Web应用系统中实现跨浏览器Javascript调试的系统及其方法 |
US20120151452A1 (en) * | 2010-12-14 | 2012-06-14 | Microsoft Corporation | Remote debugging of server side code without blocking or high-level privileges |
CN102609353A (zh) * | 2012-01-17 | 2012-07-25 | 浪潮(北京)电子信息产业有限公司 | 对程序调试进行管理的方法、装置及系统 |
US20150309916A1 (en) * | 2014-04-28 | 2015-10-29 | Zihan Chen | Remote debugging into mobile web applications across devices |
CN109117361A (zh) * | 2018-06-21 | 2019-01-01 | 腾讯科技(深圳)有限公司 | 一种小程序的远程调试方法、相关设备及系统 |
CN109800173A (zh) * | 2019-01-28 | 2019-05-24 | 腾讯科技(深圳)有限公司 | 程序调试方法、装置及存储介质 |
-
2020
- 2020-01-09 CN CN202010020773.1A patent/CN111258887A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101719093A (zh) * | 2009-12-09 | 2010-06-02 | 上海普元信息技术有限责任公司 | 企业Web应用系统中实现跨浏览器Javascript调试的系统及其方法 |
US20120151452A1 (en) * | 2010-12-14 | 2012-06-14 | Microsoft Corporation | Remote debugging of server side code without blocking or high-level privileges |
CN102609353A (zh) * | 2012-01-17 | 2012-07-25 | 浪潮(北京)电子信息产业有限公司 | 对程序调试进行管理的方法、装置及系统 |
US20150309916A1 (en) * | 2014-04-28 | 2015-10-29 | Zihan Chen | Remote debugging into mobile web applications across devices |
CN109117361A (zh) * | 2018-06-21 | 2019-01-01 | 腾讯科技(深圳)有限公司 | 一种小程序的远程调试方法、相关设备及系统 |
CN109800173A (zh) * | 2019-01-28 | 2019-05-24 | 腾讯科技(深圳)有限公司 | 程序调试方法、装置及存储介质 |
Non-Patent Citations (1)
Title |
---|
IT架构圈: "小程序JAVA实践小程序远程调试(九)", 《HTTPS://BLOG.51CTO.COM/U_12040702/2422152》 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109325195B (zh) | 浏览器的渲染方法和系统、计算机设备、计算机存储介质 | |
EP2915047B1 (en) | System and method for debugging domain specific languages | |
WO2016177124A1 (zh) | 一种实现持续集成测试的方法及装置 | |
CN108388515B (zh) | 测试数据生成方法、装置、设备以及计算机可读存储介质 | |
US20160011958A1 (en) | Debugging analysis in running multi-user systems | |
US7069474B2 (en) | System and method for assessing compatibility risk | |
CN105446712B (zh) | 一种应用程序缺陷修补方法及装置 | |
JP2000181725A (ja) | 実行可能なコ―ドを改変し、追加機能を付与するための方法およびシステム | |
CN109634648B (zh) | 一种快速切换sdk网络接口环境的方法及装置 | |
CN115357515B (zh) | 一种多核系统的调试方法、装置、计算机设备及存储介质 | |
CN111475390A (zh) | 日志采集系统部署方法、装置、设备及存储介质 | |
CN109032687B (zh) | 屏蔽sdk危险调用的方法及装置 | |
US8495587B2 (en) | Method, apparatus or software for selectively activating a trace function | |
CN112433940A (zh) | 软件开发工具包sdk测试方法及相关设备 | |
CN112115055A (zh) | 一种多机自动化测试方法、装置及计算机设备 | |
CN110347601B (zh) | 脚本进程的中断处理方法和装置 | |
CN111258887A (zh) | 脚本语言应用的调试方法及其装置、终端 | |
CN113986404A (zh) | JavaScript脚本执行方法、装置、电子设备及存储介质 | |
CN111367752B (zh) | 识别Android真机和模拟器的方法、装置及存储介质 | |
Samara | A practical approach for detecting logical error in object oriented environment | |
Cormack | The rump kernel: A tool for driver development and a toolkit for applications | |
CN110737983A (zh) | 交通工具的功能试验方法、装置、设备及存储介质 | |
Chen et al. | A gui-based automated test system for android applications | |
CN111427795A (zh) | 代码测试控制方法与装置、存储介质、电子设备 | |
CN114327648B (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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20200609 |