脚本语言代码调试方法及装置、可读存储介质及电子设备制造方法及图纸

技术编号:29932749 阅读:15 留言:0更新日期:2021-09-04 19:03
本公开涉及计算机技术领域,提供了一种脚本语言代码调试方法及装置、计算机存储介质和电子设备。其中,上述方法包括:获取当前在虚拟机中被执行的操作码的第一位置属性,第一位置属性包括操作码所属的目标脚本代码文件的标识和操作码对应的脚本代码在目标脚本代码文件中的位置信息;将第一位置属性和预设断点存储容器中配置的断点的第二位置属性进行匹配;在匹配成功时,调用预设断点跳转函数以在操作码处触发断点调试功能。本公开基于在预设断点存储容器中配置断点的位置属性,可以提高脚本语言代码的调试效率。语言代码的调试效率。语言代码的调试效率。

【技术实现步骤摘要】
脚本语言代码调试方法及装置、可读存储介质及电子设备


[0001]本公开涉及计算机
,具体而言,涉及一种脚本语言代码调试方法、脚本语言代码调试装置、计算机可读存储介质以及电子设备。

技术介绍

[0002]LPC语言(由Lars Pensj
ǒ
开发的编程语言)是在C语言语法的基础上发展出来的脚本语言。作为脚本语言,LPC代码的编译和执行都由其专门的引擎驱动程序来实现。而代码的编写不可避免会产生错误,当错误发生时程序员需要对代码进行调试。
[0003]相关技术中,使用GDB工具(GDB是GNU开源组织发布的一个UNIX下的程序调试工具)对在引擎虚拟机中执行的LPC脚本进行调试。由于虚拟机执行的LPC脚本对应的当前的opcode(操作码)无论属于哪个LPC文件的哪一行,在虚拟机中的执行位置都是一样的。因此,使用GDB在指定的LPC文件和行号处设置断点时,需要在LPC文件的不同地方插入对应的断点设置代码。
[0004]然而,这种方式需要人工添加断点设置代码,且在调试完成后,需要人工对添加的调试代码进行删除,以防止和原本的代码进行混淆,因此极大的降低了LPC代码的调试效率。
[0005]需要说明的是,在上述
技术介绍
部分公开的信息仅用于加强对本公开的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。

技术实现思路

