发明内容
有鉴于此,本发明的目的在于提供一种GDB代理调试方法,该方法不需要在接口板上外接网线就能够实现对接口板上的程序的调试。
为实现上述目的,本发明提供的技术方案为:
一种GDB代理调试方法,应用于在各接口板中部署了GDB Server的目标设备;包括:
在目标设备的主控板上的外接端口接收来自GDB client的GDB报文;
根据GDB报文中携带的调试目标信息确定GDB报文对应的调试目标;
如果GDB报文对应的调试目标是一接口板,则将GDB报文通过板间通信接口发送到该接口板,以使该接口板将GDB报文中携带的调试目标信息清除后发送到部署在该接口板上的GDB server,并将该GDB server返回的GDB响应报文添加上GDB报文中携带的调试目标信息后通过板间通信接口发送回主控板;
接收该接口板发送回的GDB响应报文,将该GDB响应报文通过所述外接端口返回给GDB client。
另一种GDB代理调试方法,应用于在各接口板中部署了GDB Server的目标设备;包括:
接口板接收目标设备的主控板通过板间通信接口发送的携带调试目标信息的GDB报文;
将GDB报文中携带的调试目标信息清除后发送到部署在该接口板上的GDBserver;
接收该GDB server返回的GDB响应报文,将GDB响应报文添加上GDB报文中携带的调试目标信息后通过板间通信接口发送回主控板。
一种GDB代理调试装置,应用于在各接口板中部署了GDB Server的目标设备;该装置部署在目标设备的主控板上,包括:第一收发单元、第一控制单元;
所述第一收发单元,用于在目标设备的主控板上的外接端口接收来自GDBclient的GDB报文,如果第一控制单元确定该GDB报文对应的调试目标是一接口板,则将该GDB报文通过板间通信接口发送到该接口板,以使该接口板将该GDB报文中携带的调试目标信息清除后发送到部署在该接口板上的GDB server,并将该GDB server返回的GDB响应报文添加上该GDB报文中携带的调试目标信息后通过板间通信接口发送回主控板;用于接收该接口板发送回的GDB响应报文,将该GDB响应报文通过所述外接端口返回给GDB client;
所述第一控制单元,用于第一收发单元在目标设备的主控板上的外接端口接收到GDB报文后,根据该GDB报文中携带的调试目标信息确定该GDB报文对应的调试目标。
另一种GDB代理调试装置,应用于在各接口板中部署了GDB Server的目标设备;该装置部署在目标设备的接口板上,包括:第二收发单元、第二控制单元;
所述第二收发单元,用于接收目标设备的主控板通过板间通信接口发送的携带调试目标信息的GDB报文,在第二控制单元将该GDB报文中携带的调试目标信息清除后,将该GDB报文发送到部署在本接口板上的GDB Server;用于接收该GDB Server返回的GDB响应报文,在第二控制单元将该GDB响应报文添加上GDB报文中携带的调试目标信息后,将该GDB响应报文通过板间通信接口发送回主控板;
所述第二控制单元,用于第二收发单元接收到目标设备的主控板通过板间通信接口发送的GDB报文后,清除该GDB报文中携带的调试目标信息;用于第二收发单元接收到部署在本接口板上的GDB server返回的GDB响应报文后,将该GDB响应报文添加上GDB报文中携带的调试目标信息。
综上所述,本发明中,目标设备的主控板在外部端口接收GDB Client发送的GDB报文,根据GDB报文中携带的测试目标信息确定GDB报文对应的测试目标,当测试目标是接口板时,将GDB报文通过板间通信接口发送到该接口板,最终达到该接口板上的GDB Server。本发明只利用目标设备的主控板上的外接端口就可以实现对接口板上的程序的调试,不需要在接口板上外接网线。
实施例一
目标设备的主控板上用于接收GDB报文和发送GDB响应报文的外接端口为辅助串口。
参见图3,图3是本发明实施例一GDB代理调试流程示意图,包括以下步骤:
步骤301、GDB client向目标设备发送GDB报文,其中GDB报文中携带调试目标信息。
本实施例中,调试者在GDB client端输入Target remote COM12SSPP COM1命令触发GDB代理调试过程,GDB client根据该命令生成GDB报文发送到目标设备,其中,2SSPP在GDB报文中作为前缀,SS表示调试目标板信息(如果调试目标是主控板,则该调试目标板信息用主控板对应的标识信息表示,如果调试目标是一接口板,则该调试目标板信息用该接口板对应的标识信息表示,例如该接口板的槽位号),PP表示目标CPU信息(用目标CPU编号表示,PP为0表示GDB报文的调试目标,例如目标接口板中仅包含一个CPU,GDB报文的目标CPU为该CPU)。
步骤302、目标设备的主控板在自身的辅助串口接收来自GDB client的GDB报文。
步骤303、根据GDB报文中携带的调试目标信息判断GDB报文的调试目标,如果调试目标为主控板,则转至步骤304执行,如果调试目标为一接口板,则转至步骤307执行。
这里,当GDB报文携带的调试目标信息中包括一接口板对应的标识信息时,确定GDB报文对应的调试目标为该标识信息对应的接口板,当GDB报文携带的调试目标信息中包括主控板对应的标识信息,则确定GDB报文对应的调试目标为主控板。
步骤304、GDB报文的调试目标为主控板,主控板清除GDB报文中携带的测试目标信息,将修改后的GDB报文发送到部署在主控板上的GDB Server。
本实施例中,通过为GDB报文增加的前缀,在前缀中携带调试目标信息,因此,清除GDB报文中携带的测试目标信息的方法为:删除GDB报文中的前缀2SSPP。
步骤305、部署在主控板上的GDB Server根据GDB报文执行程序调试,返回GDB响应报文到主控板。
步骤306、主控板将GDB报文中携带的调试目标信息添加到GDB响应报文,将修改后的GDB响应报文通过主控板上的辅助串口返回给GDB Client。
调试主控板的情况下,本步骤之后,一次GDB报文交互过程完成。
步骤307、GDB报文的调试目标为一接口板,主控板将GDB报文通过板间通信接口发送到目标接口板。
步骤308、目标接口板在板间通信接口接收GDB报文,根据GDB报文中携带的调试目标信息确定GDB报文的目标CPU,并清除GDB报文中携带的测试目标信息,将修改后的GDB报文送至目标CPU的GDB server。
目标接口板在板间通信接口接收到的报文也可以是其他类型的板间通信报文,因此,在接收到板间通信报文时,需要先判断板间通信报文是否是GDB报文,是则继续执行后续将GDB报文送至部署在目标接口板的GDB Server的步骤,否则,需按照现有方法处理板间通信报文。
当目标接口板上只包含一个CPU时,GDB Client可以将GDB报文携带的调试目标信息中的目标CPU信息设置为0,这样,当目标接口板检测确定GDB报文携带的调试目标信息中的目标CPU为0时,就可以确定GDB报文的目标CPU是该接口板上包含的唯一CPU,将GDB报文发送到该唯一CPU的GDB Server。
当目标接口板上包含多个CPU时,GDB Client可以将GDB报文携带的调试目标信息中的目标CPU信息设置为目标CPU的编号,这样,当目标接口板检测确定GDB报文携带的调试目标信息中的目标CPU信息为某一CPU编号时,就可以确定GDB报文的目标CPU是该CPU编号代表的CPU,将GDB报文发送到该CPU的GDB Server。
本实施例中,通过为GDB报文增加的前缀,在前缀中携带调试目标信息,因此,清除GDB报文中携带的测试目标信息的方法为:删除GDB报文中的前缀2SSPP。
步骤309、目标CPU的GDB server根据GDB报文执行程序调试,返回GDB响应报文至目标接口板。
步骤310、目标接口板将GDB报文中携带的调试目标信息添加到GDB响应报文中,然后将GDB响应报文通过板间通信接口发送到主控板。
步骤311、主控板将GDB响应报文通过主控板上的辅助串口返回给GDBClient。
本实施例中,主GDB代理将GDB报文中携带的调试目标信息添加到GDB响应报文中的方法为:将GDB报文的前缀添加到GDB响应报文中作为GDB响应报文的前缀。
至此,利用目标设备中主控板的辅助串口完成对目标接口板的一次GDB代理调试。
在图3所示本发明实施例中,目标设备的接口板还可以从该接口板的调试网口接收来自GDB Client的GDB报文。对于从接口板的调试网口接收到的GDB报文和从主控板的辅助串口进入并经由主控板通过板间通信接口转发来的GDB报文,可以通过设置不同的工作模式(包括代理模式和普通模式)来加以区分,接口板接收到GDB报文时,如果确定该GDB报文是从板间通信接口接收到的,则可以设置当前工作模式为代理模式,这样,当接口板将该GDB报文发送到部署在该接口板上的GDB server并接收到该GDB server返回的GDB响应报文之后,可以根据当前工作模式将GDB响应报文发送到主GDB代理;如果确定该GDB报文是从该接口板的调试网口接收到的GDB报文,则可以设置当前工作模式为普通模式,这样,当从GDB代理将该GDB报文发送到部署在该接口板上的GDB server并接收到该GDB server返回的GDB响应报文之后,可以根据当前工作模式将GDB响应报文通过该接口板的调试网口发送到GDB Client。
从接口板的调试网口接收到的GDB报文不携带2SSPP前缀,而经由主控板通过板间通信接口转发来的GDB报文携带2SSPP前缀,可以通过是否携带前缀对这两种GDB报文进行区分。
实施例二
目标设备的主控板上用于接收GDB报文的外接端口为调试网口。
参见图4,图4是本发明实施例二GDB代理调试流程示意图,包括以下步骤:
步骤401、GDB client向目标设备发送GDB报文,其中GDB报文中携带调试目标信息。
本实施例中,调试者在GDB client端通过输入“Gdb.exe udp:目的IP地址:目的端口号”命令触发GDB代理调试过程,GDB client根据该命令生成GDB报文发送到目标设备,其中,GDB报文的目的IP地址、目的MAC地址分别为目标设备中主控板的调试网口的IP地址(也即上述命令中的目的IP地址)和MAC地址,GDB报文的目的端口号为1SSPP,其中,SS表示调试目标板信息(如果调试目标是主控板,则该调试目标板信息用主控板对应的标识信息表示,如果调试目标是一接口板,则该调试目标板信息用该接口板对应的标识信息表示,例如该接口板的槽位号),PP表示目标CPU信息(用目标CPU编号表示,PP为0表示GDB报文的调试目标,例如目标接口板中仅包含一个CPU,GDB报文的目标CPU为该CPU)。
步骤402、目标设备的主控板在自身的调试网口接收来自GDB client的GDB报文。
步骤403、主控板根据GDB报文中携带的调试目标信息判断GDB报文的调试目标,如果调试目标为主控板,则转至步骤404执行,如果调试目标为一接口板,则转至步骤407执行。
这里,当GDB报文携带的调试目标信息中包括一接口板对应的标识信息时,确定GDB报文对应的调试目标为该标识信息对应的接口板,当GDB报文携带的调试目标信息中包括主控板对应的标识信息时,则确定GDB报文对应的调试目标为主控板。
步骤404、GDB报文的调试目标为主控板,主控板清除GDB报文中携带的调试目标信息,将修改后的GDB报文发送到部署在主控板上的GDB Server。
本实施例中,由于是利用GDB报文的目的端口号字段携带调试目标信息,因此清除GDB报文中携带的调试目标信息的方法为:将GDB报文的目的端口号恢复为现有技术中通过主控板的调试网口调试主控板时GDB报文的目的端口号:10000。
步骤405、部署在主控板上的GDB Server根据GDB报文执行程序调试,返回GDB响应报文到主控板。
步骤406、主控板将GDB报文中携带的调试目标信息添加到GDB响应报文,将修改后的GDB响应报文通过主控板的调试网口返回给GDB Client。
调试主控板的情况下,本步骤之后,一次GDB报文交互过程完成。
步骤407、主控板将GDB报文通过板间通信接口发送到目标接口板。
步骤408、目标接口板在板间通信接口接收GDB报文,根据GDB报文中携带的调试目标信息确定GDB报文的目标CPU,将GDB报文的目的IP地址、目的MAC地址分别修改为目标接口板的调试网口的IP地址、目标接口板的调试网口的MAC地址,并清除GDB报文中携带的调试目标信息,将修改后的GDB报文送至目标CPU的GDB server。
目标接口板在板间通信接口接收到的报文也可以是其他类型的板间通信报文,因此,在接收到板间通信报文时,需要先判断板间通信报文是否是GDB报文,是则继续执行后续将GDB报文送至部署在目标接口板的GDB Server的步骤,否则,需按照现有方法处理板间通信报文。
当目标接口板上只包含一个CPU时,GDB Client可以将GDB报文携带的调试目标信息中的目标CPU信息设置为0,这样,当目标接口板检测确定GDB报文携带的调试目标信息中的目标CPU为0时,就可以确定GDB报文的目标CPU是该接口板上包含的唯一CPU,将GDB报文发送到该唯一CPU的GDB Server。
当目标接口板上只包含多个CPU时,GDB Client可以将GDB报文携带的调试目标信息中的目标CPU信息设置目标CPU的编号,这样,当目标接口板检测确定GDB报文携带的调试目标信息中的目标CPU信息为某一CPU编号时,就可以确定GDB报文的目标CPU是该CPU编号代表的CPU,将GDB报文发送到该CPU的GDB Server。
本实施例中,由于是利用GDB报文的目的端口号字段携带调试目标信息,因此清除GDB报文中携带的调试目标信息的方法为:将GDB报文的目的端口号恢复为现有技术中通过接口板的调试网口调试接口板时GDB报文的目的端口号:10000。
步骤409、目标CPU的GDB server根据GDB报文执行程序调试,返回GDB响应报文至目标接口板。
目标CPU的GDB server发送的GDB响应报文的源IP地址、源MAC地址、源端口号分别为目标接口板的调试网口的IP地址、目标接口板的调试网口的MAC地址、10000。
步骤410、目标接口板将GDB报文中携带的调试目标信息添加到GDB响应报文,将修改后的GDB响应报文通过板间通信接口发送到主控板。
步骤411、主控板将GDB响应报文的源IP地址、源MAC地址分别修改为主控板的调试网口的IP地址、主控板的调试网口的MAC地址,将修改后的GDB响应报文通过主控板的调试网口返回到GDB client。
本步骤中,“将GDB响应报文的源IP地址、源MAC地址分别修改后主控板的调试网口的IP地址、主控板的调试网口的MAC地址”的操作也可以放在步骤411中,由目标接口板完成并通过板间通信接口发送修改后的GDB响应报文到主控板。
本实施例中,主控板将GDB报文中携带的调试目标信息添加到GDB响应报文中的方法为:将GDB报文的目的端口号作为GDB响应报文的源端口号。
至此,利用目标设备中主控板的调试网口完成对目标接口板的一次GDB代理调试。
在图4所示本发明实施例中,目标设备的接口板还可以从该接口板的调试网口接收GDB报文。对于从接口板的调试网口接收到的GDB报文和从主控板的调试网口进入并经由主控板通过板间通信接口转发来的GDB报文,可以通过设置不同的工作模式(包括代理模式和普通模式)来加以区分,接口板接收到GDB报文时,如果确定该GDB报文是从板间通信接口接收到的,则可以设置当前工作模式为代理模式,这样,当从GDB代理将该GDB报文发送到该接口板上的GDB server并接收到GDB server返回的GDB响应报文之后,可以根据当前工作模式将GDB响应报文发送到主GDB代理;如果确定该GDB报文是从该接口板的调试网口接收到的GDB报文,则可以设置当前工作模式为普通模式,这样,当从GDB代理将该GDB报文发送到该接口板上的GDB server并接收到GDBserver返回的GDB响应报文之后,可以根据当前工作模式将GDB响应报文通过该接口板的调试网口发送到GDB Client。
图4所示本发明实施例中,接口板在自身的调试网口接收到的GDB报文,其目的IP地址、目的MAC地址、目的端口号分别为该接口板的调试网口的IP地址、该接口板的调试网口的MAC地址、10000;而经由主控板上的主GDB代理通过板间通信接口转发来的GDB报文,其目的IP地址、目的MAC地址、目的端口号分别为主控板的调试网口的IP地址、主控板的调试网口的MAC地址、1SSPP(SS值该接口板对应的标识信息,PP值为目标CPU编号)。可以通过GDB报文的目的IP地址、目的MAC地址、目的端口号字段中的一个或多个来对这两种GDB报文进行区分。
实际上,在图3及图4所示本发明实施例中,也可以利用GDB报文的其它字段携带调试目标信息,清除GDB报文中的调试目标信息以及在GDB响应报文中添加调试目标信息的具体实现方法也根据具体字段的不同而不同,不再一一赘述。
从上述图3及图4所示本发明实施例可以看出,利用主控板的外接端口接收GDB报文,并根据GDB报文中携带的调试目标信息确定GDB报文的调试目标,并将GDB报文发送到对应的调试目标,从而不需要在接口板上外接网线就可以实现对一个或多个接口板中的程序的调试。
以上对本发明实施例GDB代理调试方法进行了详细说明,本发明具体实施例中基于同样的发明构思,提出一种应用于目标设备的主控板的GDB代理调试装置和一种应用于目标设备的接口板的GDB代理调试装置,下面结合图5、图6进行详细说明。
参见图5,图5是本发明实施例应用于目标设备的主控板的GDB代理调试装置的结构示意图,目标设备的各接口板中部署有GDB Server;该装置部署在目标设备的主控板上,包括:第一收发单元501、第一控制单元502;其中,
第一收发单元501,用于在目标设备的主控板上的外接端口接收来自GDBclient的GDB报文,如果第一控制单元502确定该GDB报文对应的调试目标是一接口板,则将该GDB报文通过板间通信接口发送到该接口板,以使该接口板将该GDB报文中携带的调试目标信息清除后发送到部署在该接口板上的GDB server,并将该GDB server返回的GDB响应报文添加上该GDB报文中携带的调试目标信息后通过板间通信接口发送回主控板;用于接收该接口板发送回的GDB响应报文,将该GDB响应报文通过所述外接端口返回给GDB client;
第一控制单元502,用于第一收发单元501在目标设备的主控板上的外接端口接收到GDB报文后,根据该GDB报文中携带的调试目标信息确定该GDB报文对应的调试目标。
上述装置中,目标设备的主控板上部署有GDB Server;
所述第一控制单元502,进一步用于确定第一收发单元501接收到的GDB报文对应的调试目标是主控板时,清除该GDB报文中携带的调试目标信息;用于在第一收发单元501接收到部署在主控板上的GDB Server返回的GDB响应报文后,将GDB报文中携带的测试目标信息添加到GDB响应报文中;
所述第一收发单元501,用于在第一控制单元502清除GDB报文中携带的调试目标信息后,将该GDB报文发送到部署在主控板上的GDB Server;用于接收该GDB Server返回的GDB响应报文,并在第一控制单元502将该GDB响应报文添加上GDB报文中携带的调试目标信息后通过所述外接端口返回给GDB client。
上述装置中,所述第一控制单元502根据GDB报文中携带的调试目标信息确定GDB报文对应的调试目标时,用于:如果调试目标信息中包括一接口板对应的标识信息,则确定GDB报文对应的调试目标为该标识信息对应的接口板,如果调试目标信息中包括主控板对应的标识信息,则确定GDB报文对应的调试目标为主控板。
上述装置中,所述外接端口为主控板上的辅助串口或主控板上的调试网口;
其中,当所述外接端口为主控板上的调试网口,
所述第一收发单元501从接口板接收到的GDB响应报文的目的IP地址和目的MAC地址分别为主控板的调试网口的IP地址和MAC地址;
或者,
所述第一收发单元501从接口板接收到的GDB响应报文的目的IP地址和目的MAC地址分别为该接口板的调试网口的IP地址和MAC地址;
所述第一控制单元502,进一步用于在第一收发单元501接收到接口板发送回的GDB响应报文之后,将该GDB响应报文返回给GDB Client之前,将GDB响应报文的源IP地址、源MAC地址分别修改为主控板的调试网口的IP地址和MAC地址。
参见图6,图6是本发明实施例应用于目标设备的接口板的GDB代理调试装置的结构示意图,目标设备的各接口板中部署有GDB Server;该装置部署在目标设备的接口板上,包括:第二收发单元601、第二控制单元602;其中,
第二收发单元601,用于接收目标设备的主控板通过板间通信接口发送的携带调试目标信息的GDB报文,在第二控制单元602将该GDB报文中携带的调试目标信息清除后,将该GDB报文发送到部署在本接口板上的GDB Server;用于接收该GDBServer返回的GDB响应报文,在第二控制单元602将该GDB响应报文添加上GDB报文中携带的调试目标信息后,将该GDB响应报文通过板间通信接口发送回主控板;
第二控制单元602,用于第二收发单元601接收到目标设备的主控板通过板间通信接口发送的GDB报文后,清除该GDB报文中携带的调试目标信息;用于第二收发单元601接收到部署在本接口板上的GDB server返回的GDB响应报文后,将该GDB响应报文添加上GDB报文中携带的调试目标信息。
上述装置中,
第二控制单元602,进一步用于在第二收发单元601接收到GDB报文后,设置当前工作模式,其中,第二收发单元601在通过板间通信接口接收到GDB报文时,设置当前工作模式为代理模式;第二收发单元601在通过本接口板的调试网口收到GDB报文时,设置当前工作模式为普通模式;
第二控制单元602,进一步用于第二收发单元601将GDB报文发送到部署在本接口板的GDB server并接收到该GDB server返回的GDB响应报文后,在当前工作模式为代理模式时,将GDB响应报文添加上GDB报文中携带的调试目标信息;
第二收发单元601,用于在第二控制单元602将GDB响应报文添加上GDB报文中携带的调试目标信息后,将该GDB响应报文通过板间通信接口发送回主控板;用于将GDB报文发送到部署在本接口板的GDB server并接收到该GDB server返回的GDB响应报文后,在当前工作模式为普通模式时,将GDB响应报文通过自身的调试网口发送回GDB Client。
上述装置中,所述GDB报文是主控板在自身的辅助串口或调试网口接收到的;
在所述GDB报文是主控板在自身的调试网口接收到的情况下,
第二控制单元602在第二收发单元601接收到主控板通过板间通信接口发来的GDB报文之后,将GDB报文发送到部署在本接口板上的GDB Server之前,进一步用于:将GDB报文的目的IP地址、目的MAC地址分别修改为本接口板的调试网口的IP地址和MAC地址;
第二控制单元602在第二收发单元601接收到部署在本接口板上的GDB Server返回的GDB响应报文之后,将GDB响应报文通过板间通信接口发送回主控板之前,进一步用于:将GDB报文的目的IP地址、目的MAC地址分别修改为主控板的调试网口的IP地址和MAC地址;
或者,
第二收发单元601接收到部署在本接口板上的GDB Server返回的GDB响应报文之后,将GDB响应报文通过板间通信接口发送回主控板,以使主控板将GDB报文的目的IP地址、目的MAC地址分别修改为主控板的调试网口的IP地址和MAC地址。
上述装置中,
接口板中仅包含一个CPU;
所述第二收发单元601在将GDB报文发送到部署在本接口板上的GDB server时,用于:将GDB报文发送到本接口板仅包含的一个CPU的GDB server;
或者,
接口板中包含多个CPU;
所述调试目标信息包括目标CPU信息;
所述第二收发单元601在将GDB报文发送到部署在本接口板上的GDB server时,用于:根据GDB报文携带的调试目标信息中的目标CPU信息,将GDB报文发送到该CPU的GDB server。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。