首页 / 专利库 / 电脑零配件 / 计算机系统 / 软件 / 系统软件 / 操作系统 / 一种调试方法、多核处理器和调试设备

一种调试方法、多核处理器和调试设备

阅读:0发布:2022-06-18

专利汇可以提供一种调试方法、多核处理器和调试设备专利检索,专利查询,专利分析的服务。并且本 发明 实施例 涉及计算机技术领域。本发明实施例提供一种调试方法,包括:所述 多核处理器 的核A执行完预设事件处理例程后开始停止运行,并在停止运行的过程中向其他核发送停止运行 信号 ;所述核A接收第一解除停止指令并恢复运行后,执行调试信息收集函数以收集所述预设事件的调试信息,并在执行完所述调试信息收集函数之后停止运行;所述核A接收第二解除停止指令并恢复运行后,向所述其他核发送恢复运行指令。本发明实施例提供的技术方案能够实现 内核 态代码和用户态代码使用同一个调试平台实现屏蔽。此外,本发明实施例还提供相应的调试装置。,下面是一种调试方法、多核处理器和调试设备专利的具体信息内容。

1.一种调试方法,其特征在于,应用于远程调试系统中的目标机,所述目标机包括多核处理器,所述方法包括:
所述多核处理器的核A执行完预设事件处理例程后开始停止运行,并在停止运行的过程中向其他核发送停止运行信号,所述停止运行信号用于指示所述其他核停止运行;所述其他核是指位于所述多核处理器内、且与所述核A属于同一逻辑分组的所有核;所述预设事件为内核的卸载函数、进程的删除函数或线程的处理函数;
所述核A接收第一解除停止指令并恢复运行后,执行调试信息收集函数以收集所述预设事件的调试信息,并在执行完所述调试信息收集函数之后停止运行;所述第一解除停止指令是所述远程调试系统中的调试装置在确定所述核A停止运行且导致所述核A停止运行的原因为所述预设事件之外的原因后发送的;
所述核A接收第二解除停止指令并恢复运行后,向所述其他核发送恢复运行指令,所述恢复运行指令用于通知所述其他核恢复运行;所述第二解除停止指令是所述调试装置根据所述预设事件的调试信息屏蔽所述预设事件操作对象之后发送的,所述预设事件操作对象为内核模块、进程或线程。
2.根据权利要求1所述的方法,其特征在于,
所述调试信息收集函数包括调试接口函数,所述调试接口函数的头部设置有第一调试异常指令,所述第一调试异常指令用于指示所述核A停止运行;
所述核A执行完预设事件处理例程后开始停止运行,并在停止运行的过程中向其他核发送停止运行信号,具体包括:
所述核A执行完所述预设事件处理例程后开始执行位于所述调试接口函数头部的所述第一调试异常指令,并在执行所述第一调试异常指令的过程中向所述其他核发送所述停止运行信号。
3.根据权利要求2所述的方法,其特征在于,
所述调试信息收集函数还包括与所述预设事件相关联的功能函数,且所述调试接口函数的尾部还设置有第二调试异常指令,所述第二调试异常指令用于指示所述核A停止运行;
所述核A执行调试信息收集函数以收集所述预设事件的调试信息,并在执行完所述调试信息收集函数之后停止运行,具体包括:
所述核A执行与所述预设事件相关联的功能函数以收集所述预设事件的调试信息,然后执行位于所述调试接口函数尾部的所述第二调试异常指令。
4.根据权利要求3所述的方法,其特征在于,
所述与所述预设事件相关联的功能函数位于内核调试桩内,所述内核调试桩是预先植入在所述目标机操作系统内的。
5.根据权利要求1至4任一项所述的方法,其特征在于,
在所述预设事件为所述内核模块的卸载函数的情况下,所述预设事件操作对象为内核模块;
在所述预设事件为所述进程的删除函数的情况下,所述预设事件操作对象为进程;
在所述预设事件为所述线程的删除函数的情况下,所述预设事件操作对象为线程。
6.根据权利要求1至4任一项所述的方法,其特征在于,所述预设事件的调试信息包括所述预设事件操作对象的标识。
7.根据权利要求1至4任一项所述的方法,其特征在于,所述多核处理器集成在系统级芯片SOC上;
所述核A向其他核发送停止运行信号,所述停止运行信号用于指示所述其他核停止运行,具体包括:
所述核A通过所述SOC的硬件交叉触发网络向所述其他核发送停止运行信号,所述停止运行信号用于指示所述其他核停止运行;
所述核A向所述其他核发送恢复运行指令,所述恢复运行指令用于通知所述其他核恢复运行,具体包括:
所述核A通过所述SOC的硬件交叉触发网络向所述其他核发送恢复运行指令,所述恢复运行指令用于通知所述其他核恢复运行。
8.一种调试方法,其特征在于,由部署于宿主机内的调试装置执行,所述宿主机位于远程调试系统,所述方法包括:
所述调试装置确定核A停止运行后,确定导致所述核A停止运行的原因;所述核A属于所述远程调试系统中的目标机的多核处理器;
在导致所述核A停止运行的原因为预设事件的情况下,所述调试装置获取所述预设事件的调试信息,并根据所述预设事件的调试信息屏蔽所述预设事件操作对象;所述预设事件为内核模块的卸载函数、进程的删除函数或线程的删除函数,所述预设事件操作对象为内核模块、进程或线程;
所述调试装置指示所述核A恢复运行。
9.根据权利要求8所述的方法,其特征在于,
在导致所述核A停止运行的原因为预设事件之外的原因的情况下,所述调试装置指示所述核A恢复运行以收集所述预设事件的调试信息。
10.根据权利要求8或9所述的方法,其特征在于,所述预设事件的调试信息包括所述预设事件操作对象的标识;
所述调试装置获取所述预设事件的调试信息,并根据所述预设事件的调试信息屏蔽所述预设事件操作对象,具体包括:
所述调试装置获取所述预设事件操作对象的标识,并根据所述预设事件操作对象的标识屏蔽所述预设事件操作对象。
11.根据权利要求8或9所述的方法,其特征在于,所述调试装置包括调试器和调试代理,
所述调试装置确定核A停止运行后,确定导致所述核A停止运行的原因,在导致所述核A停止运行的原因为预设事件的情况下,所述调试装置获取所述预设事件的调试信息,并根据所述预设事件的调试信息屏蔽所述预设事件操作对象,具体包括:
所述调试代理轮询到所述核A停止运行后,确定导致所述核A停止运行的原因,在导致所述核A停止运行的原因为所述预设事件的情况下,将第二消息上报所述调试器,所述第二消息包括所述核A停止运行以及所述预设事件的标识;
所述调试器接收所述第二消息后,获取所述预设事件的调试信息,并根据所述预设事件的调试信息屏蔽所述预设事件操作对象;
所述调试装置指示所述核A恢复运行,具体包括:
所述调试器指示所述调试代理向所述核A发送第二解除停止指令,所述第二解除停止指令用于指示所述核A恢复运行。
12.根据权利要求11所述的方法,其特征在于,
所述调试装置确定所述核A停止运行后,确定导致所述核A停止运行的原因,在导致所述核A停止运行的原因为预设事件之外的原因的情况下,所述调试装置指示所述核A恢复运行以收集所述预设事件的调试信息,具体包括:
所述调试代理轮询到所述核A停止运行后,确定导致所述核A停止运行的原因,在导致所述核A停止运行的原因为所述预设事件之外的原因的情况下,所述调试代理向所述核A发送第一解除停止指令,所述第一解除停止指令用于指示所述核A恢复运行以收集所述预设事件的调试信息。
13.根据权利要求8或9所述的方法,其特征在于,所述调试装置包括调试器和调试代理,
所述调试装置确定所述核A停止运行后,确定导致所述核A停止运行的原因,在导致所述核A停止运行的原因为预设事件之外的原因的情况下,所述调试装置指示所述核A恢复运行以收集所述预设事件的调试信息,具体包括:
所述调试代理轮询到所述核A停止运行后,确定导致所述核A停止运行的原因,在导致所述核A停止运行的原因为所述预设事件之外的原因的情况下,将第一消息上报给所述调试器,所述第一消息包括所述核A停止运行以及缺省标识,
所述调试器接收所述第一消息后,指示所述调试代理向所述核A发送第一解除停止指令,所述第一解除停止指令用于指示所述核A恢复运行以收集所述预设事件的调试信息。
14.一种多核处理器,应用于远程调试系统中的目标机,其特征在于,所述多核处理器包括核A、其他核和输入端口,所述其他核是指位于所述多核处理器内、且与所述核A属于同一逻辑分组的所有核,其中:
所述核A用于在执行完预设事件处理例程后开始停止运行,并在停止运行的过程中向其他核发送停止运行信号,所述停止运行信号用于指示所述其他核停止运行,所述预设事件为内核模块的卸载函数、进程的删除函数或线程的删除函数;
所述输入端口用于接收第一解除停止指令,并将所述第一解除停止指令转送给所述核A,所述第一解除停止指令是所述远程调试系统中的调试装置在确定所述核A停止运行且导致所述核A停止运行的原因为所述预设事件之外的原因后发送的;
所述核A还用于在接收所述第一解除停止指令并恢复运行后,执行调试信息收集函数以收集所述预设事件的调试信息,并在执行完所述调试信息收集函数之后停止运行;
所述输入端口还用于接收第二解除停止指令,并将所述第二解除停止指令转送给所述核A,所述第二解除停止指令是所述调试装置根据所述预设事件的调试信息屏蔽所述预设事件操作对象之后发送的,所述预设事件操作对象为内核模块、进程或线程;
所述核A还用于在接收所述第二解除停止指令并恢复运行后,向所述其他核发送恢复运行指令,所述恢复运行指令用于通知所述其他核恢复运行。
15.根据权利要求14所述的多核处理器,其特征在于,
所述调试信息收集函数包括调试接口函数,所述调试接口函数的头部设置有第一调试异常指令,所述第一调试异常指令用于指示所述核A停止运行;
所述核A具体用于在执行完所述预设事件处理例程后开始执行位于所述调试接口函数头部的所述第一调试异常指令,并在执行所述第一调试异常指令的过程中向所述其他核发送所述停止运行信号。
16.根据权利要求15所述的多核处理器,其特征在于,
所述调试信息收集函数还包括与所述预设事件相关联的功能函数,且所述调试接口函数的尾部还设置有第二调试异常指令,所述第二调试异常指令用于指示所述核A停止运行;
所述核A具体用于执行与所述预设事件相关联的功能函数以收集所述预设事件的调试信息,然后执行位于所述调试接口函数尾部的所述第二调试异常指令。
17.根据权利要求16所述的多核处理器,其特征在于,
所述与所述预设事件相关联的功能函数位于内核调试桩内,所述内核调试桩是预先植入在所述目标机操作系统内的。
18.根据权利要求14至17任一项所述的多核处理器,其特征在于,所述多核处理器集成在系统级芯片SOC上;
所述核A具体用于通过所述SOC的硬件交叉触发网络向所述其他核发送停止运行信号,所述停止运行信号用于指示所述其他核停止运行;以及,
所述核A具体用于通过所述SOC的硬件交叉触发网络向所述其他核发送恢复运行指令,所述恢复运行指令用于通知所述其他核恢复运行。
19.一种调试装置,其特征在于,所述调试装置部署在远程调试系统的宿主机内,所述调试设备包括调试单元和接收单元,
所述接收单元用于接收用于指示核A停止运行的消息,并将所述用于指示所述核A停止运行的消息转送给所述调试单元;其中,位于所述远程调试系统的目标机包括多核处理器,所述多核处理器包括所述核A;
所述调试单元用于在确定所述核A停止运行后,确定导致所述核A停止运行的原因;
在导致所述核A停止运行的原因为预设事件的情况下,所述调试装置还用于获取所述预设事件的调试信息,并根据所述预设事件的调试信息屏蔽所述预设事件操作对象;所述预设事件为内核模块的卸载函数、进程的删除函数或线程的删除函数,所述预设事件操作对象为内核模块、进程或线程;
所述调试装置还用于指示所述核A恢复运行。
20.根据权利要求19所述的装置,其特征在于,
在导致所述核A停止运行的原因为预设事件之外的原因的情况下,所述调试装置还用于指示所述核A恢复运行以收集所述预设事件的调试信息。
21.根据权利要求19或20所述的装置,其特征在于,所述预设事件的调试信息包括所述预设事件操作对象的标识;
所述调试装置具体用于获取所述预设事件操作对象的标识,并根据所述预设事件操作对象的标识屏蔽所述预设事件操作对象。
22.根据权利要求19或20所述的装置,其特征在于,所述调试装置包括调试器和调试代理,
所述调试代理具体用于在确定所述核A停止运行后,确定导致所述核A停止运行的原因,在导致所述核A停止运行的原因为所述预设事件的情况下,将第二消息上报所述调试器,所述第二消息包括所述核A停止运行以及所述预设事件的标识;
所述调试器具体用于接收所述第二消息后,获取所述预设事件的调试信息,并根据所述预设事件的调试信息屏蔽所述预设事件操作对象;
所述调试器具体用于指示所述调试代理向所述核A发送第二解除停止指令,所述第二解除停止指令用于指示所述核A恢复运行。
23.根据权利要求22所述的装置,其特征在于,所述调试代理具体用于在确定所述核A停止运行后,确定导致所述核A停止运行的原因,在导致所述核A停止运行的原因为所述预设事件之外的原因的情况下,所述调试代理具体用于向所述核A发送第一解除停止指令,所述第一解除停止指令用于指示所述核A恢复运行以收集所述预设事件的调试信息。
24.根据权利要求19或20所述的装置,其特征在于,所述调试装置包括调试器和调试代理,
所述调试代理具体用于在确定所述核A停止运行后,确定导致所述核A停止运行的原因,在导致所述核A停止运行的原因为所述预设事件之外的原因的情况下,将第一消息上报给所述调试器,所述第一消息包括所述核A停止运行以及缺省标识;
所述调试器具体用于在接收到所述第一消息后,指示所述调试代理向所述核A发送第一解除停止指令,所述第一解除停止指令用于指示所述核A恢复运行以收集所述预设事件的调试信息。