[0006]本公开的目的在于提供一种脚本语言代码调试方法及装置、计算机可读存储介质及电子设备,进而至少在一定程度上克服相关技术中直接使用GDB工具对脚本语言代码调试时效率低下的问题。
[0007]本公开的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本公开的实践而习得。
[0008]根据本公开的第一方面,提供了一种脚本语言代码调试方法,包括:
[0009]获取当前在虚拟机中被执行的操作码的第一位置属性,所述第一位置属性包括所述操作码所属的目标脚本代码文件的标识和所述操作码对应的脚本代码在所述目标脚本代码文件中的位置信息;
[0010]将所述第一位置属性和预设断点存储容器中配置的断点的第二位置属性进行匹配;
[0011]在匹配成功时,调用预设断点跳转函数以在所述操作码处触发断点调试功能。
[0012]在本公开的一种示例性实施例中,基于前述方案,所述预设断点存储容器包括预设断点存储数组,所述预设断点存储数组中每个元素存储的断点数据包括所述断点的第二位置属性和所述元素的断点状态;
[0013]其中,所述断点的第二位置属性包括断点所属的脚本代码文件的标识和断点在所
述脚本代码文件中的位置信息;
[0014]所述元素的断点状态包括未存储断点或存储的断点已被移除的第一状态、已存储断点且已存储的断点无效的第二状态、已存储断点且已存储的断点有效的第三状态。
[0015]在本公开的一种示例性实施例中,基于前述方案,所述方法还包括:
[0016]响应于添加目标断点的操作指令,根据元素的索引值的升序顺序遍历所述预设断点存储数组中的元素,在遍历到断点状态为第一状态的元素时,将所述目标断点的第二位置属性存储至所述元素中,并将所述元素的断点状态重新配置为第三状态;
[0017]响应于移除目标断点的操作指令,将所述目标断点对应的目标元素的断点状态重新配置为第一状态,在所述目标断点对应的目标元素之后存在断点状态为第二状态或第三状态的待调整元素时,针对所述待调整元素,依次将所述待调整元素中存储的断点数据前移至所述待调整元素对应的前一个元素中进行存储;
[0018]其中,在所述预设断点存储数组中,位于目标元素之后的待调整元素的索引值大于所述目标元素的索引值。
[0019]在本公开的一种示例性实施例中,基于前述方案,所述方法还包括:
[0020]响应于针对目标断点的无效状态配置指令,在所述预设断点存储数组中,将所述目标断点对应的目标元素的断点状态重新配置为第二状态;
[0021]响应于针对目标断点的有效状态配置指令,在所述预设断点存储数组中,将所述目标断点对应的目标元素的断点状态重新配置为第三状态;
[0022]响应于断点查询操作指令,查询所述预设断点存储数组中存储的断点数据,并根据第一预设格式在客户端显示查询到的所述断点数据。
[0023]在本公开的一种示例性实施例中,基于前述方案,所述将所述第一位置属性和预设断点存储容器中配置的断点的第二位置属性进行匹配,包括:
[0024]根据所述预设断点存储数组中的元素的索引值的升序顺序,遍历所述预设断点存储数组中的元素;
[0025]在遍历到存储的第二位置属性与所述第一位置属性相同且断点状态为第三状态的元素时,停止遍历且确定所述第一位置属性和所述预设断点存储容器中配置的断点的第二位置属性匹配成功。
[0026]在本公开的一种示例性实施例中,基于前述方案,所述方法还包括:
[0027]在遍历到存储的断点状态为第一状态的元素时,停止遍历且确定所述第一位置属性和所述预设断点容器中配置的断点的第二位置属性匹配失败,以使所述虚拟机继续执行下一个操作码。
[0028]在本公开的一种示例性实施例中,基于前述方案,所述将所述第一位置属性和预设断点存储容器中配置的断点的第二位置属性进行匹配,包括:
[0029]在中断方式为运行到下一个断点处时,将所述第一位置属性和预设断点存储容器中配置的断点的第二位置属性进行匹配。
[0030]在本公开的一种示例性实施例中,基于前述方案,所述方法还包括:
[0031]在中断方式为单步跳过时,若虚拟机的当前调用栈深度不大于上次调用栈深度,则调用预设断点跳转函数以在所述操作码处触发断点调试功能;
[0032]在中断方式为单步进入时,若虚拟机的当前调用栈深度不小于上次调用栈深度,
则调用预设断点跳转函数以在所述操作码处触发断点调试功能;
[0033]在中断方式为单步完成时,若虚拟机的当前调用栈深度小于上次调用栈深度,则调用预设断点跳转函数以在所述操作码处触发断点调试功能。
[0034]在本公开的一种示例性实施例中,基于前述方案,所述方法还包括:
[0035]响应于预设代码调试指令,开启代码调试进程,并在预设断点跳转函数处添加断点调试功能,以在调用所述预设断点跳转函数时触发所述断点调试功能。
[0036]在本公开的一种示例性实施例中,基于前述方案,所述方法还包括:
[0037]若所述预设断点跳转函数触发断点调试功能,则获取所述操作码的第一位置属性;
[0038]基于所述第一位置属性,在所述操作码所属的目标脚本代码文件中读取待打印脚本代码;
[0039]根据第二预设格式在客户端显示所述操作代码对应的脚本代码和所述待打印脚本代码;
[0040]其中,所述待打印脚本代码包括在所述目标脚本代码文件中,与所述操作码对应的脚本代码的位置信息的差值在预设阈值内的脚本代码。...

【技术保护点】

