CN108628739A - 一种对Lua脚本进行调试的方法、客户端、服务器及调试器 - Google Patents
一种对Lua脚本进行调试的方法、客户端、服务器及调试器 Download PDFInfo
- Publication number
- CN108628739A CN108628739A CN201810225755.XA CN201810225755A CN108628739A CN 108628739 A CN108628739 A CN 108628739A CN 201810225755 A CN201810225755 A CN 201810225755A CN 108628739 A CN108628739 A CN 108628739A
- Authority
- CN
- China
- Prior art keywords
- debugging
- client
- server
- lua
- debug command
- 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
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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (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
本发明实施例提供了一种对Lua脚本进行调试的方法、客户端、服务器及调试器,其中所述调试器以插件的形式集成在Xcode开发环境中,所述调试器包括客户端以及服务器,所述客户端与所述服务器通过预先定义的通信协议进行通信,当所述方法应用在所述客户端时,所述方法包括:展示调试界面,其中,所述调试界面包括多个调试功能按钮;检测用户通过所述调试功能按钮发起的调试操作,并基于所述调试操作生成调试命令;将所述调试命令发送至所述服务器。本发明实施例可以实现调试器的图形调试功能,提高调试效率。
Description
技术领域
本发明涉及脚本调试技术领域,特别是涉及一种对Lua脚本进行调试的方法、一种对Lua脚本进行调试的客户端、一种对Lua脚本进行调试的服务器以及一种调试器。
背景技术
Lua是一个小巧的脚本语言,该语言的设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
在现有技术中,对于将Lua引擎内置并将Lua脚本作为业务接口的***而言,主要的调试手段都是通过日志输出,通过命令行调试器进行调试,整个调试过程使用不便,效率低下,并且需要开发人员具备命令行编辑的基础知识,学习成本较高。
发明内容
鉴于上述问题,提出了本发明实施例以便提供一种克服上述问题或者至少部分地解决上述问题的一种对Lua脚本进行调试的方法和相应的一种对Lua脚本进行调试的客户端、一种对Lua脚本进行调试的服务器以及一种调试器。。
为了解决上述问题,本发明实施例公开了一种对Lua脚本进行调试的方法,所述方法应用于调试器中,所述调试器以插件的形式集成在Xcode开发环境中,所述调试器包括客户端以及服务器,所述客户端与所述服务器通过预先定义的通信协议进行通信,当所述方法应用在所述客户端时,所述方法包括:
展示调试界面,其中,所述调试界面包括多个调试功能按钮;
检测用户通过所述调试功能按钮发起的调试操作,并基于所述调试操作生成调试命令;
将所述调试命令发送至所述服务器。
优选地,所述方法还包括:
接收所述服务器基于所述调试命令返回的回传命令;
基于所述回传命令执行对应的操作。
优选地,在所述展示调试界面之前,还包括:
监听Xcode的通知消息;
从所述通知消息中查找所需的目标方法名称;
将所述目标方法名称的原有方法实现替换为预设的目标方法实现。
优选地,在所述展示调试界面之前,还包括:
建立与服务器之间的socket连接。
优选地,所述调试功能按钮包括如下的至少一种或组合:增加行断点、移除行断点、增加函数断点、移除函数断点、单步执行、单行执行、继续执行、批量增加断点、移除所有断点。
本发明实施例还公开了一种对Lua脚本进行调试的方法,所述方法应用于调试器中,所述调试器以插件的形式集成在Xcode开发环境中,所述调试器包括客户端以及服务器,所述客户端与所述服务器通过预先定义的通信协议进行通信,当应用在所述服务器时,所述方法包括:
当进入调试模式时,若匹配到断点信息,则中断当前Lua脚本程序的执行;
接收客户端发送的调试命令,其中,所述调试命令为所述客户端展示调试界面后,检测到用户通过所述调试界面发起的调试操作时生成的命令;
执行与所述调试命令对应的动作。
优选地,在所述执行与所述调试命令对应的动作之后,还包括:
生成回传命令;
将所述回传命令发送至所述客户端。
优选地,所述当进入调试模式时,若匹配到断点信息,则中断当前Lua脚本程序的执行之前,还包括:
注册Lua调试钩子函数Lua debug hook;
将所述Lua debug hook绑定指定回调事件;
在Lua脚本程序的执行过程中,当执行到所述指定回调事件时,则调用所述Luadebug hook,进入调试模式。
本发明实施例还公开了一种对Lua脚本进行调试的客户端,所述客户端所属的调试器以插件的形式集成在Xcode开发环境中,所述客户端与服务器通过预先定义的通信协议进行通信,所述客户端包括:
调试界面展示模块,用于展示调试界面,其中,所述调试界面包括多个调试功能按钮;
调试命令生成模块,用于检测用户通过所述调试功能按钮发起的调试操作,并基于所述调试操作生成调试命令;
调试命令发送模块,用于将所述调试命令发送至所述服务器。
优选地,所述客户端还包括:
回传命令接收模块,用于接收所述服务器基于所述调试命令返回的回传命令;
回传命令执行模块,用于基于所述回传命令执行对应的操作。
优选地,所述客户端还包括:
通知监听模块,用于监听Xcode的通知消息;
实现替换模块,用于从所述通知消息中查找所需的目标方法名称,并将所述目标方法名称的原有方法实现替换为预设的目标方法实现。
优选地,所述客户端还包括:
连接建立模块,用于建立与服务器之间的socket连接。
优选地,所述调试功能按钮包括如下的至少一种或组合:增加行断点、移除行断点、增加函数断点、移除函数断点、单步执行、单行执行、继续执行、批量增加断点、移除所有断点。
本发明实施例还公开了一种对Lua脚本进行调试的服务器,所述服务器所属的调试器以插件的形式集成在Xcode开发环境中,所述服务器与客户端通过预先定义的通信协议进行通信,所述服务器包括:
中断模块,用于当进入调试模式时,若匹配到断点信息,则中断当前Lua脚本程序的执行;
调试命令接收模块,用于接收客户端发送的调试命令,其中,所述调试命令为所述客户端展示调试界面后,检测到用户通过所述调试界面发起的调试操作时生成的命令;
调试命令执行模块,用于执行与所述调试命令对应的动作。
优选地,所述服务器还包括:
回传命令生成模块,用于生成回传命令;
回传命令发送模块,用于将所述回传命令发送至所述客户端。
优选地,所述服务器还包括:
钩子注册模块,用于注册Lua调试钩子函数Lua debug hook;
事件绑定模块,用于将所述Lua debug hook绑定指定回调事件;
调试模块进入模块,用于在Lua脚本程序的执行过程中,当执行到所述指定回调事件时,则调用所述Lua debug hook,进入调试模式。
本发明实施例还公开了一种调试器,所述调试器以插件的形式集成在Xcode开发环境中,所述调试器包括客户端以及服务器,所述客户端与所述服务器通过预先定义的通信协议进行通信,其中,
所述客户端用于:
展示调试界面,其中,所述调试界面包括多个调试功能按钮;
检测用户通过所述调试功能按钮发起的调试操作,并基于所述调试操作生成调试命令;
将所述调试命令发送至所述服务器;
所述服务器用于:
当进入调试模式时,若匹配到断点信息,则中断当前Lua脚本程序的执行;
接收客户端发送的调试命令,其中,所述调试命令为所述客户端展示调试界面后,检测到用户通过所述调试界面发起的调试操作时生成的命令;
执行与所述调试命令对应的动作。
与背景技术相比,本发明实施例包括以下优点:
在本发明实施例中,调试器以插件的形式集成在Xcode开发环境中,解决了Xcode环境没有Lua调试工具的问题,基于Xcode的特性,调试器可以通过客户端展示调试界面,当检测用户通过调试界面发起的调试操作时,根据该调试操作生成调试命令,并将调试命令发送至服务器,从而实现调试器的图形调试功能,提高调试效率。
进一步的,通过客户端的图形调试功能,能明显降低客户端脚本调试的学习成本,方便脚本方案推广到其他团队,并且能明显提高客户端开发的便利性,降低开发成本。
附图说明
图1是本发明的一种对Lua脚本进行调试的方法实施例的步骤流程图;
图2是本发明的一种对Lua脚本进行调试的方法实施例中的调试界面示意图;
图3是本发明的一种对Lua脚本进行调试的方法另一实施例的步骤流程图;
图4是本发明的一种对Lua脚本进行调试的客户端实施例的结构框图;
图5是本发明的一种对Lua脚本进行调试的服务器实施例的结构框图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
本发明实施例涉及对Lua脚本程序的调试,在本发明实施例中,该调试所使用的调试器可以以插件的形式集成在Xcode开发环境中,即,将调试器直接集成在宿主开发工具中,从而使得调试器可以以图形化的形式提供调试功能,大大提高了调试效率。其中,Xcode是运行在操作***Mac OS X上的集成开发工具(IDE),Xcode具有统一的用户界面设计、编码、测试、调试都在一个简单的窗口内完成。
本发明实施例中的调试器可以包括客户端以及服务器,该客户端与服务器可以通过预先定义的通信协议进行通信,该指定通信协议可以为自定义的通信协议,并且,其具有设定的调试命令格式,例如,该调试命令格式可以表示为“action:param”,其中,action表示命令类型,param表示命令参数。
作为本发明实施例的一种优选示例,该客户端可以包括安装在移动终端中的移动客户端,但应当理解的是,本发明实施例的客户端并不限于移动客户端,安装在其他载体上的客户端也适用于本发明实施例。
参照图1,示出了本发明的一种对Lua脚本进行调试的方法实施例的步骤流程图,当本发明实施例应用在客户端侧时,具体可以包括如下步骤:
步骤101,展示调试界面,其中,所述调试界面包括多个调试功能按钮;
在一种实施方式中,在步骤101以前,还可以包括如下步骤:
监听Xcode的通知消息;从所述通知消息中查找所需的目标方法名称;将所述目标方法名称的原有方法实现替换为预设的目标方法实现。
具体的,将调试器以插件的形式集成在宿主环境中以后,调试器的客户端可以监听Xcode发出的所有通知消息,其中,所述通知消息为Xcode的各种标准的通知消息,所述通知消息包括方法名称及其方法实现,随后,客户端可以从收到的通知消息中找到所需的目标方法名称,然后可以采用Method Swizzle(Method Swizzle能够让用户在运行时替换已有方法来实现用户的一些需求)将该方法名称对应的原有方法实现,替换为预先设置的目标方法实现。
在本发明实施例的一种优选实施例中,通过上述方法将***原有入口替换成客户端自己的实现后,还可以包括如下步骤:
建立与服务器之间的socket连接。
在具体实现中,socket连接的过程可以包括服务器监听、客户端请求、连接确认等过程,当socket连接建立以后,则可以进行客户端与服务器之间的数据传输,从而实现调试功能。
在本发明实施例中,服务器与客户端之间的传输协议可以采用自定义的通信协议,本发明实施例并不限定通信协议的具体内容,只要是服务器和客户端预先协商好的即可。
在本发明实施例中,基于Xcode的特性,可以通过客户端展示调试界面,从而实现调试器的图形调试功能。
在一种实施方式中,调试器可以提供的调试功能至少可以包括如下:
c/continue:继续执行;
bt/backtrace:列出当前堆栈;
f/frame n:跳转到frame n;
l/list b e:列出源代码,b为起始行,e为结束行;
p/print v:打印v的值;
n/next:执行,跳过下一行,包括跳过子函数;
s/step:执行,直到碰到不同的一行;
return:执行,直到该函数结束。
则调试界面中可以包括多个调试功能按钮,作为一种示例,该调试功能按钮可以包括如下的至少一种或组合:增加行断点、移除行断点、增加函数断点、移除函数断点、单步执行、单行执行、继续执行、批量增加断点、移除所有断点等等。
例如,如图2所示的调试界面示意图,该调试界面可以包括“下一行”、“下一步”、“显示调用栈”等调试功能按钮。
在本发明实施例中,由于在调试界面中可以支持批量增加断点、移除所有断点等批量操作,则在调试时可以避免频繁切换,大大提高了调试效率。
步骤102,检测用户通过所述调试功能按钮发起的调试操作,并基于所述调试操作生成调试命令;
通过客户端向用户(如开发人员)显示调试界面后,用户可以在该客户端中执行调试操作,例如,点击调试功能按钮,当客户端检测到用户点击的调试功能按钮这样的调试操作时,可以根据点击的调试功能按钮,确定调试意图,并通过预先定义的通信协议将该调试意图转换成调试命令。
例如,在图2中,当用户点击“下一步”时,则可以确定调试意图为“step”,并根据预先定义的通信协议生成基于“step”的调试命令。
步骤103,将所述调试命令发送至所述服务器。
生成调试命令以后,客户端可以将该调试命令发送至服务器,由服务器解析该调试命令并执行相应的动作。
在本发明实施例的一种优选实施例中,还可以包括如下步骤:
接收所述服务器基于所述调试命令返回的回传命令;基于所述回传命令执行对应的操作。
在具体实现中,服务器执行该调试命令对应的动作以后,可以生成回传命令,并将该回传命令发送至客户端,由客户端执行该回传命令对应的操作。
在实际中,回传命令可以包含执行结果以及当前执行上下文等信息。作为一种示例,该回传命令可以包括如下的一种或组合:打开文件、指示当前运行位置、显示断点。
例如,当服务器根据“step”调试命令执行lua脚本程序时,执行结果为通知客户端当前代码位置等,则可以根据该执行结果按照通信协议生成回传命令,将该回传命令发送给客户端,则客户端接收到回传命令后,解析该命令,获知对应的需要执行的动作,并执行该动作,如指示当前代码位置等动作。
在本发明实施例中,调试器以插件的形式集成在Xcode开发环境中,解决了Xcode环境没有Lua调试工具的问题,基于Xcode的特性,调试器可以通过客户端展示调试界面,当检测用户通过调试界面发起的调试操作时,根据该调试操作生成调试命令,并将调试命令发送至服务器,从而实现调试器的图形调试功能,提高调试效率。
进一步的,通过客户端的图形调试功能,能明显降低客户端脚本调试的学习成本,方便脚本方案推广到其他团队,并且能明显提高客户端开发的便利性,降低开发成本。
参照图3,示出了本发明的一种对Lua脚本进行调试的方法另一实施例的步骤流程图,当本发明实施例应用在服务器侧时,具体可以包括如下步骤:
步骤301,当进入调试模式时,若匹配到断点信息,则中断当前Lua脚本程序的执行;
在一种实施方式中,可以采用如下方式使得服务器进入调试模式:
注册Lua调试钩子函数Lua debug hook;将所述Lua debug hook绑定指定回调事件;在Lua脚本程序的执行过程中,当执行到所述指定回调事件时,则调用所述Lua debughook,进入调试模式。
具体的,Lua提供了一个调试库debug library,可以通过这个库来实现调试器。首先,可以利用Lua引擎提供的调试原语,注册一个Lua调试钩子函数Lua debug hook,并将Lua debug hook绑定指定回调事件,这样当Lua代码执行的时候如果碰到相应的回调事件,则会调用注册的Lua debug hook,当Lua debug hook调用时,程序就进入debug模式(即调试模式)。
指定回调事件可以为Lua***提供的回调事件,作为一种示例,该指定回调事件可以包括但不限于如下事件:LUA_MASKLINE、LUA_MASKRET、LUA_MASKCALL等。具体的,可以调用lua_sethook函数传入上面的参数,并在对应的调用处调用注册的回调函数,其中,LUA_MASKLINE在每执行一行代码时被触发,LUA_MASKRET在函数返回时被触发,LUA_MASKCALL在函数被调用时触发。
在实际中,只要注册了Lua debug hook,那么每次Lua脚本代码执行的时候碰到对应的回调事件就会调用注册hook,如果每次调用都进入debug模式,那是很影响程序运行的,所以需要一种机制,只在需要的时候进入debug模式。
在一种实施方式中,可以将Lua debug hook函数内部实现为一个状态机,当没有进入debug模式的时候,虽然Lua也会进入调用该hook,但该hook内部不作任何处理。只有当执行debug函数进入debug模式时,hook内部才会有相应的处理。
具体而言,Lua debug hook里面可以提供多种状态,例如,该多种状态可以包括none hook、step hook、next hook、return hook等状态。其中,
none hook:表示没有进入debug模式,该hook不做任何处理。
step hook:表示进入debug的step模式,当lua代码执行到新的一行代码时候做处理。
next hook:表示进入debug的next模式,当lua代码跳过下一行时候做处理。
return hook:表示进入debug的return模式,当lua执行到当前函数退出时候做处理。
本发明实施例的调试器可以提供的调试功能至少可以包括如下:
c/continue:继续执行;
bt/backtrace:列出当前堆栈;
f/frame n:跳转到frame n;
l/list b e:列出源代码,b为起始行,e为结束行;
p/print v:打印v的值;
n/next:执行,跳过下一行,包括跳过子函数;
s/step:执行,直到碰到不同的一行;
return:执行,直到该函数结束。
其中,continue可以让程序继续执行,该命令会让hook切入none hook状态,直到下次Lua执行debug函数进入debug模式。
step会让hook切入step hook状态,该hook会监听LUA_MASKLINE事件,当该事件发生时候,step hook进行处理,通知客户端当前代码位置,并再次进入debug模式,等待下次命令输入。
next会让hook切入next hook状态,该hook也会监听LUA_MASKLINE事件,但是next跟step最大的区别在于next是跳过一行,也就是说,如果执行的Lua代码下一行是一个函数调用,step会进入函数内部,而next则会执行该函数,并跳过该函数这一行直到下一行。
因此,next需要进行判断LUA_MASKLINE是否进入了一个新的函数,这里可以通过函数堆栈深度来进行,当lua代码执行到一个新的函数的时候,它的函数堆栈深度会加1,所以只需要记录当前的堆栈深度a,next执行到下一次LUA_MASKLINE时候,获取堆栈深度b,如果a小于b,那么表明进入了一个新的函数,所以不需要处理,直到再次获取的堆栈深度等于a。
return会让hook切入return hook状态,该hook会监听LUA_MASKRET事件,当该事件发生,return hook进行处理。
在本发明实施例中,用户可以通过客户端的调试界面增加或删除断点,其中,该增加或删除断点的操作可以单个执行,也可以批量执行,本发明实施例对此不作限制。
则在服务器侧,如果碰到相应的回调事件,在调用注册的Lua debug hook时,可以通过lua_getinfo函数从hook中取得当前执行环境的文件信息,与用户设置的断点进行比较,当执行环境与断点一致时,表示命中断点,则暂停Lua脚本程序的执行。
步骤302,接收客户端发送的调试命令;
在debug模式下,可以从客户端中接收调试命令,其中,该调试命令可以为客户端展示调试界面后,检测到用户通过调试界面发起的调试操作时生成的命令。
作为一种示例,该调试命令可以包括但不限于如下命令的至少一种或组合:增加行断点、移除行断点、增加函数断点、移除函数断点、单步执行、单行执行、继续执行、批量增加断点、移除所有断点。
步骤303,执行与所述调试命令对应的动作。
服务器接收到客户端发送的调试命令以后,可以根据预先协商的通信协议解析该调试命令,并执行该调试命令对应的动作。
例如,当调试命令为“step”时,则step hook进行处理。
在本发明实施例的一种优选实施例中,还可以包括如下步骤:
生成回传命令;将所述回传命令发送至所述客户端。
具体的,服务器执行对应的动作以后,可以将执行结果,按照通信协议的格式规定,生成回传命令,并将回传命令发送至客户端,由客户端执行该回传命令对应的操作。
作为一种示例,该回传命令可以包括如下的一种或组合:打开文件、指示当前运行位置、显示断点。
例如,step hook进行处理后得到的回传命令为显示当前代码位置,则客户端解析该回传命令后,执行指示当前代码位置的操作。
在本发明实施例中,服务器可以从客户端中接收调试命令并执行对应的动作,以完成调试功能,无需开发人员输入命令行的方式进行调试,提高了调试效率。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
参照图4,示出了本发明的一种对Lua脚本进行调试的客户端实施例的结构框图,其中,所述客户端所属的调试器以插件的形式集成在Xcode开发环境中,所述客户端与服务器通过预先定义的通信协议进行通信。
所述客户端具体可以包括如下模块:
调试界面展示模块401,用于展示调试界面,其中,所述调试界面包括多个调试功能按钮;
调试命令生成模块402,用于检测用户通过所述调试功能按钮发起的调试操作,并基于所述调试操作生成调试命令;
调试命令发送模块403,用于将所述调试命令发送至所述服务器。
在本发明实施例的一种优选实施例中,所述客户端还可以包括如下模块:
回传命令接收模块,用于接收所述服务器基于所述调试命令返回的回传命令;
回传命令执行模块,用于基于所述回传命令执行对应的操作。
在本发明实施例的一种优选实施例中,所述客户端还可以包括如下模块:
通知监听模块,用于监听Xcode的通知消息;
实现替换模块,用于从所述通知消息中查找所需的目标方法名称,并将所述目标方法名称的原有方法实现替换为预设的目标方法实现。
在本发明实施例的一种优选实施例中,所述客户端还可以包括如下模块:
连接建立模块,用于建立与服务器之间的socket连接。
在本发明实施例的一种优选实施例中,所述调试功能按钮包括如下的至少一种或组合:增加行断点、移除行断点、增加函数断点、移除函数断点、单步执行、单行执行、继续执行、批量增加断点、移除所有断点。
对于客户端实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
参照图5,示出了本发明的一种对Lua脚本进行调试的服务器实施例的结构框图,其中,所述服务器所属的调试器以插件的形式集成在Xcode开发环境中,所述服务器与客户端通过预先定义的通信协议进行通信。
所述服务器具体可以包括如下模块:
中断模块501,用于当进入调试模式时,若匹配到断点信息,则中断当前Lua脚本程序的执行;
调试命令接收模块502,用于接收客户端发送的调试命令,其中,所述调试命令为所述客户端展示调试界面后,检测到用户通过所述调试界面发起的调试操作时生成的命令;
调试命令执行模块503,用于执行与所述调试命令对应的动作。
在本发明实施例的一种优选实施例中,所述服务器还可以包括如下模块:
回传命令生成模块,用于生成回传命令;
回传命令发送模块,用于将所述回传命令发送至所述客户端。
在本发明实施例的一种优选实施例中,所述服务器还可以包括如下模块:
钩子注册模块,用于注册Lua调试钩子函数Lua debug hook;
事件绑定模块,用于将所述Lua debug hook绑定指定回调事件;
调试模块进入模块,用于在Lua脚本程序的执行过程中,当执行到所述指定回调事件时,则调用所述Lua debug hook,进入调试模式。
对于服务器实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本发明实施例还公开了一种调试器,所述调试器以插件的形式集成在Xcode开发环境中,所述调试器包括图4的客户端以及图5的服务器,所述客户端与所述服务器通过预先定义的通信协议进行通信。
本发明实施例还公开了一种调试装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,该程序被处理器执行时可以实现图1或图3所述方法
本发明实施例还公开了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时可以实现图1或图3所述方法。
对于调试装置、计算机可读存储介质实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明实施例是参照根据本发明实施例的方法、终端设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本发明所提供的一种对Lua脚本进行调试的方法、客户端、服务器及调试器进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (17)
1.一种对Lua脚本进行调试的方法,其特征在于,所述方法应用于调试器中,所述调试器以插件的形式集成在Xcode开发环境中,所述调试器包括客户端以及服务器,所述客户端与所述服务器通过预先定义的通信协议进行通信,当所述方法应用在所述客户端时,所述方法包括:
展示调试界面,其中,所述调试界面包括多个调试功能按钮;
检测用户通过所述调试功能按钮发起的调试操作,并基于所述调试操作生成调试命令;
将所述调试命令发送至所述服务器。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
接收所述服务器基于所述调试命令返回的回传命令;
基于所述回传命令执行对应的操作。
3.根据权利要求1或2所述的方法,其特征在于,在所述展示调试界面之前,还包括:
监听Xcode的通知消息;
从所述通知消息中查找所需的目标方法名称;
将所述目标方法名称的原有方法实现替换为预设的目标方法实现。
4.根据权利要求3所述的方法,其特征在于,在所述展示调试界面之前,还包括:
建立与服务器之间的socket连接。
5.根据权利要求1或2或4所述的方法,其特征在于,所述调试功能按钮包括如下的至少一种或组合:增加行断点、移除行断点、增加函数断点、移除函数断点、单步执行、单行执行、继续执行、批量增加断点、移除所有断点。
6.一种对Lua脚本进行调试的方法,其特征在于,所述方法应用于调试器中,所述调试器以插件的形式集成在Xcode开发环境中,所述调试器包括客户端以及服务器,所述客户端与所述服务器通过预先定义的通信协议进行通信,当应用在所述服务器时,所述方法包括:
当进入调试模式时,若匹配到断点信息,则中断当前Lua脚本程序的执行;
接收客户端发送的调试命令,其中,所述调试命令为所述客户端展示调试界面后,检测到用户通过所述调试界面发起的调试操作时生成的命令;
执行与所述调试命令对应的动作。
7.根据权利要求6所述的方法,其特征在于,在所述执行与所述调试命令对应的动作之后,还包括:
生成回传命令;
将所述回传命令发送至所述客户端。
8.根据权利要求6或7所述的方法,其特征在于,所述当进入调试模式时,若匹配到断点信息,则中断当前Lua脚本程序的执行之前,还包括:
注册Lua调试钩子函数Lua debug hook;
将所述Lua debug hook绑定指定回调事件;
在Lua脚本程序的执行过程中,当执行到所述指定回调事件时,则调用所述Lua debughook,进入调试模式。
9.一种对Lua脚本进行调试的客户端,其特征在于,所述客户端所属的调试器以插件的形式集成在Xcode开发环境中,所述客户端与服务器通过预先定义的通信协议进行通信,所述客户端包括:
调试界面展示模块,用于展示调试界面,其中,所述调试界面包括多个调试功能按钮;
调试命令生成模块,用于检测用户通过所述调试功能按钮发起的调试操作,并基于所述调试操作生成调试命令;
调试命令发送模块,用于将所述调试命令发送至所述服务器。
10.根据权利要求9所述的客户端,其特征在于,所述客户端还包括:
回传命令接收模块,用于接收所述服务器基于所述调试命令返回的回传命令;
回传命令执行模块,用于基于所述回传命令执行对应的操作。
11.根据权利要求9或10所述的客户端,其特征在于,还包括:
通知监听模块,用于监听Xcode的通知消息;
实现替换模块,用于从所述通知消息中查找所需的目标方法名称,并将所述目标方法名称的原有方法实现替换为预设的目标方法实现。
12.根据权利要求11所述的客户端,其特征在于,还包括:
连接建立模块,用于建立与服务器之间的socket连接。
13.根据权利要求9或10或11所述的客户端,其特征在于,所述调试功能按钮包括如下的至少一种或组合:增加行断点、移除行断点、增加函数断点、移除函数断点、单步执行、单行执行、继续执行、批量增加断点、移除所有断点。
14.一种对Lua脚本进行调试的服务器,其特征在于,所述服务器所属的调试器以插件的形式集成在Xcode开发环境中,所述服务器与客户端通过预先定义的通信协议进行通信,所述服务器包括:
中断模块,用于当进入调试模式时,若匹配到断点信息,则中断当前Lua脚本程序的执行;
调试命令接收模块,用于接收客户端发送的调试命令,其中,所述调试命令为所述客户端展示调试界面后,检测到用户通过所述调试界面发起的调试操作时生成的命令;
调试命令执行模块,用于执行与所述调试命令对应的动作。
15.根据权利要求14所述的服务器,其特征在于,还包括:
回传命令生成模块,用于生成回传命令;
回传命令发送模块,用于将所述回传命令发送至所述客户端。
16.根据权利要求14或15所述的服务器,其特征在于,还包括:
钩子注册模块,用于注册Lua调试钩子函数Lua debug hook;
事件绑定模块,用于将所述Lua debug hook绑定指定回调事件;
调试模块进入模块,用于在Lua脚本程序的执行过程中,当执行到所述指定回调事件时,则调用所述Lua debug hook,进入调试模式。
17.一种调试器,其特征在于,所述调试器以插件的形式集成在Xcode开发环境中,所述调试器包括客户端以及服务器,所述客户端与所述服务器通过预先定义的通信协议进行通信,其中,
所述客户端用于:
展示调试界面,其中,所述调试界面包括多个调试功能按钮;
检测用户通过所述调试功能按钮发起的调试操作,并基于所述调试操作生成调试命令;
将所述调试命令发送至所述服务器;
所述服务器用于:
当进入调试模式时,若匹配到断点信息,则中断当前Lua脚本程序的执行;
接收客户端发送的调试命令,其中,所述调试命令为所述客户端展示调试界面后,检测到用户通过所述调试界面发起的调试操作时生成的命令;
执行与所述调试命令对应的动作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810225755.XA CN108628739A (zh) | 2018-03-19 | 2018-03-19 | 一种对Lua脚本进行调试的方法、客户端、服务器及调试器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810225755.XA CN108628739A (zh) | 2018-03-19 | 2018-03-19 | 一种对Lua脚本进行调试的方法、客户端、服务器及调试器 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108628739A true CN108628739A (zh) | 2018-10-09 |
Family
ID=63706306
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810225755.XA Pending CN108628739A (zh) | 2018-03-19 | 2018-03-19 | 一种对Lua脚本进行调试的方法、客户端、服务器及调试器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108628739A (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109828792A (zh) * | 2018-12-29 | 2019-05-31 | 苏州中晟宏芯信息科技有限公司 | 一种服务器的控制装置及方法 |
CN111176870A (zh) * | 2019-08-01 | 2020-05-19 | 腾讯科技(深圳)有限公司 | 一种原因定位方法、装置、终端及存储介质 |
CN112612712A (zh) * | 2020-12-29 | 2021-04-06 | 厦门市美亚柏科信息股份有限公司 | 一种基于扩展脚本的软件断点调试方法、装置 |
CN113127329A (zh) * | 2019-12-31 | 2021-07-16 | 北京华为数字技术有限公司 | 脚本调试方法、装置及计算机存储介质 |
CN113342654A (zh) * | 2021-06-08 | 2021-09-03 | 广州博冠信息科技有限公司 | 脚本语言代码调试方法及装置、可读存储介质及电子设备 |
CN113821439A (zh) * | 2021-09-23 | 2021-12-21 | 成都欧珀通信科技有限公司 | 将函数注册到探测点的方法、装置、存储介质以及终端 |
CN114095464A (zh) * | 2021-11-16 | 2022-02-25 | 成都知道创宇信息技术有限公司 | 即时消息实现方法和*** |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120117041A1 (en) * | 2010-11-08 | 2012-05-10 | Verisign, Inc. | Debugging a stored procedure in a database |
CN102981957A (zh) * | 2012-11-30 | 2013-03-20 | 福建天晴数码有限公司 | 虚断点脚本调试方法 |
CN103164239A (zh) * | 2012-12-11 | 2013-06-19 | 广东电网公司电力科学研究院 | 基于微网可视化平台的插件实现方法 |
CN104731566A (zh) * | 2013-12-19 | 2015-06-24 | 华为软件技术有限公司 | 集成开发环境测试装置、方法及*** |
-
2018
- 2018-03-19 CN CN201810225755.XA patent/CN108628739A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120117041A1 (en) * | 2010-11-08 | 2012-05-10 | Verisign, Inc. | Debugging a stored procedure in a database |
CN102981957A (zh) * | 2012-11-30 | 2013-03-20 | 福建天晴数码有限公司 | 虚断点脚本调试方法 |
CN103164239A (zh) * | 2012-12-11 | 2013-06-19 | 广东电网公司电力科学研究院 | 基于微网可视化平台的插件实现方法 |
CN104731566A (zh) * | 2013-12-19 | 2015-06-24 | 华为软件技术有限公司 | 集成开发环境测试装置、方法及*** |
Non-Patent Citations (7)
Title |
---|
DON HO: "Notepad++6.2.3 Release", 《HTTPS://NOTEPAD-PLUS-PLUS.ORG/DOWNLOADS/V6.2.3/》 * |
JSONNERO: "Xcode 4 插件制作入门4", 《HTTPS://BLOG.CSDN.NET/WSXZK123/ARTICLE/DETAILS/17499855》 * |
MAC玩儿法编辑部: "Notepad++ mac版", 《HTTPS://WWW.WAERFA.COM/NOTEPAD-PLUS-PLUS-FOR-MAC/》 * |
呆萌院长: "Xcode 4 插件制作入门3", 《HTTPS://BLOG.CSDN.NET/LYY_WHG/ARTICLE/DETAILS/9223733》 * |
王大王: "一个简易版本的lua debugger实现", 《HTTPS://WWW.CNBLOGS.COM/XIAOWANGBA/P/6313774.HTML》 * |
王巍: "Xcode 4 插件制作入门", 《HTTPS://ONEVCAT.COM/2013/02/XCODE-PLUGIN/》 * |
王巍: "Xcode 4 插件制作入门2", 《HTTPS://WEB.ARCHIVE.ORG/WEB/20130915000000*/HTTPS://ONEVCAT.COM/2013/02/XCODE-PLUGIN/》 * |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109828792A (zh) * | 2018-12-29 | 2019-05-31 | 苏州中晟宏芯信息科技有限公司 | 一种服务器的控制装置及方法 |
CN111176870A (zh) * | 2019-08-01 | 2020-05-19 | 腾讯科技(深圳)有限公司 | 一种原因定位方法、装置、终端及存储介质 |
CN113127329A (zh) * | 2019-12-31 | 2021-07-16 | 北京华为数字技术有限公司 | 脚本调试方法、装置及计算机存储介质 |
CN113127329B (zh) * | 2019-12-31 | 2023-06-20 | 北京华为数字技术有限公司 | 脚本调试方法、装置及计算机存储介质 |
CN112612712A (zh) * | 2020-12-29 | 2021-04-06 | 厦门市美亚柏科信息股份有限公司 | 一种基于扩展脚本的软件断点调试方法、装置 |
CN112612712B (zh) * | 2020-12-29 | 2022-08-12 | 厦门市美亚柏科信息股份有限公司 | 一种基于扩展脚本的软件断点调试方法、装置 |
CN113342654A (zh) * | 2021-06-08 | 2021-09-03 | 广州博冠信息科技有限公司 | 脚本语言代码调试方法及装置、可读存储介质及电子设备 |
CN113342654B (zh) * | 2021-06-08 | 2024-04-09 | 广州博冠信息科技有限公司 | 脚本语言代码调试方法及装置、可读存储介质及电子设备 |
CN113821439A (zh) * | 2021-09-23 | 2021-12-21 | 成都欧珀通信科技有限公司 | 将函数注册到探测点的方法、装置、存储介质以及终端 |
CN114095464A (zh) * | 2021-11-16 | 2022-02-25 | 成都知道创宇信息技术有限公司 | 即时消息实现方法和*** |
CN114095464B (zh) * | 2021-11-16 | 2023-08-08 | 成都知道创宇信息技术有限公司 | 即时消息实现方法和*** |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108628739A (zh) | 一种对Lua脚本进行调试的方法、客户端、服务器及调试器 | |
US10528454B1 (en) | Intelligent automation of computer software testing log aggregation, analysis, and error remediation | |
US8572578B2 (en) | Script debugging | |
JP3631647B2 (ja) | ソフトウェアテスト方法 | |
US20080148237A1 (en) | Debugging method and apparatus for developing telecom-class service based on model driven | |
US8756577B2 (en) | Collaborative software debugging in a distributed system with private debug sessions | |
CN111104315A (zh) | 一种测试脚本生成方法及装置、计算机可读存储介质 | |
CN201392526Y (zh) | 用于移动应用程序的机上测试*** | |
CN106201745A (zh) | 应用程序的远程调试方法、远程调试***和终端 | |
US8196107B2 (en) | Simulating stepping through interpreted code | |
CN112395184A (zh) | 一种信息获取方法、设备和计算机存储介质 | |
US20120123727A1 (en) | Self-service circuit testing systems and methods | |
CN112988588B (zh) | 客户端软件调试方法、装置、存储介质及电子设备 | |
CN105630664A (zh) | 一种反向调试方法、装置及调试器 | |
Wong et al. | Smart debugging software architectural design in SDL | |
CN114172835A (zh) | 一种蓝牙数字钥匙的自动化测试方法 | |
CN113656304A (zh) | 一种前端应用程序的测试方法、设备和存储介质 | |
KR20050034661A (ko) | 이동 통신 단말기 응용 프로그램 및 부가 서비스 기능 시험자동화 시스템 | |
CN112965896A (zh) | 基于动态字节码的测试环境故障检测方法及装置 | |
KR100717242B1 (ko) | 디버깅 정보를 제공하는 에러 관리 시스템 및 이를 이용한에러 관리 방법 | |
CN110147294A (zh) | 调试信息的获取方法、装置、终端及计算机可读存储介质 | |
CN108009084B (zh) | 一种混合移动应用的测试方法、装置及*** | |
CN113934642B (zh) | 一种基于动静态结合的软件兼容性测试方法 | |
CN110795330A (zh) | 一种Monkey压力测试的方法和装置 | |
CN106598770A (zh) | Android***中Native层异常上报处理方法及装置 |
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 |
Application publication date: 20181009 |
|
RJ01 | Rejection of invention patent application after publication |