说明书全文

一种调试方法、多核处理器和调试设备

技术领域

[0001] 本发明实施例涉及计算机技术领域,尤其涉及一种调试方法、多核处理器和调试设备。

背景技术

[0002] 程序调试,是将编写完成的计算机程序投入实际运行前,用手工或编译程序等方法进行测试,修正语法错误和逻辑错误的过程。这是保证计算机信息系统正确性必不可少的步骤。所以编写完成的计算机程序,必须送入计算机中进行调试。
[0003] 业界通常将运行在内核空间代码称为内核态代码,将运行在用户空间的代码称为用户态代码。当前,在对内核态代码和用户态代码进行调试时,需要使用不同的调试平台。需要明确的是,下述的目标机是指被调试代码运行的物理主机,宿主机是指调试器运行的物理主机。比如在对用户态代码进行调试时,需要在目标机的操作系统上运行调试器以进行本地调试;或者,在对用户态代码进行调试时,需要在目标机的操作系统内植入进程跟踪(Ptrace),可能还需要在操作系统上运行调试桩,再在宿主机上运行调试器以进行远程调试;而在对内核态代码,比如内核模块,进行调试时,需要在目标机的操作系统内植入内核调试器,然后在宿主机运行调试器进行远程调试。

发明内容

[0004] 本发明实施例提供一种调试方法、多核处理器和调试设备,用于将内核态代码和用户态代码在同一个调试平台实现调试。
[0005] 第一方面,本发明实施例提供一种调试方法,应用于远程调试系统中的目标机,所述目标机包括多核处理器,所述方法包括:
[0006] 所述多核处理器的核A执行完预设事件处理例程后开始停止运行,并在停止运行的过程中向其他核发送停止运行信号,所述停止运行信号用于指示所述其他核停止运行;所述其他核是指位于所述多核处理器内、且与所述核A属于同一逻辑分组的所有核;所述预设事件为内核模块的卸载函数、进程的删除函数或线程的处理函数;
[0007] 所述核A接收第一解除停止指令并恢复运行后,执行调试信息收集函数以收集所述预设事件的调试信息,并在执行完所述调试信息收集函数之后停止运行;所述第一解除停止指令是所述远程调试系统中的调试装置在确定所述核A停止运行且导致所述核A停止运行的原因为所述预设事件之外的原因后发送的;
[0008] 所述核A接收第二解除停止指令并恢复运行后,向所述其他核发送恢复运行指令,所述恢复运行指令用于通知所述其他核恢复运行;所述第二解除停止指令是所述调试装置根据所述预设事件的调试信息屏蔽所述预设事件操作对象之后发送的,所述预设事件操作对象为内核模块、进程或线程。
[0009] 结合第一方面,在第一方面的第一种实施方式下,
[0010] 所述调试信息收集函数包括调试接口函数,所述调试接口函数的头部设置有第一调试异常指令,所述第一调试异常指令用于指示所述核A停止运行;
[0011] 所述核A执行完预设事件处理例程后开始停止运行,并在停止运行的过程中向其他核发送停止运行信号,具体包括:
[0012] 所述核A执行完所述预设事件处理例程后开始执行位于所述调试接口函数头部的所述第一调试异常指令,并在执行所述第一调试异常指令的过程中向所述其他核发送所述停止运行信号。
[0013] 结合第一方面的第一种实施方式,在第一方面的第二种实施方式下,[0014] 所述调试信息收集函数还包括与所述预设事件相关联的功能函数,且所述调试接口函数的尾部还设置有第二调试异常指令,所述第二调试异常指令用于指示所述核A停止运行;
[0015] 所述核A执行调试信息收集函数以收集所述预设事件的调试信息,并在执行完所述调试信息收集函数之后停止运行,具体包括:
[0016] 所述核A执行与所述预设事件相关联的功能函数以收集所述预设事件的调试信息,然后执行位于所述调试接口函数尾部的所述第二调试异常指令。
[0017] 结合第一方面的第二种实施方式,在第一方面的第三种实施方式下,[0018] 所述与所述预设事件相关联的功能函数位于内核调试桩内,所述内核调试桩是预先植入在所述目标机操作系统内的。
[0019] 结合第一方面或第一方面的第一种实施方式至第一方面的第三种实施方式中任意一种实施方式,在第一方面的第四种实施方式下,
[0020] 在所述预设事件为所述内核模块的卸载函数的情况下,所述预设事件操作对象为内核模块;
[0021] 在所述预设事件为所述进程的删除函数的情况下,所述预设事件操作对象为进程;
[0022] 在所述预设事件为所述线程的删除函数的情况下,所述预设事件操作对象为线程。
[0023] 结合第一方面或第一方面的第一种实施方式至第一方面的第四种实施方式中任意一种实施方式,在第一方面的第五种实施方式下,
[0024] 所述预设事件的调试信息包括所述预设事件操作对象的标识。
[0025] 结合第一方面或第一方面的第一种实施方式至第一方面的第五种实施方式中任意一种实施方式,在第一方面的第六种实施方式下,
[0026] 所述多核处理器集成在系统级芯片SOC上;
[0027] 所述核A向其他核发送停止运行信号,所述停止运行信号用于指示所述其他核停止运行,具体包括:
[0028] 所述核A通过所述SOC的硬件交叉触发网络向所述其他核发送停止运行信号,所述停止运行信号用于指示所述其他核停止运行;
[0029] 所述核A向所述其他核发送恢复运行指令,所述恢复运行指令用于通知所述其他核恢复运行,具体包括:
[0030] 所述核A通过所述SOC的硬件交叉触发网络向所述其他核发送恢复运行指令,所述恢复运行指令用于通知所述其他核恢复运行。
[0031] 第二方面,本发明实施例提供一种调试方法,由部署于宿主机内的调试装置执行,所述宿主机位于远程调试系统,所述方法包括:
[0032] 所述调试装置确定核A停止运行后,确定导致所述核A停止运行的原因;所述核A属于所述远程调试系统中的目标机的多核处理器;
[0033] 在导致所述核A停止运行的原因为预设事件的情况下,所述调试装置获取所述预设事件的调试信息,并根据所述预设事件的调试信息屏蔽所述预设事件操作对象;所述预设事件为内核模块的卸载函数、进程的删除函数或线程的删除函数,所述预设事件操作对象为内核模块、进程或线程;
[0034] 所述调试装置指示所述核A恢复运行。
[0035] 结合第二方面,在第二方面的第一种实施方式下,
[0036] 在导致所述核A停止运行的原因为预设事件之外的原因的情况下,所述调试装置指示所述核A恢复运行以收集所述预设事件的调试信息。
[0037] 结合第二方面或第二方面的第一种实施方式,在第二方面的第二种实施方式下,所述预设事件的调试信息包括所述预设事件操作对象的标识;
[0038] 所述调试装置获取所述预设事件的调试信息,并根据所述预设事件的调试信息屏蔽所述预设事件操作对象,具体包括:
[0039] 所述调试装置获取所述预设事件操作对象的标识,并根据所述预设事件操作对象的标识屏蔽所述预设事件操作对象。
[0040] 结合第二方面、第二方面的第一种实施方式或第二方面的第二种实施方式,在第二方面的第三种实施方式下,
[0041] 所述调试装置包括调试器和调试代理,
[0042] 所述调试装置确定核A停止运行后,确定导致所述核A停止运行的原因,在导致所述核A停止运行的原因为预设事件的情况下,所述调试装置获取所述预设事件的调试信息,并根据所述预设事件的调试信息屏蔽所述预设事件操作对象,具体包括:
[0043] 所述调试代理轮询到所述核A停止运行后,确定导致所述核A停止运行的原因,在导致所述核A停止运行的原因为所述预设事件的情况下,将第二消息上报所述调试器,所述第二消息包括所述核A停止运行以及所述预设事件的标识;
[0044] 所述调试器接收所述第二消息后,获取所述预设事件的调试信息,并根据所述预设事件的调试信息屏蔽所述预设事件操作对象;
[0045] 所述调试装置指示所述核A恢复运行,具体包括:
[0046] 所述调试器指示所述调试代理向所述核A发送第二解除停止指令,所述第二解除停止指令用于指示所述核A恢复运行。
[0047] 结合第二方面的第三种实施方式,在第二方面的第四种实施方式下,[0048] 所述调试装置确定所述核A停止运行后,确定导致所述核A停止运行的原因,在导致所述核A停止运行的原因为预设事件之外的原因的情况下,所述调试装置指示所述核A恢复运行以收集所述预设事件的调试信息,具体包括:
[0049] 所述调试代理轮询到所述核A停止运行后,确定导致所述核A停止运行的原因,在导致所述核A停止运行的原因为所述预设事件之外的原因的情况下,所述调试代理向所述核A发送第一解除停止指令,所述第一解除停止指令用于指示所述核A恢复运行以收集所述预设事件的调试信息。
[0050] 结合第二方面或第二方面的第一种实施方式至第二方面的第三种实施方式中任意一种实施方式,在第二方面的第五种实施方式下,
[0051] 所述调试装置包括调试器和调试代理,
[0052] 所述调试装置确定所述核A停止运行后,确定导致所述核A停止运行的原因,在导致所述核A停止运行的原因为预设事件之外的原因的情况下,所述调试装置指示所述核A恢复运行以收集所述预设事件的调试信息,具体包括:
[0053] 所述调试代理轮询到所述核A停止运行后,确定导致所述核A停止运行的原因,在导致所述核A停止运行的原因为所述预设事件之外的原因的情况下,将第一消息上报给所述调试器,所述第一消息包括所述核A停止运行以及缺省标识,
[0054] 所述调试器接收所述第一消息后,指示所述调试代理向所述核A发送第一解除停止指令,所述第一解除停止指令用于指示所述核A恢复运行以收集所述预设事件的调试信息。
[0055] 结合第二方面或第二方面的第一种实施方式至第二方面的第五种实施方式中任意一种实施方式,在第二方面的第六种实施方式下,
[0056] 在所述预设事件为所述内核模块的卸载函数的情况下,所述预设事件操作对象为内核模块;
[0057] 在所述预设事件为所述进程的删除函数的情况下,所述预设事件操作对象为进程;
[0058] 在所述预设事件为所述线程的删除函数的情况下,所述预设事件操作对象为线程。
[0059] 第三方面,本发明实施例提供一种多核处理器,应用于远程调试系统中的目标机,所述多核处理器包括核A、其他核和输入端口,所述其他核是指位于所述多核处理器内、且与所述核A属于同一逻辑分组的所有核,其中:
[0060] 所述核A用于在执行完预设事件处理例程后开始停止运行,并在停止运行的过程中向其他核发送停止运行信号,所述停止运行信号用于指示所述其他核停止运行,所述预设事件为内核模块的卸载函数、进程的删除函数或线程的删除函数;
[0061] 所述输入端口用于接收第一解除停止指令,并将所述第一解除停止指令转送给所述核A,所述第一解除停止指令是所述远程调试系统中的调试装置在确定所述核A停止运行且导致所述核A停止运行的原因为所述预设事件之外的原因后发送的;
[0062] 所述核A还用于在接收所述第一解除停止指令并恢复运行后,执行调试信息收集函数以收集所述预设事件的调试信息,并在执行完所述调试信息收集函数之后停止运行;
[0063] 所述输入端口还用于接收第二解除停止指令,并将所述第二解除停止指令转送给所述核A,所述第二解除停止指令是所述调试装置根据所述预设事件的调试信息屏蔽所述预设事件操作对象之后发送的,所述预设事件操作对象为内核模块、进程或线程;
[0064] 所述核A还用于在接收所述第二解除停止指令并恢复运行后,向所述其他核发送恢复运行指令,所述恢复运行指令用于通知所述其他核恢复运行。
[0065] 结合第三方面,在第三方面的第一种实施方式下,
[0066] 所述调试信息收集函数包括调试接口函数,所述调试接口函数的头部设置有第一调试异常指令,所述第一调试异常指令用于指示所述核A停止运行;
[0067] 所述核A具体用于在执行完所述预设事件处理例程后开始执行位于所述调试接口函数头部的所述第一调试异常指令,并在执行所述第一调试异常指令的过程中向所述其他核发送所述停止运行信号。
[0068] 结合第三方面的第一种实施方式,在第三方面的第二种实施方式下,[0069] 所述调试信息收集函数还包括与所述预设事件相关联的功能函数,且所述调试接口函数的尾部还设置有第二调试异常指令,所述第二调试异常指令用于指示所述核A停止运行;
[0070] 所述核A具体用于执行与所述预设事件相关联的功能函数以收集所述预设事件的调试信息,然后执行位于所述调试接口函数尾部的所述第二调试异常指令。
[0071] 结合第三方面的第二种实施方式,在第三方面的第三种实施方式下,[0072] 所述与所述预设事件相关联的功能函数位于内核调试桩内,所述内核调试桩是预先植入在所述目标机操作系统内的。
[0073] 结合第三方面或第三方面的第一种实施方式至第三方面的第三种实施方式中任意一种实施方式,在第三方面的第四种实施方式下,
[0074] 在所述预设事件为所述内核模块的卸载函数的情况下,所述预设事件操作对象为内核模块;
[0075] 在所述预设事件为所述进程的删除函数的情况下,所述预设事件操作对象为进程;
[0076] 在所述预设事件为所述线程的删除函数的情况下,所述预设事件操作对象为线程。
[0077] 结合第三方面或第三方面的第一种实施方式至第三方面的第四种实施方式中任意一种实施方式,在第三方面的第五种实施方式下,
[0078] 所述预设事件的调试信息包括所述预设事件操作对象的标识。
[0079] 结合第三方面或第三方面的第一种实施方式至第三方面的第五种实施方式中任意一种实施方式,在第三方面的第六种实施方式下,所述多核处理器集成在系统级芯片SOC上;
[0080] 所述核A具体用于通过所述SOC的硬件交叉触发网络向所述其他核发送停止运行信号,所述停止运行信号用于指示所述其他核停止运行;以及,
[0081] 所述核A具体用于通过所述SOC的硬件交叉触发网络向所述其他核发送恢复运行指令,所述恢复运行指令用于通知所述其他核恢复运行。
[0082] 第四方面,本发明实施例提供一种调试装置,所述调试装置部署在远程调试系统的宿主机内,所述调试设备包括调试单元和接收单元,
[0083] 所述接收单元用于接收用于指示核A停止运行的消息,并将所述用于指示所述核A停止运行的消息转送给所述调试单元;其中,位于所述远程调试系统的目标机包括多核处理器,所述多核处理器包括所述核A;
[0084] 所述调试单元用于在确定所述核A停止运行后,确定导致所述核A停止运行的原因;
[0085] 在导致所述核A停止运行的原因为预设事件的情况下,所述调试装置还用于获取所述预设事件的调试信息,并根据所述预设事件的调试信息屏蔽所述预设事件操作对象;所述预设事件为内核模块的卸载函数、进程的删除函数或线程的删除函数,所述预设事件操作对象为内核模块、进程或线程;
[0086] 所述调试装置还用于指示所述核A恢复运行。
[0087] 结合第四方面,在第四方面的第一种实施方式下,在导致所述核A停止运行的原因为预设事件之外的原因的情况下,所述调试装置还用于指示所述核A恢复运行以收集所述预设事件的调试信息。
[0088] 结合第四方面或第四方面的第一种实施方式,在第四方面的第二种实施方式下,所述预设事件的调试信息包括所述预设事件操作对象的标识;
[0089] 所述调试装置具体用于获取所述预设事件操作对象的标识,并根据所述预设事件操作对象的标识屏蔽所述预设事件操作对象。
[0090] 结合第四方面、第四方面的第一种实施方式或第四方面的第二种实施方式,在第四方面的第三种实施方式下,
[0091] 在所述预设事件为所述内核模块的卸载函数的情况下,所述预设事件操作对象为内核模块;
[0092] 在所述预设事件为所述进程的删除函数的情况下,所述预设事件操作对象为进程;
[0093] 在所述预设事件为所述线程的删除函数的情况下,所述预设事件操作对象为线程。
[0094] 结合第四方面或第四方面的第一种实施方式至第四方面的第三种实施方式中任意一种实施方式,在第四方面的第四种实施方式下,所述调试装置包括调试器和调试代理,[0095] 所述调试代理具体用于在确定所述核A停止运行后,确定导致所述核A停止运行的原因,在导致所述核A停止运行的原因为所述预设事件的情况下,将第二消息上报所述调试器,所述第二消息包括所述核A停止运行以及所述预设事件的标识;
[0096] 所述调试器具体用于接收所述第二消息后,获取所述预设事件的调试信息,并根据所述预设事件的调试信息屏蔽所述预设事件操作对象;
[0097] 所述调试器具体用于指示所述调试代理向所述核A发送第二解除停止指令,所述第二解除停止指令用于指示所述核A恢复运行。
[0098] 结合第四方面的第四种实施方式,在第四方面的第五种实施方式下,[0099] 所述调试代理具体用于在确定所述核A停止运行后,确定导致所述核A停止运行的原因,在导致所述核A停止运行的原因为所述预设事件之外的原因的情况下,所述调试代理具体用于向所述核A发送第一解除停止指令,所述第一解除停止指令用于指示所述核A恢复运行以收集所述预设事件的调试信息。
[0100] 结合第四方面或第四方面的第一种实施方式至第四方面的第四种实施方式中任意一种实施方式,在第四方面的第六种实施方式下,所述调试装置包括调试器和调试代理,[0101] 所述调试代理具体用于在确定所述核A停止运行后,确定导致所述核A停止运行的原因,在导致所述核A停止运行的原因为所述预设事件之外的原因的情况下,将第一消息上报给所述调试器,所述第一消息包括所述核A停止运行以及缺省标识;
[0102] 所述调试器具体用于在接收到所述第一消息后,指示所述调试代理向所述核A发送第一解除停止指令,所述第一解除停止指令用于指示所述核A恢复运行以收集所述预设事件的调试信息。
[0103] 第五方面,本发明实施例提供一种调试设备,包括处理器和存储器
[0104] 所述处理器用于在确定所述核A停止运行后,确定导致所述核A停止运行的原因;位于所述远程调试系统的目标机包括多核处理器,所述多核处理器包括所述核A;
[0105] 在导致所述核A停止运行的原因为预设事件的情况下,所述处理器用于获取所述预设事件的调试信息,并根据所述预设事件的调试信息屏蔽所述预设事件操作对象;所述预设事件为内核模块的卸载函数、进程的删除函数或线程的删除函数,所述预设事件操作对象为内核模块、进程或线程;
[0106] 所述存储器用于存储所述预设事件的调试信息;
[0107] 所述处理器还用于指示所述核A恢复运行。
[0108] 结合第五方面,在第五方面的第一种实施方式下,
[0109] 在导致所述核A停止运行的原因为预设事件之外的原因的情况下,所述处理器还用于指示所述核A恢复运行以收集所述预设事件的调试信息。
[0110] 结合第五方面或第五方面的第一种实施方式,在第五方面的第二种实施方式下,所述预设事件的调试信息包括所述预设事件操作对象的标识;
[0111] 所述处理器具体用于获取所述预设事件操作对象的标识,并根据所述预设事件操作对象的标识屏蔽所述预设事件操作对象。
[0112] 结合第五方面、第五方面的第一种实施方式或第五方面的第二种实施方式,在第五方面的第三种实施方式下,
[0113] 在所述预设事件为所述内核模块的卸载函数的情况下,所述预设事件操作对象为内核模块;
[0114] 在所述预设事件为所述进程的删除函数的情况下,所述预设事件操作对象为进程;
[0115] 在所述预设事件为所述线程的删除函数的情况下,所述预设事件操作对象为线程。
[0116] 可知,本发明实施例提供一种调试方法,通过在运行在核A上的预设事件的末尾添加调试接口函数,该调试接口函数通过调用内核调试桩中与该预设事件的类型相关联的功能函数,获取该预设事件的调试信息;调试器根据该预设事件的调试信息屏蔽所述预设事件操作对象。因为在本发明实施例中,该预设事件为内核模块的卸载函数、进程的删除函数或线程的删除函数,预设事件操作对象为内核模块、进程或线程,其中内核模块为内核态代码,进程以及线程为用户态代码所以本发明实施例提供的技术方案,能够将内核态代码和用户态代码在同一个调试平台实现屏蔽。附图说明
[0117] 为了更清楚地说明本发明实施例的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0118] 图1为本发明实施例提供的一种远程调试系统的结构示意图;
[0119] 图2为本发明实施例提供的另一种远程调试系统的结构示意图;
[0120] 图3为本发明实施例提供的一种调试方法的流程示意图;
[0121] 图4为本发明实施例提供的另一种调试方法的流程示意图;
[0122] 图5为本发明实施例提供的一种目标机的结构示意图;
[0123] 图6.1为本发明实施例提供的一种数据头和数据体的结构示意图;
[0124] 图6.2为本发明实施例提供的再一种数据头和数据体的结构示意图;
[0125] 图7为本发明实施例提供的一种多核处理器的结构示意图;
[0126] 图8为本发明实施例提供的一种调试装置的结构示意图;
[0127] 图9为本发明实施例提供的一种调试设备的结构示意图。

