调试方法以及调试装置与流程

文档序号:31630993发布日期:2022-09-24 01:58阅读:59来源:国知局
调试方法以及调试装置与流程

1.本公开涉及计算机技术领域,尤其涉及一种调试方法以及调试装置。


背景技术:

2.linux内核的操作系统(以下简称为“linux操作系统”)由于其具有开源性,因此得到了来自全世界软件爱好者、组织、公司的支持,大量基于linux操作系统的软件被开发和使用,使得linux操作系统成为了目前主流的操作系统之一。
3.目前,对于linux内核和驱动的调试主要是基于在linux操作系统中运行的gdb调试器或kgdb调试器进行。
4.本部分旨在为权利要求书中陈述的本公开实施例提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。


技术实现要素:

5.发明人发现,相关技术中,对linux内核和/或驱动的调试方案基本以打印日志为主,调试过程需要耗费较多的时间;另外,在调试复杂的驱动时,例如,显卡驱动、网卡驱动等,有时容易出现死机等情况。此外,kgdb调试器使用方法比较复杂,并且只能使用串行通信接口,而对于没有串行通信接口的电脑,有时需要另外使用通用串行总线接口(universal serial bus,usb)转串行通信口来实现硬件上的连接。
6.为了解决上述问题中的至少一个或其他类似的问题,本公开实施例提供一种调试方法以及调试装置。
7.根据本公开实施例的第一方面,提供一种调试方法,所述调试方法包括:第一操作系统解析来自第二操作系统的调试命令,所述第一操作系统和所述第二操作系统是不同种类的操作系统;根据解析后的调试命令,生成中间消息;基于在所述第一操作系统的内核中建立的虚拟第二操作系统的调试环境将所述中间消息转换为所述第二操作系统的内核可识别的结果消息;以及向所述第二操作系统发送所述结果消息。
8.根据本公开实施例的第二方面,提供一种调试方法,所述调试方法包括:通过在第二操作系统中运行的内核调试器向第一操作系统的内核发送调试命令,所述第一操作系统和所述第二操作系统是不同种类的操作系统;接收所述第一操作系统的内核响应所述调试命令的结果消息;以及解析所述结果消息得到所述调试命令对应的调试结果。
9.根据本公开实施例的第三方面,提供一种调试装置,所述调试装置应用于配置有第一操作系统的设备,所述调试装置包括:命令解析单元,其解析来自第二操作系统的调试命令,所述第一操作系统和所述第二操作系统是不同种类的操作系统;中间消息生成单元,其根据解析后的调试命令,生成中间消息;转换单元,其基于在所述第一操作系统的内核中建立的虚拟第二操作系统的调试环境将所述中间消息转换为所述第二操作系统的内核可识别的结果消息;以及通信单元,其向所述第二操作系统发送所述结果消息。
10.根据本公开实施例的第四方面,提供一种调试装置,所述调试装置包括:命令发送
单元,其通过在第二操作系统中运行的内核调试器向第一操作系统的内核发送调试命令,所述第一操作系统和所述第二操作系统是不同种类的操作系统;接收单元,其接收所述第一操作系统的内核响应所述调试命令的结果消息;以及消息解析单元,其解析所述结果消息得到所述调试命令对应的调试结果。
11.本公开实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述方法。
12.本公开实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述方法。
13.本公开实施例还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现上述方法。
14.本公开实施例中,通过在第一操作系统内核中建立虚拟第二操作系统环境,将第一操作系统的调试结果转换为第二操作系统的内核能够识别的数据,由此能够通过在第二操作系统中运行功能比第一操作系统中运行的调试器的功能强大的调试器,对第一操作系统的内核和/或驱动进行调试,提高调试效率。
附图说明
15.为了更清楚地说明本公开实施例或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:图1是本公开第一方面的实施例的调试方法的一个示意图。
16.图2是本公开实施例的调试方法的一个应用的示意图。
17.图3是本公开第二方面的实施例的调试装置的一个示意图。
18.图4是本公开第三方面的实施例的调试装置的一个示意图。
19.图5是本公开第四方面的实施例的调试装置的一个示意图。
具体实施方式
20.为使本公开实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本公开实施例做进一步详细说明。在此,本公开的示意性实施例及其说明用于解释本公开,但并不作为对本公开的限定。
21.第一方面的实施例本公开第一方面的实施例提供一种调试方法,该调试方法可以应用于第一操作系统,以用于调试第一操作系统的内核,也可用于调试在第一操作系统中运行的驱动。图1是本公开第一方面的实施例的调试方法的一个示意图。
22.如图1所示,方法100可以包括:步骤101:第一操作系统解析来自第二操作系统的调试命令,第一操作系统和第二操作系统可以是不同种类的操作系统;步骤103:根据解析后的调试命令,生成中间消息;步骤105:基于在所述第一操作系统的内核中建立的虚拟第二操作系统的调试环
境将所述中间消息转换为所述第二操作系统的内核可识别的结果消息;步骤107:向所述第二操作系统发送所述结果消息。
23.由此,通过在第一操作系统内核中建立虚拟第二操作系统环境,将第一操作系统的调试结果转换为第二操作系统的内核能够识别的数据,从而能够通过在第二操作系统上运行功能比在第一操作系统上运行的调试器的功能强大的调试器,例如,windbg调试器,对第一操作系统的内核和/或驱动进行调试,由于在第二操作系统上运行的调试器的调试效率更高,因此能够解决在第一操作系统中运行的调试器调试第一操作系统的内核和/或驱动时调试过程耗时较长的问题。此外,还可以减少调试过程中死机的情况发生。
24.在至少一个实施例中,第一操作系统和第二操作系统可以是不同种类的操作系统。例如,第一操作系统可以是linux操作系统,第二操作系统可以是windows操作系统。但本技术实施例对此不作限制,例如,按照用户操作界面分类,操作系统可以分为字符型操作系统和图形操作系统等,按照处理方式分类,操作系统可以分为批处理操作系统、分时操作系统、实时操作系统、网络操作系统、多媒体操作系统等。第一操作系统可以是字符型操作系统中的一种,第二操作系统可以是图形操作系统的一种,第一操作系统和第二操作系统也可以是字符型操作系统中的两种不同的操作系统,第一操作系统和第二操作系统也可以是图形操作系统中的两种不同的操作系统;第一操作系统和第二操作系统也可以是批处理操作系统、分时操作系统、实时操作系统、网络操作系统、多媒体操作系统等中的两种不同的操作系统。
25.此外,目前主流的操作系统包括unix操作系统、类unix操作系统、mac os操作系统、chrome os操作系统、windows操作系统等,第一操作系统和第二操作系统可以是这些操作系统种的两种不同的操作系统,具体可以参考相关技术,此处不再赘述。
26.为了便于理解和说明本公开的实施例,下面,以第一操作系统是linux操作系统,第二操作系统是windows操作系统为例对本公开的实施例进行说明,但本领域技术人员应明白,本公开实施例可以应用于任意两个不同种类的操作系统之间实现跨操作系统调试内核和/或驱动的方法中。
27.在至少一个实施例中,可以通过在第一操作系统中运行调试引擎实现上述各步骤的功能。即,通过开发专用的调试引擎,例如,linux fakent调试引擎,通过在linux系统中运行linux fakent调试引擎,以实现上述各步骤的功能。
28.另外,下面以在windows操作系统中运行的windbg调试器为例对通过windows平台调试linux内核和/或linux驱动进行说明,但本公开实施例不以此为限制,本公开实施例的方法还可以应用于通过在windows中运行的其他调试器对linux内核和/或linux驱动进行调试。
29.在至少一个实施例中,虚拟第二操作系统的调试环境包括第一内存映像和第一数据结构体,所述第一内存映象的布局是基于所述第二操作系统的内存映象的布局构建的,所述第一数据结构体的数据结构与所述第二操作系统的至少一部分的数据结构体的数据结构相同。此外,也可以是第一数据结构体的数据结构与第二操作系统的数据结构体的数据结构相似。
30.需要说明的是,“所述第一内存映象的布局是基于所述第二操作系统的内存映象的布局构建的”可以是“第一内存映象的布局与第二操作系统的内存映象的布局完全相
同”,也可以是“第一内存映象的布局中的一部分布局的内容或数据与第二操作系统的内存映象的一部分布局的内容或数据相同,另一部分布局的内容或数据与第二操作系统的部分布局的内容或数据对应,但可以不相同”。此外,在第一操作系统内核中虚拟出的第一数据结构体可以包含与第二操作系统的数据结构体的全部数据结构完全相同的数据结构,也可以包含与第二操作系统的数据结构体中的一部分数据结构相同的数据结构。
31.此外,“数据结构相似”可以是“数据结构完全相同”或者“数据结构完全对应”,也可以是“数据结构部分相同”或者“数据结构部分对应”。
32.本公开实施例对虚拟出的第一内存映像和第一数据结构体中的具体的数据不作限定,可以根据实际需要选择相关的数据进行设定。
33.例如,在linux平台与windows平台通信时,由于windows系统内存映像的布局与linux系统内存映像的布局不同,windows的数据结构与linux的数据结构也不同,如果不对通信的数据进行转换,那么linux平台与windows平台并不能识别对方发送的数据。
34.而通过在linux内核中建立虚拟windows内存映像,以及建立虚拟windows数据结构体,能够将linux侧待发送的数据转换为windows侧可读取或可识别的数据。
35.例如,可以在linux内核中定义一个列表,该列表表示一个虚拟的内存映像,列表中可以定义各内存地址中存储的数据类型等信息,与windows的实际内存映像的布局是相同或相似的。其中,布局相似可以理解为两者布局的部分内容或部分数据不同。
36.再例如,可以在linux内核中定义一些与windows的数据结构相同的数据结构,例如,定义windows内核调试器在调试windows内核时需要的一些数据结构,例如,windbg调试器需要的一些数据结构。例如,在linux内核中至少定义表1中的数据结构。此外,这些数据结构对应的数据可以与windows中的对应的数据结构对应的数据不同,也可以相同,本公开实施例对此不作限制。
37.例如,在linux内核中实现表1中的数据结构的虚拟,例如,在对应的数据类型中设置虚拟的数据。
38.表1
在本公开实施例中,例如,对于“+0x010 kernbase:”,可以通过建立一个fake nt模块实现;对于“+0x018 psloadedmodulelist:”,通过这条链可以遍历全部的linux内核模块的所有信息,比如路径,名称,加载基址,占有内存空间等。
39.在至少一个实施例中,在步骤101中,可以根据第一操作系统的内核与第二操作系统的内核之间的通信协议将接收到的调试命令转换为第一操作系统的内核可识别的命令。
40.例如,该通信协议例如定义第一操作系统与第二操作系统协商的发包格式。也就是说,为了适配第二操作系统的调试器,需要第一操作系统的内核引擎可以解析来自第二操作系统的调试器的发包格式。这便是第一操作系统与第二操作系统的通信协议。发包格式例如包括:typedef struct _kd_packet{ulong packetleader; //包标识ushort packettype; //包类型ushort bytecount; //包大小ulong packetid; //包idulong checksum; //包校验} kd_packet, *pkd_packet;该通信协议定义了windbg调试器发送的一个命令包中的至少一部分字段表示的含义,这个命令包的结构例如共 16 字节,包标识 packetleader 例如占据4 字节,例如标识等于 0xdbdbdbdb,表明是断点包。要快速识别是什么包,只需读第一字节即可,即,标识等于 0xdbdbdbdb,第一个字节就是 0xdb,识别出第一个字节为“0xdb”,那么就可以判断当前的包为“断点包”。
41.此外,命令包还可以是8字节、4字节等,可以根据实际需要进行设定,本技术实施例对此不作限制。
42.此外,调试命令例如以命令包的格式被发送,命令包中还可以包括其他数据,例如,包括命令、内核加载基址等数据。例如,linux调试引擎在接收到命令包后,还可以基于该通信协议提取出命令,内核加载基址等数据,linux调试引擎的写入模块可以将对应的命令写入内核加载基址对应的地址,进而执行调试过程,得到调试结果。
43.在调试完成后,linux调试引擎可以根据与windows的通信协议,将调试结果封包发送给windbg调试器,例如,linux调试引擎按照表1中的数据结构构造各字节的数据,例如,将调试结果的数据写入第5字节等。由此,windbg在接收到该数据包后,按照其自身的解析策略进行解析,即可提取调试结果。windbg调试器的显示窗口可以将提取出的调试结果显示在显示器上,以便用户获知。
44.此外,在调试结果是elf符号的情况下,windbg调试器还可以通过exdi接口对调试结果进行解析,进而可以将解析出来的结果进行显示。调试结果例如包括调试返回的数据和linux内核中实际加载的内核基址等。
45.此外,例如,该通信协议还可以定义进行通信的链路以及链路的相关配置,例如,可以通过配置文件定义通过哪个接口进行通信,还可以通过配置文件配置接口的参数,例如,配置串口的波特率、奇偶校验等参数;启用usb的内核调试特性,启用网口的内核调试特性等。
46.在至少一个实施例中,第一操作系统与第二操作系统之间的通信接口可以包括通用串行总线(universal serial bus, usb)接口、网线接口(以下有时简称为“网口”)和串行通信接口(以下有时简称为“串口”)中的至少一个。
47.例如,在步骤101执行之前,可以预先配置第一操作系统侧的通信接口的驱动,例如,配置串口驱动例如对串口配置波特率、奇偶校验等参数;配置usb驱动例如启用usb的内核调试特性,配置网口驱动例如启用网口的内核调试特性等。但本公开实施例不限于,还可以根据实际需要配置相应的通信接口的驱动。
48.在步骤101中,根据通信协议将接收到的所述调试命令转换为所述第一操作系统的内核可识别的命令。例如,根据通信协议解析windbg调试器的连接请求和/或windbg.dbgeng.dll的封包命令,将windbg调试器的连接请求和/或windbg.dbgeng.dll的封包命令转换为linux内核可识别的命令。
49.在步骤103中,例如,linux内核根据解析出的中断命令执行中断并启动调试进程,然后根据接收到的各种调试命令执行对应的调试,并得到调试结果,该调试结果可以称为“中间消息”或“中间数据”。
50.在步骤105中,对该调试结果进行转换,使之成为能够被windbg调试器识别的数据。
51.在至少一个实施例中,可以将所述中间消息、所述第一内存映像中的至少一部分数据和所述第一数据结构体中的至少一部分数据合并为所述结果消息。
52.例如,将在linux内核中调试得到的结果与虚拟windows的内存映像和虚拟windows的数据结构体的相关数据合并,从而得到windbg调试器可识别的结果消息。
53.在至少一个实施例中,在步骤107中,可以根据所述第一操作系统的内核与所述第二操作系统的内核之间的通信协议将所述结果消息发送给所述第二操作系统的内核。例如,linux内核调试引擎根据与windows的通信协议将结果消息按照约定的封包格式打包后
发送给windows侧的windbg调试器。
54.图2是本公开实施例的调试方法的一个应用的示意图。下面以图2为例利用对本公开实施例的调试方法调试linux内核进行说明。
55.如图2所示,圆形图标表示物理层的接口,箭头表示物理层的数据流向,在物理层实现linux操作系统与windows操作系统的连接,例如,将linux操作系统侧的usb3.0接口与windows操作系统侧的usb3.0接口连接,和/或将linux操作系统侧的网线接口与windows操作系统侧的网线接口连接,和/或将linux操作系统侧的串口与windows操作系统侧的串口连接。
56.此外,图2中以usb3.0为例进行了说明,但本公开实施例对此不作限制,也可以使用usb1.0接口或usb2.0接口。此外,还可以使用图2中未示出的其他通信接口,本公开实施例对两个操作系统之间的通信接口不作限定。
57.在linux内核中运行fakent调试引擎,fakent调试引擎例如能够实现以下功能:建立linux内核与windbg调试器之间的通信连接,包括配置linux内核与windbg调试器之间的通信协议和通信接口的驱动;在linux内核中虚拟windows调试环境,例如实现表1中的数据结构体的虚拟和windows内存映像的虚拟。
58.在windows操作系统侧启动windbg调试器程序,windbg调试器程序打开对应的调试接口,例如usb接口、网口和串口中的至少一个,等待与linux侧对应的接口连接,即,等待与linux内核连接;fakent调试引擎基于linux内核与windbg调试器之间的通信协议,通过配置文件预先定义通信接口,例如,通过配置文件指定通信端口,例如,usb端口名、网卡名、串口的端口名等,fakent调试引擎在linux内核初始化过程中从这些配置文件读取配置项,来决定开启哪种通信链路,例如开启usb接口,从而与windbg调试器的调试接口建立通信连接。
59.用户可以通过windbg调试器的命令窗口输入调试命令字符,例如输入表示“中断”的字符“bp”,windbg调试器的windbg.dbgeng.dll将该调试命令字符按照其定义的封包格式封装后,通过usb接口发送给linux内核,fakent调试引擎基于之前建立的通信协议将接收到的调试命令解析为linux内核可识别的命令,并执行该命令,获得调试结果。
60.例如,在解析到调试命令为“中断”时,fakent调试引擎在linux内核代码里加入代码补丁,以改变linux断点异常处理流程,通过断点异常,通知fakent调试引擎,fakent调试引擎进而向windbg发送数据包,由此实现中断到windbg调试器;fakent调试引擎基于该通信协议对根据调试命令得到的调试结果进行封包,即,将按照封包格式将调试结果和其他相关数据一起打包,构造为能够被windbg调试器识别/读取的数据包;fakent调试引擎将构造好的数据包发送给windbg调试器,windbg调试器依据其定义的封包格式提取调试结果,windbg调试器的exdi接口读取该调试结果的数据,从而取得调试结果;将调试结果的格式转换为pdb格式并显示转换后的数据。
61.由此,通过fakent调试引擎在linux内核中模拟windows内核调试引擎,从而能够通过windbg调试器调试linux内核,与使用gdb调试器调试linux内核相比,本公开实施例的调试效率更高,连接速度更快,在系统内核中搜索数据速度更快。
62.根据第一方面的实施例,通过在第一操作系统内核中建立虚拟第二操作系统环境,将第一操作系统的调试结果转换为第二操作系统的内核能够识别的数据,由此能够通
过在第二操作系统中运行功能比第一操作系统中运行的调试器的功能强大的调试器,对第一操作系统的内核和/或驱动进行调试,提高调试效率,从而解决在第一操作系统中运行的调试器调试第一操作系统的内核和/或驱动时调试过程耗时较长的问题。此外,还可以减少调试过程中死机的情况发生。
63.第二方面的实施例本公开第二方面的实施例提供一种调试方法,该调试方法可以应用于第二操作系统,以用于调试第一操作系统内核,也可用于调试第一操作系统驱动。图3是本公开第二方面的实施例的调试方法的一个示意图。
64.如图3所示,方法200可以包括:步骤201:通过在第二操作系统中运行的内核调试器向第一操作系统的内核发送调试命令,所述第一操作系统和所述第二操作系统是不同种类的操作系统;步骤203:接收所述第一操作系统的内核响应所述调试命令的结果消息;步骤205:解析所述结果消息得到所述调试命令对应的调试结果。
65.由此,可以通过在第二操作系统上运行的功能比较强大的调试器来对第一操作系统的内核和/或驱动进行调试,提高调试效率,从而能够解决在第一操作系统中运行的调试器调试第一操作系统的内核和/或驱动时调试过程耗时较长的问题。此外,还可以减少调试过程中死机的情况发生。
66.在至少一个实施例中,步骤205可以包括通过所述内核调试器中预先定义的通信协议从所述结果消息中提取所述调试结果对应的数据,该调试结果对应的数据用于确定调试命令对应的调试结果。
67.例如,该通信协议定义了该内核调试器能够读取的数据包的包格式,该通信协议例如可以包括该内核调试器预先定义的封包和/或解包策略,该内核调试器在接收到来自第一操作系统的结果消息后,可以根据其自身的解包策略提取出调试结果对应的数据。
68.在至少一个实施例中,例如,内核调试器能够直接读取提取出的调试结果对应的数据,那么内核调试器可以读取提取出的数据,进而可以将读取的数据显示到显示装置上,以便用户查看调试结果。
69.在至少一个实施例中,例如,内核调试器不能直接读取提取出的调试结果对应的数据,那么步骤205还可以包括通过所述内核调试器的预定接口读取调试结果对应的数据。例如,该预定接口可以将提取出的数据的数据格式转换为内核调试器能够读取的数据格式,由此内核调试器读取到相应的数据。
70.在至少一个实施例中,提取到的调试结果对应的数据包括内核调试器能够直接读取提取出的调试结果对应的第一数据以及内核调试器不能直接读取提取出的调试结果对应的第二数据,可以通过所述内核调试器的预定接口将提取出的第二数据转换为内核调试器能够读取的第三数据,并将第一数据和第三数据确定为调试命令对应的调试结果。
71.在至少一个实施例中,第一操作系统例如可以是linux操作系统,第二操作系统例如可以是windows操作系统,但本技术实施例对此不作限制,第一操作系统和第二操作系统还可以是其他的操作系统,具体可以参考相关技术。
72.在步骤201中,例如,在第二操作系统上运行的调试器可以是在windows操作系统中运行的windbg调试器。但本技术实施例对此不作限制,还是可以其他调试器,具体可以参
考相关技术。
73.下面以windbg调试器为例对本公开的实施例进行说明。
74.例如,在步骤205中,可以通过windbg调试器自身的解包策略提取出接收到的数据包中的对应于调试结果的数据,例如,如果接收到的是linux操作系统的回复的数据,由于linux操作系统回复的数据的格式是elf格式,因此,可以通过windbg调试器的exdi接口解析提取出的elf格式的数据,读取该数据,获得调试结果。
75.在至少一个实施例中,方法200还可以包括显示解析出的调试结果。例如,在通过windbg调试器的exdi接口读取了调试结果对应的数据后,显示表示调试结果的数据,即,显示linux内核调试的结果,以便于用户了解调试进程。
76.根据第二方面的实施例,可以通过在第二操作系统上运行的功能比较强大的调试器对第一操作系统的内核和/或驱动进行调试,提高调试效率,从而能够解决在第一操作系统中运行的调试器调试第一操作系统的内核和/或驱动时调试过程耗时较长的问题。此外,还可以减少调试过程中死机的情况发生。
77.第三方面的实施例本公开第三方面的实施例提供一种调试装置,该调试装置的原理与第一方面的实施例所述的调试方法相同,相同内容被合并于此。
78.本公开实施例的调试装置可以应用于安装了第一操作系统的装置中,以用于调试第一操作系统的内核,也可用于调试安装在第一操作系统的驱动。图4是本公开第三方面的实施例的调试装置的一个示意图。
79.如图4所示,调试装置300可以包括命令解析单元301、中间消息生成单元302、转换单元303和通信单元304。
80.命令解析单元301解析来自第二操作系统的调试命令,所述第一操作系统和所述第二操作系统是不同种类的操作系统;中间消息生成单元302根据解析后的调试命令,生成中间消息;转换单元303基于在所述第一操作系统的内核中建立的虚拟第二操作系统的调试环境将所述中间消息转换为所述第二操作系统的内核可识别的结果消息;通信单元304向所述第二操作系统发送所述结果消息。
81.由此,通过在第一操作系统内核中建立虚拟第二操作系统环境,将第一操作系统的调试结果转换为第二操作系统的内核能够识别的数据,从而能够通过在第二操作系统中运行功能比第一操作系统中运行的调试器的功能强大的调试器(例如,windbg调试器),对第一操作系统的内核和/或驱动进行调试,由于在第二操作系统上运行的调试器的调试效率更高,因此能够解决在第一操作系统中运行的调试器调试第一操作系统的内核和/或驱动时调试过程耗时较长的问题。此外,还可以减少调试过程中死机的情况发生。
82.在至少一个实施例中,第一操作系统可以是linux操作系统,第二操作系统可以是windows操作系统,但本技术实施例对此不作限制,第一操作系统和第二操作系统还可以是其他的操作系统,具体可以参考相关技术。
83.在至少一个实施例中,虚拟第二操作系统的调试环境包括第一内存映像和第一数据结构体,所述第一内存映象的布局是基于所述第二操作系统的内存映象的布局构建的,所述第一数据结构体的数据结构与所述第二操作系统的至少一部分的数据结构体的数据结构相同。此外,也可以是所述第一数据结构体的数据结构与所述第二操作系统的数据结
构体的数据结构相似。
84.在至少一个实施例中,通信单元304根据所述第一操作系统的内核与所述第二操作系统的内核之间的通信协议将结果消息发送给所述第二操作系统的内核。
85.在至少一个实施例中,命令解析单元301根据所述第一操作系统的内核与所述第二操作系统的内核之间的通信协议将接收到的所述调试命令转换为所述第一操作系统的内核可识别的命令。
86.在至少一个实施例中,第一操作系统侧的通信接口包括usb接口、网口和串口中的至少一个。
87.在至少一个实施例中,转换单元303将所述中间消息、所述第一内存映像中的至少一部分数据和所述第一数据结构体中的至少一部分数据合并为所述结果消息。
88.根据第三方面的实施例,通过在第一操作系统内核中建立虚拟第二操作系统环境,将第一操作系统的调试结果转换为第二操作系统的内核能够识别的数据,由此能够通过在第二操作系统中运行功能比第一操作系统中运行的调试器的功能强大的调试器,对第一操作系统的内核和/或驱动进行调试,提高调试效率,从而解决在第一操作系统中运行的调试器调试第一操作系统的内核和/或驱动时调试过程耗时较长的问题。此外,还可以减少调试过程中死机的情况发生。
89.第四方面的实施例本公开第四方面的实施例提供一种调试装置,该调试装置的原理与第二方面的实施例所述的调试方法相同,相同内容被合并于此。
90.本公开实施例的调试装置可以应用于安装了第二操作系统的装置中,以用于调试第一操作系统的内核,也可用于调试安装在第一操作系统中的驱动。图5是本公开第四方面的实施例的调试装置的一个示意图。
91.如图5所示,调试装置500包括命令发送单元501、接收单元502和消息解析单元503。命令发送单元501通过在第二操作系统中运行的内核调试器向第一操作系统的内核发送调试命令,所述第一操作系统和所述第二操作系统是不同种类的操作系统;接收单元502接收所述第一操作系统内核响应所述调试命令的结果消息;消息解析单元503解析所述结果消息得到所述调试命令对应的调试结果。
92.在至少一个实施例中,消息解析单元503可以通过所述内核调试器中预先定义的通信协议从所述结果消息中提取所述调试结果对应的数据,通过所述内核调试器的预定接口读取所述数据。
93.在至少一个实施例中,第一操作系统可以是linux操作系统,第二操作系统可以是windows操作系统,但本技术实施例对此不作限制,第一操作系统和第二操作系统还可以是其他的操作系统,具体可以参考相关技术。
94.在至少一个实施例中,例如,第二操作系统可以是windows操作系统,在第二操作系统中运行的调试器可以是windbg调试器,消息解析单元503可以通过windbg调试器中预先定义的通信协议从结果消息中提取调试结果对应的数据,通过windbg调试器的exdi接口读取该数据,从而得到调试结果。
95.例如,第一操作系统可以是linux操作系统,linux操作系统的内核响应调试命令生成的数据的格式是elf格式,消息解析单元503可以通过windbg调试器自身的解包策略提
取出接收到的数据包中的对应于调试结果的elf格式的数据,通过windbg调试器的exdi接口解析提取出的elf格式的数据,读取该数据,获得调试结果。
96.在至少一个实施例中,如图5所示,调试装置500还可以包括控制单元504,控制单元504可以控制显示装置显示由消息解析单元503解析出的调试结果。
97.根据第四方面的实施例,可以通过在第二操作系统上运行的功能比较强大的调试器对第一操作系统的内核和/或驱动进行调试,提高调试效率,从而能够解决在第一操作系统中运行的调试器调试第一操作系统的内核和/或驱动时调试过程耗时较长的问题。此外,可以减少调试过程中死机的情况发生。
98.本公开实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述第一方面的实施例或上述第二方面的实施例的调试方法。
99.本公开实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面的实施例或上述第二方面的实施例的调试方法。
100.本公开实施例还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现上述第一方面的实施例或上述第二方面的实施例的调试方法。
101.本公开实施例中,通过在第一操作系统内核中建立虚拟第二操作系统环境将第一操作系统的调试结果转换为第二操作系统的内核能够识别的数据,由此能够通过在第二操作系统中运行功能比第一操作系统中运行的调试器的功能强大的调试器,对第一操作系统的内核和/或驱动进行调试,提高调试效率,从而解决在第一操作系统中运行的调试器调试第一操作系统的内核和/或驱动时调试过程耗时较长的问题。此外,还可以减少调试过程中死机的情况发生。
102.本公开实施例在调试方法的各步骤中标注了各步骤的编号,但编号的顺序并不代表各步骤的执行顺序,各步骤的执行顺序可以根据实际情况任意组合,本公开实施例不以此为限制。
103.本领域内的技术人员应明白,本公开的实施例可提供为方法、系统、或计算机程序产品。因此,本公开可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本公开可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
104.本公开是参照根据本公开实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
105.这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指
令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
106.这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
107.以上所述的具体实施例,对本公开的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本公开的具体实施例而已,并不用于限定本公开的保护范围,凡在本公开的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1