远程调试方法和装置
技术领域
本发明涉及互联网领域,具体而言,涉及一种远程调试方法和装置。
背景技术
Gdbserver(Gdb服务器)是一个与Gdb协作提供远程调试的工具,其中,Gdb是革奴计划开源组织发布的一个UNIX下的程序调试工具。Gdbserver运行在目标机上,Gdb运行在宿主机上,用户可以在宿主机上通过Gdb对目标机上Gdbserver启动的程序进行远程调试。
然而,Gdbserver主要存在以下两方面的缺陷:
1)当用户需要通过当前的宿主机对目标机进行远程调试时,需要在该宿主机上增加特定的远程调试接口,并安装相应的Gdb程序才能对目标机上Gdbserver启动的程序进行远程调试,从而导致对于未增加特定的调试端口或者未安装Gdb程序的宿主机无法对目标机进行远程测试而造成的远程调试的过程比较复杂,调试的灵活性较低。
2)现有技术中,目标机会执行接收到的所有的调试指令,这样就可能对目标机上不允许调试的目标执行调试,或者,对目标机上的调试目标执行不允许的调试指令,从而导致对目标机的环境产生影响,使得调试过程存在一定的安全风险。
针对上述问题,尚未提出有效的解决方法。
发明内容
本发明提供了一种远程调试方法和装置,以至少解决现有技术中在通过宿主机对目标机进行远程调试时,需要在宿主机中增加额外的远程调试接口而造成的远程调试过程复杂的技术问题。
根据本发明的一个方面,提供了一种远程调试方法,包括:接收宿主机基于HTTP协议传输的调试请求,其中,上述调试请求中携带调试指令和用于指示调试目标的指示信息;响应上述调试请求来对上述指示信息指示的调试目标执行上述调试指令所指示的调试操作;将调试的结果通过上述HTTP协议返回给上述宿主机。
优选地,响应上述调试请求来对上述指示信息指示的调试目标执行上述调试指令所指示的调试操作包括:判断上述指示信息指示的调试目标是否属于被允许调试的调试目标以及上述调试指令是否属于被允许的调试指令;若上述指示信息指示的调试目标属于上述被允许调试的调试目标且上述调试指令属于被允许的调试指令,则响应上述调试请求对上述调试目标执行上述调试指令所指示的调试操作;否则,则将用于指示调试失败的信息作为上述调试的结果。
优选地,上述响应上述调试请求对上述调试目标执行上述调试指令所指示的调试操作包括:判断是否存在与上述调试目标对应的调试会话;若存在与上述调试目标对应的调试会话,则通过存在的上述调试会话对上述调试目标执行上述调试指令所指示的调试操作;若不存在与上述调试目标对应的调试会话,则建立与上述调试目标对应的调试会话,并通过建立的上述调试会话对上述调试目标执行上述调试指令所指示的调试操作。
优选地,在响应上述调试请求来对上述指示信息指示的调试目标执行上述调试指令所指示的调试操作之后,上述方法还包括:接收到上述宿主机基于HTTP协议传输的退出请求,其中,上述退出请求用于请求停止对上述调试目标进行调试;响应上述退出请求来查找与上述调试目标对应的调试会话;若查找到与上述调试目标对应的调试会话,则关闭查找到的上述调试会话。
优选地,上述方法还包括:周期性地检测上述调试会话对应的最后接收到的调试请求的接收时间到当前时间之间的时间间隔是否超出预定的阈值;若超出上述预定的阈值,则关闭上述调试会话。
优选地,上述接收宿主机基于HTTP协议传输的调试请求包括:位于目标机上的HTTP服务器接收上述宿主机基于HTTP协议传输的调试请求,并将上述调试请求转发给位于上述目标机上的调试管理器;上述响应上述调试请求来对上述指示信息指示的调试目标执行上述调试指令所指示的调试操作包括:上述调试管理器判断上述指示信息指示的调试目标是否属于被允许调试的调试目标以及上述调试指令是否属于被允许的调试指令,并在上述指示信息指示的调试目标属于上述被允许调试的调试目标且上述调试指令属于被允许的调试指令的情况下通过调试会话对上述调试目标执行上述调试指令所指示的调试操作,在上述指示信息指示的调试目标不属于上述被允许调试的调试目标或者上述调试指令不属于被允许的调试指令的情况下,将用于指示调试失败的信息作为上述调试的结果;上述将调试的结果通过上述HTTP协议返回给上述宿主机包括:上述调试管理器将上述调试的结果通过上述HTTP服务器返回给上述宿主机。
优选地,上述调试目标包括:进程和/或文件。
根据本发明的另一方面,提供了一种远程调试装置,包括:接收单元,用于接收宿主机基于HTTP协议传输的调试请求,其中,上述调试请求中携带调试指令和用于指示调试目标的指示信息;执行单元,用于响应上述调试请求来对上述指示信息指示的调试目标执行上述调试指令所指示的调试操作;返回单元,用于将调试的结果通过上述HTTP协议返回给上述宿主机。
优选地,上述执行单元包括:判断模块,用于判断上述指示信息指示的调试目标是否属于被允许调试的调试目标以及上述调试指令是否属于被允许的调试指令;执行模块,用于在判断出上述指示信息指示的调试目标属于上述被允许调试的调试目标且上述调试指令属于被允许的调试指令时,响应上述调试请求对上述调试目标执行上述调试指令所指示的调试操作;在判断出上述指示信息指示的调试目标不属于上述被允许调试的调试目标或者上述调试指令不属于被允许的调试指令时,将用于指示调试失败的信息作为上述调试的结果。
优选地,上述执行模块包括:判断子模块,用于在判断出上述指示信息指示的调试目标属于上述被允许调试的调试目标且上述调试指令属于被允许的调试指令时,判断是否存在与上述调试目标对应的调试会话;执行子模块,用于在判断出存在与上述调试目标对应的调试会话时,通过存在的上述调试会话对上述调试目标执行上述调试指令所指示的调试操作;在判断出不存在与上述调试目标对应的调试会话时,建立与上述调试目标对应的调试会话,并通过建立的上述调试会话对上述调试目标执行上述调试指令所指示的调试操作。
优选地,上述远程调试装置还包括:第一接收单元,用于在上述执行单元响应上述调试请求来对上述指示信息指示的调试目标执行上述调试指令所指示的调试操作之后,接收上述宿主机基于HTTP协议传输的退出请求,其中,上述退出请求用于请求停止对上述调试目标进行调试;查找单元,用于响应上述退出请求来查找与上述调试目标对应的调试会话;第一关闭单元,用于在上述查找单元未查找到与上述调试目标对应的调试会话的情况下,关闭查找到的上述调试会话。
优选地,上述远程调试装置还包括:检测单元,用于周期性地检测上述调试会话对应的最后接收到的调试请求的接收时间到当前时间之间的时间间隔是否超出预定的阈值;第二关闭单元,用于在上述判断单元判断出超出上述预定的阈值时,关闭上述调试会话。
在本发明中,宿主机可以通过HTTP协议将调试请求发送给目标机,以便实现对目标机的远程调试,而无需预先设定特定的调试接口也无需安装相应的程序,从而解决了现有技术中在通过宿主机对目标机进行远程调试时,需要在宿主机中增加额外的远程调试接口而造成的远程调试过程复杂的技术问题,达到了在无需增加额外的调试接口就能实现对目标机的远程调试的目的,提高了远程调试的效率和灵活性;此外,通过对接收到的调试指令和所需调试的调试目标进行判断,避免了对目标机上不允许调试的目标执行调试,或者,对目标机上的调试目标执行不允许的调试指令,从而保证了调试的安全性。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的远程调试系统的一种优选结构框图;
图2是根据本发明实施例的远程调试系统架构的示意图;
图3是根据本发明实施例的远程调试装置的一种优选结构框图;
图4是根据本发明实施例的远程调试装置的另一种优选结构框图;
图5是根据本发明实施例的远程调试方法的一种优选流程图;
图6是根据本发明实施例的远程调试方法的另一种优选流程图;
图7是根据本发明实施例的远程调试方法的又一种优选流程图;
图8是根据本发明实施例的远程调试方法的又一种优选流程图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
在描述本发明的各实施例的进一步细节之前,将参考图1来描述可用于实现本发明的原理的一个合适的计算体系结构。在以下描述中,除非另外指明,否则将参考由一个或多个计算机执行的动作和操作的符号表示来描述本发明的各实施例。由此,可以理解,有时被称为计算机执行的这类动作和操作包括计算机的处理单元对以结构化形式表示数据的电信号的操纵。这一操纵转换了数据或在计算机的存储器系统中的位置上维护它,这以本领域的技术人员都理解的方式重配置或改变了计算机的操作。维护数据的数据结构是具有数据的格式所定义的特定属性的存储器的物理位置。然而,尽管在上述上下文中描述本发明,但它并不意味着限制性的,如本领域的技术人员所理解的,后文所描述的动作和操作的各方面也可用硬件来实现。
转向附图,其中相同的参考标号指代相同的元素,本发明的原理被示为在一个合适的计算环境中实现。以下描述基于所述的本发明的实施例,并且不应认为是关于此处未明确描述的替换实施例而限制本发明。
图1示出了可用于这些设备的一个示例计算机体系结构的示意图。出于描述的目的,所绘的体系结构仅为合适环境的一个示例,并非对本发明的使用范围或功能提出任何局限。也不应将该计算系统解释为对图1所示的任一组件或其组合具有任何依赖或需求。
本发明的原理可以使用其它通用或专用计算或通信环境或配置来操作。适用于本发明的众所周知的计算系统、环境和配置的示例包括但不限于,个人计算机、服务器,多处理器系统、基于微处理的系统、小型机、大型计算机、以及包括任一上述系统或设备的分布式计算环境。
在其最基本的配置中,图1中的远程调试系统100至少包括:宿主机102和通过网络连接的目标机104,其中,宿主机102用于将调试请求发送给目标机104,目标机104用于根据接收到的调试请求对响应的调试目标进行调试。宿主机102和目标机104可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置、用于存储数据的存储装置以及与另一方进行通信的传输装置。在本说明书和权利要求书中,“系统”也可以被定义为能够执行软件、固件或微码来实现功能的任何硬件组件或硬件组件的组合,远程调试系统100甚至可以是分布式的,以实现分布式功能。
如本发明所使用的,术语“模块”、“组件”或“单元”可以指在远程调试系统100上执行的软件对象或例程。此处所描述的不同组件、模块、单元、引擎和服务可被实现为在远程调试系统100上执行(例如,作为单独的线程)的对象或进程。尽管此处所描述的系统和方法较佳地以软件来实现,但是硬件或软件和硬件的组合的实现也是可能并被构想的。
实施例1
在本优选实施例中,提供了一种远程调试系统架构,位于上述的目标机104中,如图2所示,该位于目标机中的远程调试系统包括:HTTP服务器(HTTP Server)202和调试管理器(Debug Manager)204。下面对这两个网元的作用进行详细描述。
HTTP Server主要负责接收用户的Web请求,同时将该请求转发给Debug Manager进行处理,并把处理结果通过HTTP协议返回给用户。优选的,HTTP Server采用HTTP协议与宿主机102进行通信,从而使得用户可以直接通过宿主机102上的浏览器对目标机104进行调试。
Debug Manager主要负责管理用户的权限认证、Gdb指令检查,Gdb指令和执行结果的转发,以及对会话(Session)的生命周期进行调试(即,判断是否关闭该调试会话)。其中,权限认证和Gdb指令检查是用来保证调试的安全性,例如:每个用户只能对目标机104上特定的文件或者进程进行调试,优选的,允许在目标机104上执行的调试指令也被限制在一定范围内,例如:像“shell”等不可预估并且可能产生较大的影响的Gdb指令将被禁止。
本优选实施例还提供了一种远程调试装置,该远程调试装置位于被调试的目标机104上。如图3所示,本实施例的远程调试装置主要包括:接收单元302、执行单元304以及返回单元306。下面对这几个结构的功能进行具体描述。
1)接收单元302,用于接收宿主机基于超文本传输协议(Hypertext TransferProtocol,简称为HTTP)传输的调试请求,其中,调试请求中携带调试指令和用于指示调试目标的指示信息;优选的,上述调试目标可以为:目标机中的进程和/或文件;用于指示调试目标的指示信息可以为该进程和/或文件的名称或地址。该接收单元的功能主要通过图2中的HTTP Server实现。
2)执行单元304,与接收单元302耦合,用于响应调试请求来对指示信息指示的调试目标执行调试指令所指示的调试操作;该执行单元的功能主要通过图2中的DebugManager实现。
3)返回单元306,与执行单元304耦合,用于将调试的结果通过HTTP协议返回给宿主机。该返回单元的功能可以通过图2中的HTTP Server实现,也可以通过图2中的DebugManager实现,在此不做限定。
在上述优选实施方式中,宿主机可以通过HTTP协议将调试请求发送给目标机,以便实现对目标机的远程调试,而无需预先设定特定的调试接口也无需安装相应的程序,从而解决了现有技术中在通过宿主机对目标机进行远程调试时,需要在宿主机中增加额外的远程调试接口而造成的远程调试过程复杂的技术问题,达到了在无需增加额外的调试接口就能实现对目标机的远程调试的目的,提高了远程调试的效率和灵活性。
为了保证调试的安全性,可以限定每个用户只能对特定的文件或者进程进行调试。为了实现上述目的,可以预先设定允许被调试的调试目标的集合,只有请求调试的调试目标在该集合内,才会触发相应的调试操作,其中,调试目标可以是目标机上的文件或者是进程等。优选的,不仅可以对调试的目标进行限定,也可以对调试的指令进行限定,例如,对于像“shell”等不可预估并且可能产生较大的影响的Gdb指令是被禁止的指令,即,如果在调试请求中携带的调试指令是被禁止的指令,则返回调试失败,从而有效避免了相关技术中在调试过程中有一些调试指令可能会对目标机的环境产生影响而造成的调试出现故障的问题。
在一个优选实施方式中,如图4所示,上述执行单元304包括:判断模块402,用于判断所述指示信息指示的调试目标是否属于被允许调试的调试目标以及所述调试指令是否属于被允许的调试指令;执行模块404,用于在判断出所述指示信息指示的调试目标属于所述被允许调试的调试目标且所述调试指令属于被允许的调试指令时,响应所述调试请求对所述调试目标执行所述调试指令所指示的调试操作;在判断出所述指示信息指示的调试目标不属于所述被允许调试的调试目标或者所述调试指令不属于被允许的调试指令时,将用于指示调试失败的信息作为所述调试的结果。即,如果调试目标在允许调试的目标集合中且调试指令是被允许的指令,则进行调试,否则返回调试失败的指示信息,以表明该次调试请求未被执行。
在对一个调试目标进行调试的时候需要为该调试目标建立调试会话(DebugSession,如图2所示),优选的,该调试会话可以是为调试该调试目标所分配的资源或者是分配的线程。例如,如图2所示,当需要调试的调试目标为二进制文件时,为该二进制文件建立Debug Session1(调试会话1),当需要调试的调试目标为进程(Process)时,为该进程建立Debug Session 2(调试会话2),当需要调试的调试目标为内核文件(Core File)时,为该内核文件建立Debug Session 3(调试会话3)。在一个优选实施方式中,宿主机可能多次对同一个调试目标进行调试,如果每次调试完成后就立即释放为该调试目标分配的资源或者线程,然后在下一次对其进行调试时又需要重新为其分配资源或者线程,这样容易造成资源的浪费,同时还会延长调试的时间。因此,在响应于接收到的调试请求为某个调试目标分配资源或者线程之后,可以对该部分的资源或者线程保留一段时间,这样在下一次对同一个调试目标进行调试时,直接利用先前的资源和线程即可。
在一个优选实施方式中,上述执行模块404包括:判断子模块,用于在判断出所述指示信息指示的调试目标属于所述被允许调试的调试目标且所述调试指令属于被允许的调试指令时,判断是否存在与所述调试目标对应的调试会话;执行子模块,用于在判断出存在与所述调试目标对应的调试会话时,通过存在的所述调试会话对所述调试目标执行所述调试指令所指示的调试操作;在判断出不存在与所述调试目标对应的调试会话时,建立与所述调试目标对应的调试会话,并通过建立的所述调试会话对所述调试目标执行所述调试指令所指示的调试操作。例如,由图2可知,与二进制文件对应的调试会话是Debug Session1,当接收到的调试请求的调试目标是二进制文件时,判断当前是否存在Debug Session 1,如果存在,则直接利用存在的Debug Session 1对二进制文件进行调试;如果不存在,则建立Debug Session 1,通过建立的这个Debug Session 1对二进制文件进行调试。
当然如果一直不释放为某个调试目标分配的调试会话也是不合理的,这样资源得不到有效的利用,因此,可以设定一个时间阈值,如果在该时间阈值内一直未接收到下一次对该调试目标进行调试的调试请求或者是通过HTTP协议接收到退出对该调试目标的调试的请求,则关闭与该调试目标对应的调试会话,从而实现资源的有效利用。在一个优选实施方式中,上述的远程调试装置还包括释放单元,用于在响应调试请求来对指示信息指示的调试目标执行调试指令所指示的调试操作之后,按照以下方式之一关闭调试会话:
1)当接收到宿主机基于HTTP协议传输的退出请求时,其中,退出请求用于请求停止对调试目标进行调试;响应于该退出请求来查找与调试目标对应的调试会话;若查找到与调试目标对应的调试会话,则关闭查找到的调试会话。
2)周期性地检测调试会话对应的最后接收到的调试请求的接收时间到当前时间之间的时间间隔是否超出预定的阈值;若超出预定的阈值,则关闭调试会话。优选地,上述的当前时间可以是目标机的系统时间,即,判断最近一次接收到对应于该调试会话的调试请求到当前的时间是否达到一个预定阈值,如果到了,就表明在这段时间内一直不需要用到该调试会话,这种情况下就可以关闭该调试会话,以释放相应的资源。
仍以图2中的二进制文件作为调试目标为例进行说明,当接收到用于指示退出对该二进制文件的调试的退出请求,或者,在预定时间长度内一直未接收到再次对该二进制文件进行调试的调试请求时,查找目标机中是否有为对二进制文件进行调试而建立的Debug Session 1,如果有,则关闭查找到的Debug Session 1。通过上述方式可以将释放的资源分配给其它调试目标使用,从而实现资源的合理分配。
实施例2
在图1-图4所示的远程调试系统和装置的基础上,本发明提供了一种优选的远程调试方法。如图5所示,该方法可以包括如下步骤:
步骤S502:接收宿主机基于HTTP协议传输的调试请求,其中,调试请求中携带调试指令和用于指示调试目标的指示信息;上述调试目标可以为:目标机中的进程和/或文件;用于指示调试目标的指示信息可以为该进程和/或文件的名称或地址。
步骤S504:响应调试请求来对指示信息指示的调试目标执行调试指令所指示的调试操作;
步骤S506:将调试的结果通过HTTP协议返回给宿主机。
在上述优选实施方式中,宿主机可以通过HTTP协议将调试请求发送给目标机,以便实现对目标机的远程调试,而无需预先设定特定的调试接口也无需安装相应的程序,从而解决了现有技术中在通过宿主机对目标机进行远程调试时,需要在宿主机中增加额外的远程调试接口而造成的远程调试过程复杂的技术问题,达到了在无需增加额外的调试接口就能实现对目标机的远程调试的目的,提高了远程调试的效率和灵活性。
为了保证调试的安全性,可以限定每个用户只能对特定的文件或者进程进行调试。为了实现上述目的,可以预先设定允许被调试的调试目标的集合,只有请求调试的调试目标在该集合内,才会触发相应的调试操作,其中,调试目标可以是目标机上的文件或者是进程等。优选的,不仅可以对调试的目标进行限定,也可以对调试的指令进行限定,例如,对于像“shell”等不可预估并且可能产生较大的影响的Gdb指令是被禁止的指令,即,如果在调试请求中携带的调试指令是被禁止的指令,则返回调试失败,从而有效避免了相关技术中在调试过程中有一些调试指令可能会对目标机的环境产生影响而造成的调试出现故障的问题。
在一个优选实施方式中,响应调试请求来对指示信息指示的调试目标执行调试指令所指示的调试操作包括:判断所述指示信息指示的调试目标是否属于被允许调试的调试目标以及所述调试指令是否属于被允许的调试指令;若所述指示信息指示的调试目标属于所述被允许调试的调试目标且所述调试指令属于被允许的调试指令,则响应所述调试请求对所述调试目标执行所述调试指令所指示的调试操作;否则,则将用于指示调试失败的信息作为所述调试的结果。即,如果调试目标在允许调试的调试目标的集合中且调试指令是被允许的调试指令,则对该调试目标进行调试,否则返回调试失败的指示信息,以表明该次调试请求未被执行。
在对一个调试目标进行调试的时候需要为该调试目标设置调试会话,如图2所示,优选的,该调试会话可以是为调试该调试目标所分配的资源或者是分配的线程。在一个优选实施方式中,宿主机可能多次对同一个调试目标进行调试,如果每次调试完成后就立即释放为该调试目标分配的资源或者线程,然后在下一次对其进行调试时又需要重新为其分配资源或者线程,这样容易造成资源的浪费,同时还会延长调试的时间。因此,在响应于接收到的调试请求为某个调试目标分配资源或者线程之后,可以对该部分的资源或者线程保留一段时间,这样在下一次对同一个调试目标进行调试时,直接利用先前的资源和线程即可。
在一个优选实施方式中,响应调试请求对调试目标执行调试指令所指示的调试操作包括:判断是否存在与调试目标对应的调试会话;若存在与调试目标对应的调试会话,则通过存在的调试会话对调试目标执行调试指令所指示的调试操作;若不存在与调试目标对应的调试会话,则建立与调试目标对应的调试会话,并通过建立的调试会话对调试目标执行调试指令所指示的调试操作。例如,由图2可知,与二进制文件对应的调试会话是DebugSession 1,当接收到的调试请求的调试目标是二进制文件时,判断当前是否存在DebugSession 1,如果存在,则利用该存在的Debug Session 1对二进制文件进行调试;如果不存在,则建立Debug Session 1,通过建立的这个Debug Session 1对二进制文件进行调试。
当然如果一直不释放为某个调试目标分配的调试会话也是不合理的,这样资源得不到有效的利用,因此,可以设定一个时间阈值,如果在该时间阈值内一直未接收到下一次对该调试目标进行调试的调试请求或者是通过HTTP协议接收到退出对该调试目标的调试的请求,则关闭与该调试目标对应的调试会话,从而实现资源的有效利用。在一个优选实施方式中,在响应调试请求来对指示信息指示的调试目标执行调试指令所指示的调试操作之后,提供以下两种关闭调试会话的方式:
1)如图6所示,关闭调试会话包括以下步骤:
步骤S602:接收到宿主机基于HTTP协议传输的退出请求,其中,退出请求用于请求停止对调试目标进行调试;
步骤S604:响应退出请求来查找与调试目标对应的调试会话;
步骤S606:若查找到与调试目标对应的调试会话,则关闭查找到的调试会话。
2)如图7所示,关闭调试会话包括以下步骤::
步骤S702:周期性地检测所述调试会话对应的最后接收到的调试请求的接收时间到当前时间之间的时间间隔是否超出预定的阈值;
优选地,上述的当前时间可以是目标机的系统时间,即,判断最近一次接收到对应于该调试会话的调试请求到当前的时间是否达到一个预定阈值,如果到了,就表明在这段时间内一直不需要用到该调试会话,这种情况下就可以关闭该调试会话,以释放相应的资源。进一步的,对于上述周期性地检测可以发生在执行单元响应上述调试请求来对上述指示信息指示的调试目标执行上述调试指令所指示的调试操作之后,也可以在其它时间点出发,本发明对此不做限定。
步骤S704:若超出所述预定的阈值,则关闭调试会话。
仍以图2中的二进制文件作为调试目标为例进行说明,当接收到用于指示退出对该二进制文件的调试的退出请求,或者,在预定时间长度内一直未接收到再次对该二进制文件进行调试的调试请求时,查找目标机中是否有为对二进制文件进行调试而建立的Debug Session 1,如果有,则关闭查找到的Debug Session 1。通过上述方式可以将释放的资源分配给其它调试目标使用,从而实现资源的合理分配。
可以在目标机上设置一个HTTP服务器和调试管理器,由该HTTP服务器接收并转发HTTP调试请求,由该调试管理器实现是否满足调试条件的判断,例如通过该调试管理器判断请求调试的调试目标是否是被允许的调试目标,以及对调试结果的返回。如图8所示,通过上述的HTTP服务器和调试管理器进行远程调试的方法包括以下步骤:
步骤S802:HTTP服务器接收宿主机基于HTTP协议传输的调试请求,并将调试请求转发给调试管理器;
步骤S804:调试管理器判断指示信息指示的调试目标是否属于被允许调试的调试目标以及调试指令是否属于被允许的调试指令,并在指示信息指示的调试目标属于被允许调试的调试目标且调试指令属于被允许的调试指令的情况下通过调试会话对调试目标执行调试指令所指示的调试操作,在指示信息指示的调试目标不属于被允许调试的调试目标或者调试指令不属于被允许的调试指令的情况下,将用于指示调试失败的信息作为调试的结果;
步骤S806:调试管理器将调试的结果通过HTTP服务器返回给宿主机。
在上述各个优选实施方式中,上述调试目标可以包括但不限于进程和/或文件。
优选的,在本实施例的调试过程中,每个调试会话都是单独的进程,其输入和输出都被Debug Manager接管,Debug Manager将Gdb调试指令作为输入传给调试会话,同时接收调试会话响应于该Gdb调试指令的输出结果,并将接收到的输出结果转发给HTTP Server。一个调试会话会在宿主机输入退出指令的时候结束。为了避免因异常而导致的执行调试指令长时间未被执行,如果宿主机在预定时间内没有再次对目标机上的调试目标进行调试,也将被认为是会话结束,这种情况下可以由Debug Manager主动结束该调试会话,优选的,上述的预定时间可以根据系统需要或者调试的需要进行灵活设置。
值得注意是上述实施例只是以Gdb作为调试器进行说明,其它命令行调试器也可以实现这种远程调试,例如:TotalView,ALD,Dude以及kdb等命令行调试器都可以,本发明在此不做限定。
通过上述优选实施方式,可以在很大程度上对用户进行代码调试提供方便,用户直接在Web页面上就可以进行代码调试,进一步的,通过权限认证和指令限制保证了机器的安全性,也不会因为代码调试导致机器运行异常,从而影响其它程序的执行。
通过以上的描述可知,本发明具有以下优势:宿主机可以通过HTTP协议发送调试请求,同时目标机可以识别该调试请求并根据该调试请求携带的信息进行相应的调试操作,并向发送调试请求的宿主机返回调试结果,通过上述方式解决了现有技术中在通过宿主机对目标机进行远程调试时,需要在宿主机中增加额外的远程调试接口而造成的远程调试过程复杂的技术问题,达到了在无需增加额外的调试接口就能实现对目标机的远程调试的目的,提高了远程调试的效率和灵活性。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。