具体实施方式

[0128] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0129] 实施例一
[0130] 参见附图3,本发明实施例提供一种调试方法,应用于如图1所示的远程调试系统,参见附图1,该远程调试系统包括目标机和宿主机,该目标机包括多核处理器,调试装置部署在所述宿主机内;其中,目标机和宿主机是不同的物理主机,目标机和宿主机之间通信连接。需要说明的是,在本发明实施例提供的技术方案中,所述多核处理器既可以是同构多核处理器,也可以是异构多核处理器。在目标机包括多个多核处理器的情况下,核A可以是该目标机中任一个多核处理器的任一个核,并不特指该目标机中的哪一个多核处理器的哪一个核。
[0131] 具体的,本发明实施例提供的调试方法包括下述步骤:
[0132] S301、所述核A执行完预设事件处理例程后开始停止运行,并在停止运行的过程中向其他核发送停止运行信号,所述停止运行信号用于是指所述其他核停止运行,所述其他核是指位于所述多核处理器内、且与所述核A属于同一逻辑分组的所有核,所述预设事件为内核模块的卸载函数、进程的删除函数或线程的删除函数;
[0133] 如附图5所示,在本发明实施例中,预设事件的末尾添加了调试接口函数,该调试接口函数是位于预设事件外部的,不是预设事件的一部分。该调试接口函数的头部设置有第一调试异常指令,核A执行完该第一调试异常指令后将会停止运行;该调试接口函数的尾部还设置有第二调试异常指令,核A执行完该第二调试异常指令后也将停止运行。
[0134] 具体的,所述核A执行完预设事件处理例程后开始停止运行,并在停止运行的过程中向其他核发送停止运行信号,包括:所述核A执行完所述预设事件处理例程后开始执行位于所述调试接口函数头部的所述第一调试异常指令,并在执行第一调试异常指令的过程中向所述其他核发送停止运行信号。需要说明的是,所述核A执行第一调试异常指令要经历一个时间段,所述核A先是开始执行第一调试异常指令,然后在执行完该第一调试异常指令之前的某个时刻,向所述其他核发送停止运行信号,并在向所述其他核发送停止运行信号之后,继续执行该第一调试异常指令,并在执行完该第一调试异常指令后,所述核A停止运行。
[0135] 需要说明的是,同一逻辑分组包括的所有核均位于同一多核处理器,逻辑分组是调试人员根据经验,将具有业务上关联关系的多个核划分到同一逻辑分组。如附图1所示,核A、核B、核C和核D处于同一逻辑分组。则所述核A向其他核发送停止运行信号,具体是:所述核A向核B、核C和核D发送停止运行信号。
[0136] 作为本发明的一个实施例,在目标机包括系统级芯片SOC,且该包括所述核A的多核处理器集成在该SOC的情况下,所述核A向其他核发送停止运行信号,所述停止运行信号用于指示所述其他核停止运行,具体为:所述核A通过所述SOC的硬件交叉触发网络向其他核发送停止运行信号,所述停止运行信号用于指示所述其他核停止运行。需要说明的是,所述核A通过所述SOC的硬件交叉触发网络向其他核发送恢复运行指令时是以广播的形式发送该恢复运行指令的。使用系统级芯片SOC的硬件交叉触发网络进行信号传递的优势在于:相对于使用软件进行信号传输来说,使用硬件进行信号传输,能够提高停止运行信号传输的时效性。
[0137] 容易得知的是,对于无论是非对称多处理(AMP,asymmetric multi-processing)结构下异构多核处理器上运行的多进程或多线程,还是对称多处理(SMP,Symmetric Multi-Processing)结构下同构多核处理器上运行的多进程或多线程,使用本发明实施例提供的技术方案,均可以实现同步调试。
[0138] S302、所述调试装置确定所述核A停止运行后,确定导致所述核A停止运行的原因,在导致所述核A停止运行的原因为所述预设事件之外的原因的情况下,所述调试装置向所述核A发送第一解除停止指令,所述第一解除停止指令用于指示所述核A恢复运行;
[0139] 值得注意的是,步骤S301中,核A执行完预设事件处理例程后开始停止运行,并通知其他核停止运行;步骤S302中,所述调试装置向所述核A发送第一解除停止指令。方案这样设计的目的在于实现同步调试。参见附图1,核A、核B、核C和核D位于同一逻辑分组,核B、核C和核D中的至少一个(比如核B)上运行的代码与核A上运行的代码之间具有数据交互,则在核A调试期间,若核B继续运行,则核B上运行的代码可能因为不能与核A上运行的代码正确进行数据交互从而产生失真,所以在本发明实施例提供的方案中,在核A调试期间,与核A属于同一逻辑分组的其他核停止运行,避免产生失真。进一步的,先让核A与其他核同步停止运行,然后核A再恢复运行以进行调试。且为了实现核A与其他核同步停止运行,方案的设计还充分考虑到了核A发出的停止运行信号传输到其他核的时间,以及核A停止运行的时间,具体是在核A开始停止运行后,在停止运行的期间内向其他核发送停止运行指令,从而实现核A与其他核同步停止运行,进而实现比较精确的同步调试。
[0140] 需要说明的是,目标机的内存中有预设存储空间,该预设存储空间是调试人员预先在目标机的内存中指定的,该预设存储空间的大小和地址均是固定的。该预设存储空间用于存储数据头,初始时,所述数据头包括第一缺省信息和数据体的地址,当然该第一缺省信息可以为空;该数据体包括第二缺省信息,当然该第二缺省信息也可以为空。
[0141] 若核A是在执行完所述预设事件操作例程后停止执行的,则如图6.1所示,数据头包括的依然是第一缺省信息和数据体的位置,且数据体的内容为第二缺省信息。相应的,在核A是在执行完所述预设事件操作例程后停止执行的情况下,S302中所述调试装置确定所述核A停止运行后,确定导致所述核A停止运行的原因,具体包括:调试装置轮询到所述核A停止运行后,通过读取数据头的内容判断导致核A停止运行的原因,由于数据头的内容包括第一缺省信息,所以调试装置根据所述第一缺省信息能够确定导致核A停止运行的原因为预设事件之外的原因。
[0142] 参见附图4,作为本发明的一个实施例,所述调试装置包括调试代理和调试器,该调试装置应用在如图2所述的远程调试系统内,需要说明的是,调试代理和调试器可以位于相同的宿主机,也可以位于不同的宿主机,比如在附图2中,调试代理位于第一宿主机,调试器位于第二宿主机。在所述调试装置包括调试代理和调试器的情况下,如附图4所示,图3中的S302具体包括:
[0143] S402、所述调试代理轮询到所述核A停止运行后,确定导致所述核A停止运行的原因,在导致所述核A停止运行的原因为所述预设事件之外的原因的情况下,所述调试代理将第一消息上报给所述调试器,所述第一消息包括所述核A停止运行以及缺省标识;
[0144] 在核A是在执行完所述预设事件操作例程后停止执行的情况下,结合前面详细解释的内容,可知S402具体包括:调试代理轮询到所述核A停止运行后,会通过读取数据头的内容判断导致核A停止运行的原因,由于数据头的内容包括第一缺省信息,所以调试代理根据所述第一缺省信息能够确定导致核A停止运行的原因为预设事件之外的原因,并会向调试器上报包括核A停止运行和缺省标识的第一消息。
[0145] S403、所述调试器接收所述第一消息后,指示所述调试代理向所述核A发送第一解除停止指令,所述第一解除停止指令用于指示所述核A恢复运行;
[0146] S404、所述调试代理向所述核A发送所述第一解除停止指令。
[0147] 在所述调试装置包括调试代理和调试器的情况下,作为本发明的一个实施例,图3中的S302被细化为具体包括:
[0148] 所述调试代理轮询到所述核A停止运行后,确定导致所述核A停止运行的原因,在导致所述核A停止运行的原因为所述预设事件之外的原因的情况下,所述调试代理向所述核A发送所述第一解除停止指令,所述第一解除停止指令用于指示所述核A恢复运行。
[0149] 具体参见前面对步骤S402的解释,此处不再赘述。需要说明的是,在本发明实施例中,调试代理不再向调试器上报包括核A停止运行以及缺省标识的第一消息,而是在从数据头中读取到第一缺省信息、确定导致核A停止运行的原因为预设事件之外的原因后,调试代理向核A发送所述第一解除停止指令。在本实施例中,调试代理向核A发送第一解除停止指令是由于该调试代理确定导致核A停止运行的原因为预设事件之外的原因,而非像前述实施例那样,因为接收了调试器的指示而向核A发送第一解除停止指令。相对于前述实施例来说,本实施例中调试代理分担了调试器更多的工作,对调试器的功能要求更少,利于精简调试器。
[0150] S303、所述核A接收所述第一解除停止指令并恢复运行后,执行调试信息收集函数以收集所述预设事件的调试信息,并在执行完所述调试信息收集函数之后停止运行;
[0151] 参见附图5,需要说明的是,调试信息收集函数包括位于添加在预设事件末尾的调试接口函数和与所述预设事件相关联的功能函数,与所述预设事件相关联的功能函数位于内核调试桩,该内核调试桩是预先植入在目标机的操作系统内的。
[0152] 正如前面对S301的细化,该调试接口函数的头部设置有第一调试异常指令,尾部设置有第二调试异常指令,在执行该调试接口函数的过程中,会调用位于内核调试桩的与所述预设事件相关联的功能函数。
[0153] 具体的,S303包括:所述核A执行与所述预设事件相关联的功能函数以收集所述预设事件的调试信息,然后执行位于所述该调试接口函数尾部的所述第二调试异常指令。在核A执行完所述第二调试异常指令后,所述核A将停止运行。
[0154] 需要说明的是,所述预设事件的调试信息包括所述预设事件的标识、所述预设事件操作对象的标识。可知,所述预设事件的调试信息的信息量是比较小的,通常仅有100行左右,所以采用本发明实施例提供的技术方案,可以降低目标机处理器处理的数据量,从而提高调试效率。
[0155] S304、所述调试装置确定所述核A停止运行后,确定导致所述核A停止运行的原因,在导致所述核A停止运行的原因为所述预设事件的情况下,所述调试装置获取所述预设事件的调试信息,并根据所述预设事件的调试信息屏蔽所述预设事件操作对象;所述预设事件操作对象为内核模块、进程或线程;
[0156] 所述调试装置向所述核A发送第二解除停止指令,所述第二解除停止指令用于指示所述核A恢复运行;
[0157] 值得注意的是,在所述预设事件为内核模块的卸载函数、进程的删除函数或线程的删除函数的情况下,所述调试装置屏蔽所述预设事件操作对象的目的在于避免后续调试人员再对所述预设事件操作对象进行调试,这也是调试的一种具体形式,也是一种调试方法。
[0158] 需要说明的是,若核A是在执行完所述调试信息收集函数后停止运行的,则如图6.2所示,所述核A会在执行所述调试信息收集函数的过程中,将触发所述核A执行该调试信息收集函数的预设事件的标识写入所述数据头以替代缺省信息,并将预设事件操作对象的标识写入数据体。容易理解的是,在所述预设事件为内核模块的卸载函数、进程的删除函数或线程的删除函数的情况下,所述调试信息收集函数包括预设事件的标识和预设事件操作对象的标识。
[0159] 相应的,在核A是在执行完所述调试信息收集函数后停止执行的情况下,S304中所述调试装置确定所述核A停止运行后,确定导致所述核A停止运行的原因,具体包括:调试装置轮询到所述核A停止运行后,通过读取数据头的内容判断导致核A停止运行的原因,由于数据头的内容包括预设事件的标识,所以调试装置能够根据所述预设事件的标识确定导致核A停止运行的原因为预设事件。
[0160] 需要说明的是,S304中所述调试装置获取所述预设事件的调试信息,并根据所述预设事件的调试信息将预先设置的悬挂断点设置所述预设事件操作对象,具体包括:
[0161] 所述调试装置会根据位于数据头内的数据体的地址,从数据体读取所述预设事件操作对象的标识,然后根据所述预设事件操作对象的标识屏蔽所述预设事件操作对象。
[0162] 结合附图6.1和6.2可知,在本发明实施例提供的技术方案中,在预设事件为内核模块的卸载函数、进程的删除函数或线程的删除函数,且核A是在执行完所述调试信息收集函数后停止运行的情况下,则数据头和数据体的内容如图6.2所示;若核A是因为其他事件而停止运行的,则数据头和数据体的内容如图6.1所示,自然该其他事件排除了执行完所述调试信息收集函数后的情况。也即数据头和数据体仅包括一条消息,调试装置从数据头中获取信息时,不需要分辨到底哪一条才是目标信息。且由于数据头和数据体仅包括一条消息,则位于目标机内存的所述预设存储空间的大小是固定的,且该预设存储空间占用的空间非常小,不会过多的占用目标机的存储资源,则提高信息获取的效率。
[0163] 需要明确的是,在所述预设事件为内核模块的卸载函数的情况下,所述预设事件操作对象为内核模块;在所述预设事件为进程的删除函数的情况下,所述预设事件操作对象为进程;在所述预设事件为线程的删除函数的情况下,所述预设事件操作对象为线程。其中,所述内核模块可以为动态补丁热补丁、动态库等。
[0164] 参见附图4,作为本发明的另一个实施例,所述调试装置包括调试代理和调试器,该调试装置应用在如图2所述的远程调试系统内,需要说明的是,调试代理和调试器可以位于相同的宿主机,也可以位于不同的宿主机,比如在附图2中,调试代理位于第一宿主机,调试器位于第二宿主机。在所述调试装置包括调试代理和调试器的情况下,如附图4所示,图3中的S304具体包括:
[0165] S406、所述调试代理确定所述核A停止运行后,确定导致所述核A停止运行原因,在导致所述核A停止运行原因为所述预设事件的情况下,所述调试代理将第二消息上报给所述调试器,所述第二消息包括所述核A停止运行以及所述预设事件的标识;
[0166] 需要说明的是,在核A是在执行完所述调试信息收集函数后停止执行的情况下,S406具体包括:调试代理轮询到所述核A停止运行后,会通过读取数据头的内容判断导致核A停止运行的原因,由于数据头的内容包括预设事件的标识,所以调试代理能够根据所述预设事件的标识确定导致核A停止运行的原因为所述预设事件,则所述调试代理向调试器上报包括核A停止运行和预设事件的标识的第二消息。
[0167] S407、所述调试器接收所述第二消息后,获取所述预设事件的调试信息,并根据所述预设事件的调试信息屏蔽所述预设事件操作对象;
[0168] 所述调试器指示所述调试代理向所述核A发送第二解除停止指令,所述第二解除停止指令用于指示所述核A恢复运行;
[0169] 值得注意的是,所述调试器获取所述预设事件的调试信息,并根据所述预设事件的调试信息屏蔽所述预设事件操作对象,具体包括:所述调试器根据位于数据头内的数据体的地址,从数据体读取所述预设事件操作对象的标识,然后根据所述预设事件操作对象的标识屏蔽所述预设事件操作对象。
[0170] 在本发明实施例中,“所述调试器指示所述调试代理发送第二解除停止指令”发生在“所述调试器屏蔽所述预设事件操作对象”之后。作为本发明的另一个实施例,“所述调试器指示所述调试代理发送第二解除停止指令”还可以发生在“所述调试器获取所述预设事件操作对象的标识”之后以及“所述调试器屏蔽所述预设事件操作对象”之前的任一时刻。
[0171] S408、所述调试代理向所述核A发送第二解除停止指令。
[0172] S305、所述核A接收所述第二解除停止指令并恢复运行后,向所述其他核发送恢复运行指令,所述恢复运行指令用于通知所述其他核恢复运行。
[0173] 正如前面对S301的解释,在目标机包括系统级芯片SOC,且该包括所述核A的多核处理器集成在该SOC的情况下,所述核A向其他核发送恢复运行指令,所述恢复运行指令用于通知所述其他核恢复运行,具体为:所述核A通过所述SOC的硬件交叉触发网络向所述其他核发送恢复运行指令,所述恢复运行指令用于通知所述其他核恢复运行。需要说明的是,所述核A通过所述SOC的硬件交叉触发网络向其他核发送恢复运行指令时是以广播的形式发送该恢复运行指令的。类似的,使用SOC的硬件交叉触发网络进行信号传递的优势在于:能够提高恢复运行指令传输的时效性。
[0174] 由上可知,采用本发明实施例提供的调试方法,通过在运行在核A上的预设事件的末尾添加调试接口函数,该调试接口函数通过调用内核调试桩中与该预设事件的类型相关联的功能函数,获取该预设事件的调试信息;调试器根据该预设事件的调试信息屏蔽该预设事件操作对象。因为在本发明实施例中,该预设事件为内核态代码的处理函数或用户态代码的处理函数,所以本发明实施例提供的技术方案实现了将内核态代码和用户态代码在同一个调试平台实现屏蔽。
[0175] 实施例二
[0176] 参见附图7,本发明实施例包括一种多核处理器,应用于实施例一所述的调试方法中,且该多核处理器部署在如图1所示的远程调试系统的目标机内,如图7所示,该多核处理器包括核A、输入端口以及其他核,该其他核包括核B、核C和核D,其中,核B、核C和核D与核A均位于所述多核处理器、且属于同一逻辑分组。
[0177] 所述核A用于在执行完预设事件处理例程后开始停止运行,并在停止运行的过程中向其他核发送停止运行信号,所述停止运行信号用于指示所述其他核停止运行,所述预设事件为内核模块的卸载函数、进程的删除函数或线程的删除函数;
[0178] 如附图5所示,在本发明实施例中,预设事件的末尾添加了调试接口函数,该调试接口函数是位于预设事件外部的,不是预设事件的一部分。该调试接口函数的头部设置有第一调试异常指令,核A执行完该第一调试异常指令后将会停止运行。所以,所述核A具体用于在执行完所述预设事件处理例程后开始执行位于所述调试接口函数头部的所述第一调试异常指令,并在执行所述第一调试异常指令的过程中向所述其他核发送停止运行信号。
[0179] 作为本发明的一个实施例,在目标机包括系统级芯片SOC,且该包括所述核A的多核处理器集成在该SOC的情况下,则所述核A具体用于通过所述SOC的硬件交叉触发网络向其他核发送停止运行信号,所述停止运行信号用于指示所述其他核停止运行。需要说明的是,所述核A通过所述SOC的硬件交叉触发网络向其他核发送恢复运行指令时是以广播的形式发送该恢复运行指令的。使用系统级芯片SOC的硬件交叉触发网络进行信号传递的优势在于:提高停止运行信号传输的时效性。
[0180] 容易得知的是,对于无论是非对称多处理(AMP,asymmetric multi-processing)结构下异构多核处理器上运行的多进程或多线程,还是对称多处理(SMP,Symmetric Multi-Processing)结构下同构多核处理器上运行的多进程或多线程,使用本发明实施例提供的多核处理器,均可以实现同步调试。
[0181] 参见附图7,核A、核B、核C和核D位于同一逻辑分组,核B、核C和核D中的至少一个(比如核B)上运行的代码与核A上运行的代码之间具有数据交互,则在核A调试期间,若核B继续运行,则核B上运行的代码可能因为不能与核A上运行的代码正确进行数据交互从而产生失真,所以在本发明实施例提供的方案中,在核A调试期间,与核A属于同一逻辑分组的其他核停止运行,避免产生失真。进一步的,先让核A与其他核同步停止运行,然后核A再恢复运行以进行调试。且为了实现核A与其他核同步停止运行,方案的设计还充分考虑到了核A发出的停止运行信号传输到其他核的时间,以及核A停止运行的时间,具体是在核A开始停止运行后,在停止运行的期间内向其他核发送停止运行指令,从而实现核A与其他核同步停止运行,进而实现比较精确的同步调试。
[0182] 所述输入端口用于接收第一解除停止指令,并将所述第一解除停止指令转送给所述核A,所述第一解除停止指令是所述远程调试系统中的调试装置在确定所述核A停止运行且导致所述核A停止运行的原因为所述预设事件之外的原因后发送的;
[0183] 所述核A还用于在接收第一解除停止指令并恢复运行后,执行调试信息收集函数以收集所述预设事件的调试信息,并在执行完所述调试信息收集函数之后停止运行;
[0184] 参见附图5,需要说明的是,调试信息收集函数包括位于添加在预设事件末尾的调试接口函数和与所述预设事件相关联的功能函数,与所述预设事件相关联的功能函数位于内核调试桩,该内核调试桩是预先植入在目标机的操作系统内的。
[0185] 该调试接口函数的尾部设置有第二调试异常指令,在执行该调试接口函数的过程中,会调用位于内核调试桩的与所述预设事件相关联的功能函数。
[0186] 需要说明的是,所述核A具体用于执行与所述预设事件相关联的功能函数以收集所述预设事件的调试信息,然后执行位于所述该调试接口函数尾部的所述第二调试异常指令。在核A执行完所述第二调试异常指令后,所述核A将停止运行。
[0187] 需要说明的是,所述预设事件的调试信息包括所述预设事件的标识和所述预设事件操作对象的标识。可知,所述预设事件的调试信息的信息量是比较小的,通常仅有100行左右,所以采用本发明实施例提供的技术方案,可以降低目标机处理器处理的数据量,从而提高调试效率。
[0188] 所述输入端口还用于接收第二解除停止指令,并将所述第二解除停止指令转送给所述核A,所述第二解除停止指令是所述调试装置根据所述预设事件的调试信息屏蔽所述预设事件操作对象之后发送的,所述预设事件操作对象为内核模块、进程或线程;
[0189] 需要明确的是,在所述预设事件为内核模块的卸载函数的情况下,所述预设事件操作对象为内核模块;在所述预设事件为进程的删除函数的情况下,所述预设事件操作对象为进程;在所述预设事件为线程的删除函数的情况下,所述预设事件操作对象为线程。其中,所述内核模块可以为动态补丁、热补丁、动态库等。
[0190] 所述核A还用于在接收第二解除停止指令并恢复运行后,向所述其他核发送恢复运行指令,所述恢复运行指令用于通知所述其他核恢复运行。
[0191] 如前面所述,在所述目标机包括系统级芯片SOC,且该包括所述核A的多核处理器集成在该SOC的情况下,所述核A具体用于通过所述SOC的硬件交叉触发网络向所述其他核发送恢复运行指令,所述恢复运行指令用于通知所述其他核恢复运行。需要说明的是,所述核A通过所述SOC的硬件交叉触发网络向其他核发送恢复运行指令时是以广播的形式发送该恢复运行指令的。类似的,使用SOC的硬件交叉触发网络进行信号传递的优势在于:能够提高恢复运行指令传输的时效性。
[0192] 由上可知,采用本发明实施例提供的多核处理器,通过在运行在核A上的预设事件的末尾添加调试接口函数,该调试接口函数通过调用内核调试桩中与该预设事件的类型相关联的功能函数,获取该预设事件的调试信息,使得调试装置根据该预设事件的调试信息屏蔽该预设事件操作对象。因为在本发明实施例中,该预设事件为内核模块的卸载函数、进程的删除函数或线程的删除函数,预设事件操作对象为内核模块、进程或线程,而内核模块为内核态代码,进程和线程为用户态代码,所以采用本发明实施例提供的多核处理器,能够实现了将内核态代码和用户态代码在同一个调试平台实现屏蔽。
[0193] 实施例三
[0194] 参见附图8,为本发明实施例包括一种调试装置,应用于实施例一所述的调试方法中,且该调试装置部署在如图1所示的远程调试系统的宿主机内,如图8所示,该调试装置包括调试单元和接收单元。
[0195] 所述接收单元用于接收用于指示核A停止运行的消息,并将所述用于指示核A停止运行的消息转送给所述调试装置;其中,位于所述远程调试系统的目标机包括多核处理器,所述多核处理器包括所述核A;
[0196] 所述调试单元用于在确定所述核A停止运行后,确定导致所述核A停止运行的原因;
[0197] 在导致所述核A停止运行的原因为预设事件的情况下,所述调试单元还用于获取所述预设事件的调试信息,并根据所述预设事件的调试信息屏蔽所述预设事件操作对象;所述预设事件为内核模块的卸载函数、进程的删除函数或线程的删除函数函数或用户态代码的处理函数;所述预设事件操作对象为内核模块、进程或线程;
[0198] 所述调试单元还用于指示所述核A恢复运行。
[0199] 需要说明的是,在所述预设事件为内核模块的卸载函数的情况下,所述预设事件操作对象为内核模块;在所述预设事件为进程的删除函数的情况下,所述预设事件操作对象为进程;在所述预设事件为线程的删除函数函数的情况下,所述预设事件操作对象为线程。其中,所述内核模块可以为动态补丁、热补丁、动态库等。
[0200] 值得注意的是,目标机的内存中有预设存储空间,该预设存储空间是调试人员预先在目标机的内存中指定的,该预设存储空间的大小和地址均是固定的。该预设存储空间用于存储数据头,初始时,所述数据头包括第一缺省信息和数据体的地址,当然该第一缺省信息可以为空;该数据体包括第二缺省信息,当然该第二缺省信息也可以为空。
[0201] 在预设事件为内核模块的卸载函数、进程的删除函数或线程的删除函数,且核A是在执行完所述调试信息收集函数后停止运行的情况下,则如图6.2所示,所述核A会在执行所述调试信息收集函数的过程中,将触发所述核A执行该调试信息收集函数的预设事件的标识写入所述数据头以替代缺省信息,并将预设事件操作对象的标识写入数据体。
[0202] 则在导致所述核A停止运行的原因为预设事件的情况下,所述调试单元具体用于在确定所述核A停止运行后,通过读取数据头的内容判断导致核A停止运行的原因,由于数据头的内容包括预设事件的标识,所以调试单元能够根据所述预设事件的标识确定导致核A停止运行的原因为预设事件。
[0203] 进一步的,所述调试单元具体用于根据位于数据头内的数据体的地址,从数据体读取所述预设事件操作对象的标识,然后根据所述预设事件操作对象的标识屏蔽所述预设事件操作对象
[0204] 作为本发明的另一个实施例,如附图8所示,所述调试单元包括调试代理和调试器,需要说明的是,调试代理和调试器可以位于同一宿主机,也可以位于不同的宿主机,参见附图2所示的远程调试系统,调试代理和调试器分别位于不同的宿主机,其中,调试代理位于第一宿主机,调试器位于第二宿主机。
[0205] 在所述调试单元包括调试代理和调试器,且在导致所述核A停止运行的原因为预设事件的情况下:
[0206] 所述调试代理具体用于在确定所述核A停止运行后,确定导致所述核A停止运行原因,在导致所述核A停止运行原因为所述预设事件的情况下,将第二消息上报给所述调试器,所述第二消息包括所述核A停止运行以及所述预设事件的标识;
[0207] 进一步的,调试代理具体用于在轮询到所述核A停止运行后,通过读取数据头的内容中包括预设事件的标识,确定导致核A停止运行的原因为所述预设事件,向调试器上报包括核A停止运行和预设事件的标识的第二消息。
[0208] 所述调试器具体用于接收所述第二消息后,获取所述预设事件的调试信息,并根据所述预设事件的调试信息屏蔽所述预设事件操作对象。
[0209] 进一步的,所述调试器具体用于根据所述第二消息中的所述预设事件的标识,从数据体读取所述预设事件操作对象的标识或所述预设事件操作对象的标识,并根据所述预设事件的调试信息屏蔽所述预设事件操作对象。
[0210] 所述调试器具体用于指示所述调试代理向所述核A发送第二解除停止指令,所述第二解除停止指令用于指示所述核A恢复运行。
[0211] 需要说明的是,在导致所述核A停止运行的原因为预设事件之外的原因的情况下,本发明实施例提供的调试装置中的所述调试单元还用于指示所述核A恢复运行以收集所述预设事件的调试信息。
[0212] 具体的,在预设事件为内核模块的卸载函数、进程的删除函数或线程的删除函数,且导致所述核A停止运行的原因为预设事件之外的原因的情况下,所述调试单元具体用于在确定所述核A停止运行后,通过读取数据头的内容判断导致核A停止运行的原因,由于数据头的内容包括所述第一缺省信息,所以调试单元能够根据所述第一缺省信息确定导致核A停止运行的原因为预设事件之外的原因。
[0213] 作为本发明的另一个实施例,如附图8所示,在所述调试单元包括调试代理和调试器,且在导致所述核A停止运行的原因为预设事件之外的原因的情况下:
[0214] 所述调试代理具体用于在确定所述核A停止运行后,确定导致所述核A停止运行的原因,在导致所述核A停止运行的原因为所述预设事件之外的原因的情况下,所述调试代理具体用于向所述核A发送第一解除停止指令,所述第一解除停止指令用于指示所述核A恢复运行以收集所述预设事件的调试信息。
[0215] 结合前面的解释可知,调试代理具体用于在轮询到所述核A停止运行后,读取数据头的内容包括第一缺省信息,根据所述第一缺省信息能够确定导致核A停止运行的原因为预设事件之外的原因。
[0216] 作为本发明的再一个实施例,在所述调试单元包括调试代理和调试器,且在导致所述核A停止运行的原因为预设事件之外的原因的情况下:
[0217] 所述调试代理具体用于在轮询到所述核A停止运行后,确定导致所述核A停止运行的原因,在导致所述核A停止运行的原因为所述预设事件之外的原因的情况下,将第一消息上报给所述调试器,所述第一消息包括所述核A停止运行以及缺省标识;
[0218] 结合前面的解释可知,调试代理具体用于在轮询到所述核A停止运行后,读取数据头的内容包括第一缺省信息,根据所述第一缺省信息能够确定导致核A停止运行的原因为预设事件之外的原因,将包括所述核A停止运行以及缺省标识上报给所述调试器。
[0219] 所述调试器具体用于在接收所述第一消息后,指示所述调试代理向所述核A发送第一解除停止指令,所述第一解除停止指令用于指示所述核A恢复运行;
[0220] 所述调试代理具体用于向所述核A发送所述第一解除停止指令。
[0221] 由上可知,采用本发明实施例提供的调试装置,在确定目标机侧多核处理器的核A停止运行后,且在确定导致核A停止运行的原因为预设事件的情况下,该调试装置从目标机侧获取预设事件的调试信息,并根据预设事件的调试信息屏蔽所述预设事件操作对象,从而实现对预设事件操作对象的调试。因为在本发明实施例中,该预设事件为内核模块的卸载函数、进程的删除函数或线程的删除函数,预设事件操作对象为内核模块、进程或线程,而内核模块为内核态代码,进程和线程为用户态代码,所以采用本发明实施例提供的调试装置,不仅能够实现了对内核态代码的屏蔽,还能够实现对用户态代码的屏蔽。
[0222] 实施例四
[0223] 参见附图9,为本发明实施例提供的一种调试设备500的结构框图,该调试设备500应用于实施例一所示的调试方法,该调试设备500应用在如图1所示的远程调试系统中,且调试设备900为图1所示的远程调试系统中宿主机的一种具体实现方式。具体的,如图9所示,所述调试设备500包括:至少一个处理器501,至少一个网络接口504或者其他用户接口503,存储器505,至少一个通信总线502。所述通信总线502用于实现这些组件之间的连接通信。该调试设备500可选的包含用户接口503,包括显示器(例如,触摸屏、LCD、CTR、全息成像(Holographic)或者投影(Projector)等),键盘或者点击设备(例如,鼠标轨迹球(trackball),触感板或者触摸屏等)。
[0224] 存储器505可以包括只读存储器随机存取存储器,并向处理器提供指令和数据。存储器505的一部分还可以包括非易失性随机存取存储器(NVRAM)。
[0225] 在一些实施例中,存储器505存储了如下的元素,可执行模块或者数据结构,或者他们的子集,或者他们的扩展集:
[0226] 操作系统5051,包含各种系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务;
[0227] 应用程序模块5052,包含各种应用程序,例如桌面(launcher)、媒体播放器(Media Player)、浏览器(Browser)等,用于实现各种应用业务。
[0228] 在本发明实施例中,处理器501用于在确定所述核A停止运行后,确定导致所述核A停止运行的原因;位于所述远程调试系统的目标机包括多核处理器,所述多核处理器包括所述核A;
[0229] 值得注意的是,目标机侧的内存中有预设存储空间,该预设存储空间是调试人员预先在目标机的内存中指定的,该预设存储空间的大小和地址均是固定的。该预设存储空间用于存储数据头,初始时,所述数据头包括第一缺省信息和数据体的地址,当然该第一缺省信息可以为空;该数据体包括第二缺省信息,当然该第二缺省信息也可以为空。
[0230] 在预设事件为内核模块的卸载函数、进程的删除函数或线程的删除函数,且核A是在执行完所述调试信息收集函数后停止运行的情况下,则如图6.2所示,所述核A会在执行所述调试信息收集函数的过程中,将触发所述核A执行该调试信息收集函数的预设事件的标识写入所述数据头以替代缺省信息,将预设事件操作对象的标识写入数据体。若核A是因为其他原因停止运行的,则如图6.1所示,数据头包括的依然是第一缺省信息和数据体的地址,数据体包括的依然是第二缺省信息。
[0231] 则处理器901具体用于在确定所述核A停止运行后,通过读取数据头的内容判断导致核A停止运行的原因,若数据头包括预设事件的标识,则确定导致所述核A停止运行的原因为预设事件;若数据头包括第一缺省信息,则确定导致所述核A停止运行的原因为预设事件之外的原因。
[0232] 在导致所述核A停止运行的原因为预设事件的情况下,处理器501用于获取所述预设事件的调试信息,并根据所述预设事件的调试信息屏蔽所述预设事件操作对象;所述预设事件为内核模块的卸载函数、进程的删除函数或线程的删除函数,所述预设事件操作对象为内核模块、进程或线程;
[0233] 通过本实施例中前面的描述,能够确定所述预设事件的调试信息包括所述预设事件的标识和预设事件操作对象的标识。
[0234] 需要说明的是,在所述预设事件为内核模块的卸载函数的情况下,所述预设事件操作对象为内核模块;在所述预设事件为进程的删除函数的情况下,所述预设事件操作对象为进程;在所述预设事件为线程的删除函数的情况下,所述预设事件操作对象为线程。
[0235] 需要说明的是,在预设事件为内核模块的卸载函数、进程的删除函数或线程的删除函数,且导致所述核A停止运行的原因为预设事件的情况下,处理器901具体用于根据位于数据头内的数据体的地址,从数据体读取所述预设事件操作对象的标识,然后根据所述预设事件操作对象的标识屏蔽所述预设事件操作对象。
[0236] 所述存储器505用于存储所述预设事件的调试信息;
[0237] 所述处理器501还用于指示所述核A恢复运行。
[0238] 作为本发明的另一个实施例,在导致所述核A停止运行的原因为预设事件之外的原因的情况下,处理器501还用于指示所述核A恢复运行以收集所述预设事件的调试信息。
[0239] 由上可知,采用本发明实施例提供的调试设备,在确定目标机侧多核处理器的核A停止运行后,且在确定导致核A停止运行的原因为预设事件的情况下,该调试设备从目标机侧获取预设事件的调试信息,并根据预设事件的调试信息屏蔽所述预设事件操作对象。因为在本发明实施例中,该预设事件为内核模块的卸载函数、进程的删除函数或线程的删除函数,预设事件操作对象为内核模块、进程或线程,而内核模块为内核态代码,进程和线程为用户态代码,所以采用本发明实施例提供的调试设备,不仅能够实现了对内核态代码的屏蔽,还能够实现对用户态代码的屏蔽。
[0240] 其中上述实施例之间可以相互参见,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置、设备和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0241] 在本申请所提供的几个实施例中,应该理解到,所揭露的方法、装置和设备,可以通过其它的方式实现。本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。
专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
[0242] 应当理解的是,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0243] 以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