【技术特征摘要】
1.一种脚本语言代码调试方法,其特征在于,包括:获取当前在虚拟机中被执行的操作码的第一位置属性,所述第一位置属性包括所述操作码所属的目标脚本代码文件的标识和所述操作码对应的脚本代码在所述目标脚本代码文件中的位置信息;将所述第一位置属性和预设断点存储容器中配置的断点的第二位置属性进行匹配;在匹配成功时,调用预设断点跳转函数以在所述操作码处触发断点调试功能。2.根据权利要求1所述的脚本语言代码调试方法,其特征在于,所述预设断点存储容器包括预设断点存储数组,所述预设断点存储数组中每个元素存储的断点数据包括所述断点的第二位置属性和所述元素的断点状态;其中,所述断点的第二位置属性包括断点所属的脚本代码文件的标识和断点在所述脚本代码文件中的位置信息;所述元素的断点状态包括未存储断点或存储的断点已被移除的第一状态、已存储断点且已存储的断点无效的第二状态、已存储断点且已存储的断点有效的第三状态。3.根据权利要求2所述的脚本语言代码调试方法,其特征在于,所述方法还包括:响应于添加目标断点的操作指令,根据元素的索引值的升序顺序遍历所述预设断点存储数组中的元素,在遍历到断点状态为第一状态的元素时,将所述目标断点的第二位置属性存储至所述元素中,并将所述元素的断点状态重新配置为第三状态;响应于移除目标断点的操作指令,将所述目标断点对应的目标元素的断点状态重新配置为第一状态,在所述目标断点对应的目标元素之后存在断点状态为第二状态或第三状态的待调整元素时,针对所述待调整元素,依次将所述待调整元素中存储的断点数据前移至所述待调整元素对应的前一个元素中进行存储;其中,在所述预设断点存储数组中,位于目标元素之后的待调整元素的索引值大于所述目标元素的索引值。4.根据权利要求3所述的脚本语言代码调试方法,其特征在于,所述方法还包括:响应于针对目标断点的无效状态配置指令,在所述预设断点存储数组中,将所述目标断点对应的目标元素的断点状态重新配置为第二状态;响应于针对目标断点的有效状态配置指令,在所述预设断点存储数组中,将所述目标断点对应的目标元素的断点状态重新配置为第三状态;响应于断点查询操作指令,查询所述预设断点存储数组中存储的断点数据,并根据第一预设格式在客户端显示查询到的所述断点数据。5.根据权利要求3所述的脚本语言代码调试方法,其特征在于,所述将所述第一位置属性和预设断点存储容器中配置的断点的第二位置属性进行匹配,包括:根据所述预设断点存储数组中的元素的索引值的升序顺序,遍历所述预设断点存储数组中的元素;在遍历到存储的第二位置属性与所述第一位置属性相同且断点状态为第三状态的元素时,停止遍历且确定所述第一位置属性和所述预设断点存储容器中配置的断点的第二位置属性匹配成功。6.根据权利要求5所述的脚本语言代码调试方法,其特征在于,所述方法还包括:在遍历到存储的断点状态为第一状态的元素时,停止遍历且确定所述第一位置属性和
所述预设断点容器中配置的断点的第二位置属性匹配失败,以使所述虚拟机继续执行下一个操作码。7.根据权利要求1所述的脚本语言代码调试方法,其特征在于,所述将所述第一位置属性和预设断点存储容器中配置的断点的第二位置属性进行匹配,包括:在中断方式为运行到下一个断点处时,将所述第一位置属性和预设断点存储容器中配置的断点的第二位置属性进行匹配。8.根据权利要求7所述的脚本语言代码调试方法,其特征在于,所述方法还包括:在中断方式为单步跳过时,若虚拟机的当前调用栈深度不大于上次调用栈深度,则调用预设断点跳转函数以在所述操作码处触发断点调试功能;在中断方式为单步进入时,若虚拟机的当前调用栈深度不小于上次调用栈深度,则调用预设断点跳转函数以在所述操作码处触发断点调试功能;在中断方式为单步完成时,若虚拟机的当前调用栈深度小于上次调用栈深度,则调用预设断点跳转函数以在所述操作码处触发断点调试功能。9.根据权利要求1所述的脚本语言代码调试方法,其特征在于,所述方法还包括:响应于预设代码调试指令,开启代码调试进程,并在预设断点跳转函数处添加断点调试功能,以在调用所述预设断点跳转函数时触发所述断点调试功能。10.根据权利要求1至9中任一项所述的脚本语言代码调试方法,其特征在于,所述方法还包括:若所述预设断点跳转函数触发断点调试功能,则获取所述操作码的第一位置属性;基于所述第一位置属性,在所述操作码所属的目标脚本代码文件中读取待打印脚本代码;根据第二预设格式在客户端显示所述操作代码对应的脚本代码和所述待打印脚本代码;其中,所述待打印脚本代码包括在所述目标脚本代码文件中,与所述操作码对应的脚本代码的位置信息的差值在预设阈值内的脚本代码。11.根据权利要求1所述的脚本语言代码调试方法,其特征在于,在所述操作码处...

【专利技术属性】
技术研发人员:明畅田宛欣
申请(专利权)人:广州博冠信息科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1