CN102096629A - 经过性断点设置、调试方法和装置 - Google Patents
经过性断点设置、调试方法和装置 Download PDFInfo
- Publication number
- CN102096629A CN102096629A CN2009102423739A CN200910242373A CN102096629A CN 102096629 A CN102096629 A CN 102096629A CN 2009102423739 A CN2009102423739 A CN 2009102423739A CN 200910242373 A CN200910242373 A CN 200910242373A CN 102096629 A CN102096629 A CN 102096629A
- Authority
- CN
- China
- Prior art keywords
- instruction
- breakpoint
- copy
- place
- breakpoint place
- 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.)
- Granted
Links
Images
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
- G06F11/3624—Software debugging by performing operations on the source code, e.g. via a compiler
-
- 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
- G06F11/3636—Software debugging by tracing the execution of the program
Abstract
公开了经过性断点设置、调试方法和装置。经过性断点设置方法包括:接收断点设置命令,根据断点设置命令确定源程序代码中的断点处指令,在断点处指令和断点处指令的上一条指令中存在一条相对跳转指令时,设置指令副本,并将源程序代码中的断点处指令设置为第一异常指令;设置指令副本包括:在指令副本中存储所述相对跳转指令和相对跳转指令的下一条指令,指令副本中的相对跳转指令的跳转相对偏移量根据指令副本中的绝对跳转指令的存储位置设置,绝对跳转指令的跳转绝对偏移量为相对跳转指令的原跳转相对偏移量,将指令副本中的相对跳转指令后的第二条有效指令设置为第二异常指令,将绝对跳转指令的下一条指令设置为无效指令。
Description
技术领域
本发明涉及计算机技术领域,具体涉及经过性断点设置调试技术以及基于经过性断点的程序调试技术。
背景技术
由于非经过性断点会导致运行程序中断,而经过性断点不但不会中断程序的正常运行,而且,还可以在断点触发时记录相关信息,因此,在程序调试技术中通常会采用经过性断点。
现有的经过性断点设置方法和程序调试方法主要包括:
在内存空间中备份所有的源程序代码,将源程序代码中断点处指令修改为Break,将备份代码中的该断点处指令的下一条指令修改为Break。这样,在源程序代码执行到Break后,跳入备份代码引发第二次Break,之后,跳回到源程序代码并继续执行源程序代码中Break之后的程序代码。或者,将源程序代码中断点处指令修改为Break,在源程序代码执行到Break后,使用高级语言手工解析该断点处指令,之后,使用PC++跳入到源程序代码中的Break的下一条指令,继续执行源程序代码。
在实现本发明的过程中,发明人发现现有的方案需要占用较多的内存空间;需要手工解析,程序调试效率低。
发明内容
本发明实施方式提供的经过性断点设置、调试方法和装置,可在尽可能少的占用内存空间的同时,提高程序调试效率。
本发明实施方式提供的经过性断点设置方法,包括:
接收断点设置命令;
根据所述断点设置命令确定源程序代码中的断点处指令;
在所述断点处指令和所述断点处指令的上一条指令中存在一条相对跳转指令时,为所述相对跳转指令和所述相对跳转指令的下一条指令设置指令副本,并将所述源程序代码中的断点处指令设置为第一异常指令;
所述设置指令副本包括:在指令副本中存储所述相对跳转指令和所述相对跳转指令的下一条指令,所述指令副本中的相对跳转指令的跳转相对偏移量根据所述指令副本中的绝对跳转指令的存储位置设置,所述绝对跳转指令的跳转绝对偏移量为所述相对跳转指令的原跳转相对偏移量,将所述指令副本中的相对跳转指令后的第二条有效指令设置为第二异常指令,将所述绝对跳转指令的下一条指令设置为无效指令。
本发明实施方式提供的一种经过性断点调试方法,包括:
判断引发断点异常的异常指令;
如果所述断点异常由第一异常指令引发,则获取并输出所述断点异常的现场信息,在所述断点异常发生在延迟槽中时,指示执行指令副本中的断点处指令的上一条指令,在所述断点异常没有发生在延迟槽中时,指示执行指令副本中的断点处指令;
如果所述断点异常由第二异常指令引发,则在所述断点异常发生在延迟槽中时,指示执行所述源程序代码中的断点处指令的下一条指令,在所述断点异常没有发生在延迟槽中时,指示执行所述源程序代码中的断点处指令后的第二条指令。
本发明实施方式提供的一种经过性断点设置装置,包括:
接收模块,用于接收断点设置命令;
确定模块,用于根据所述断点设置命令确定源程序代码中的断点处指令;
第一设置模块,用于在所述断点处指令和所述断点处指令的上一条指令中存在一条相对跳转指令时,为所述相对跳转指令和所述相对跳转指令的下一条指令设置指令副本,并将所述源程序代码中的断点处指令设置为第一异常指令;
所述设置指令副本包括:在指令副本中存储所述相对跳转指令和所述相对跳转指令的下一条指令,所述指令副本中的相对跳转指令的跳转相对偏移量根据所述指令副本中的绝对跳转指令的存储位置设置,所述绝对跳转指令的跳转绝对偏移量为所述相对跳转指令的原跳转相对偏移量,将所述指令副本中的相对跳转指令后的第二条有效指令设置为第二异常指令,将所述绝对跳转指令的下一条指令设置为无效指令。
本发明实施方式提供的一种经过性断点调试装置,包括:
判断模块,判断引发断点异常的异常指令;
第一异常处理模块,用于在所述判断模块判断出所述断点异常由第一异常指令引发,则获取并输出所述断点异常的现场信息,在所述断点异常发生在延迟槽中时,指示执行指令副本中的断点处指令的上一条指令,在所述断点异常没有发生在延迟槽中时,指示执行指令副本中的断点处指令;
第二异常处理模块,用于在所述判断模块判断出所述断点异常由第二异常指令引发,则在所述断点异常发生在延迟槽中时,指示执行所述源程序代码中的断点处指令的下一条指令,在所述断点异常没有发生在延迟槽中时,指示执行所述源程序代码中的断点处指令后的第二条指令。
本发明实施方式提供的一种程序调试设备,包括:
经过性断点设置装置,用于接收断点设置命令,根据所述断点设置命令确定源程序代码中的断点处指令,在所述断点处指令和所述断点处指令的上一条指令中存在一条相对跳转指令时,为所述相对跳转指令和所述相对跳转指令的下一条指令设置指令副本,并将所述源程序代码中的断点处指令设置为第一异常指令;所述设置指令副本包括:在指令副本中存储所述相对跳转指令和所述相对跳转指令的下一条指令,所述指令副本中的相对跳转指令的跳转相对偏移量根据所述指令副本中的绝对跳转指令的存储位置设置,所述绝对跳转指令的跳转绝对偏移量为所述相对跳转指令的原跳转相对偏移量,将所述指令副本中的相对跳转指令后的第二条有效指令设置为第二异常指令,将所述绝对跳转指令的下一条指令设置为无效指令;
经过性断点调试装置,用于判断引发断点异常的异常指令;如果所述断点异常由第一异常指令引发,则获取并输出所述断点异常的现场信息,在所述断点异常发生在延迟槽中时,指示执行指令副本中的断点处指令的上一条指令,在所述断点异常没有发生在延迟槽中时,指示执行指令副本中的断点处指令;如果所述断点异常由第二异常指令引发,则在所述断点异常发生在延迟槽中时,指示执行所述源程序代码中的断点处指令的下一条指令,在所述断点异常没有发生在延迟槽中时,指示执行所述源程序代码中的断点处指令后的第二条指令。
通过上述技术方案的描述可知,通过对断点处指令和该指令的上一条指令进行判断,可以针对相对跳转指令选取有关联的指令来设置指令副本,通过设置无效指令和绝对跳转指令,可以在尽可能的不改变指令副本中的相对跳转指令的情况下实现经过性断点的设置;从而可以减少副本占用的内存空间,并减少了经过性断点设置过程带来的人为错误;通过对引发断点异常的异常指令进行判断,并针对断点异常是否发生在延迟槽中进行不同的指定处理,避免了手工解析等现象,降低了经过性断点调试工作量;从而通过上述技术方案节约了内存空间,提高了程序调试效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例一的经过性断点设置方法流程图;
图2是本发明实施例二的经过性断点调试方法流程图;
图3是本发明实施例三的经过性断点调试方法流程图;
图3A是本发明实施例三的内存空间示意图;
图4是本发明实施例四的经过性断点设置装置示意图;
图5是本发明实施例五的经过性断点调试装置示意图;
图6是本发明实施例六的程序调试装置示意图;
图7是本发明实施例七的程序调试系统示意图。
具体实施方式
下面通过实施例对本发明的具体实现过程进行例举说明。显然,下面所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一、经过性断点设置方法。该方法的流程如附图1所示。
图1中,S100、接收断点设置命令。
断点设置命令中可以包括断点位置信息,而不包括断点属性信息;断点设置命令中也可以既包括断点位置信息,又包括断点属性信息。这里的断点位置信息用于指示源程序代码中的哪条指令为断点指令,该断点位置信息可以包括指令的名称、指令所在行数、以及指令存储地址中的一个或多个。这里的断点属性信息可以包括:获取现场信息条件、输出现场信息条件、断点引发异常后是否挂起任务信息和现场信息的输出路径信息中的任意一个或多个。获取现场信息条件用于决定是否获取现场信息。输出现场信息条件用于决定是否输出获取的现场信息。断点引发异常后是否挂起任务信息用于在断点异常发生后决定是否将任务挂起。现场信息的输出路径信息用于指示获取的现场信息输出的目的地址。上述获取现场信息条件或者输出现场信息条件可以包括:断点触发的核信息、跳过的断点信息和断点与任务绑定信息中的任意一个或多个。断点触发的核信息、跳过的断点信息和断点与任务绑定信息的具体应用在后续实施例中进行了例举说明。
需要说明的是,上述断点设置命令还可以包括其它信息,断点位置信息可以通过其它形式来表述,断点属性信息可以包括其它与断点相关的属性信息,获取现场信息条件或者输出现场信息条件也可以包括其它与现场信息获取或现场信息输出相关的信息。本实施例不限制断点设置命令、断点位置信息、断点属性信息等具体包括的内容、具体的表述形式、以及断点设置命令所采用的具体协议等等。
S110、根据接收的断点设置命令确定源程序代码中的断点处指令。
根据断点设置命令确定源程序代码中的断点处指令的具体实现方式有多种,一个具体的例子为:根据断点设置命令中的断点位置信息确定源程序代码中的断点指令,例如,根据断点位置信息中的指令名称和指令所在行数确定源程序代码中的断点处指令;再例如,根据断点位置信息中的指令存储地址查找存储位置,该存储位置中的指令即为断点处指令。本实施例也可以采用现有的其它方式来确定源程序代码中的断点处指令,本实施例不限制根据断点设置命令确定源程序代码中的断点处指令的具体实现过程。
S120、对断点处指令和断点处指令的上一条指令进行判断,在判断出断点处指令和断点处指令的上一条指令中存在一条相对跳转指令的情况下,为相对跳转指令和相对跳转指令的下一条指令设置指令副本,并将源程序代码中的断点处指令设置为第一异常指令。上述相对跳转指令可以为断点处指令,也可以为断点处指令的上一条指令。
在S120中,为相对跳转指令和相对跳转指令的下一条指令设置指令副本的操作具体包括:在指令副本中存储相对跳转指令和相对跳转指令的下一条指令,指令副本中的相对跳转指令的跳转相对偏移量根据指令副本中的绝对跳转指令的存储位置设置,指令副本中的绝对跳转指令的跳转绝对偏移量为相对跳转指令的原跳转相对偏移量,将指令副本中的相对跳转指令后的第二条有效指令设置为第二异常指令,将绝对跳转指令的下一条指令设置为无效指令。在指令副本中的相对跳转指令与第二异常指令之间不存在无效指令的情况下,相对跳转指令后的第二条有效指令即为相对跳转指令后的第二条指令。需要说明的是,断点处指令、相对跳转指令和相对跳转指令的下一条指令的存储地址可以是连续的,也可以是不连续的,即两条指令之间存在无效指令。
源程序代码中的第一异常指令用于跳入指令副本,以执行指令副本中的指令,而指令副本中的第二异常指令和绝对跳转指令均用于返回源程序代码,以继续执行源程序代码中的指令。例如,第二异常指令用于返回源程序代码中的断点处指令的下一条指令或者断点处指令后的第二条指令,绝对跳转指令用于返回源程序代码中为相对跳转指令的断点处指令或断点处指令的上一条指令的跳转相对偏移量所指向的指令。
S120中为相对跳转指令和相对跳转指令的下一条指令设置指令副本的具体过程可以包括多种,相应的,设置出的指令副本也包括多种不同的形式,下面以几个具体的例子对设置指令副本的过程和设置出的指令副本进行例举说明。
例1、只要判断出断点处指令和断点处指令的上一条指令中存在一条相对跳转指令,则在指令副本中存储断点处指令的上一条指令、断点处指令和断点处指令的下一条指令;断点处指令的上一条指令、断点处指令和断点处指令的下一条指令可以按上述描述的指令先后顺序连续存储,当然,断点处指令的上一条指令和断点处指令之间、及断点处指令和断点处指令的下一条指令之间也可以插入无效指令。指令副本中的相对跳转指令的跳转相对偏移量根据指令副本中的绝对跳转指令的存储位置设置,指令副本中的绝对跳转指令的跳转绝对偏移量为相对跳转指令的原跳转相对偏移量,将指令副本中的断点处指令后的第二条有效指令设置为第二异常指令,将绝对跳转指令的下一条指令设置为无效指令。
也就是说,在断点处指令和断点处指令的上一条指令中只要存在相对跳转指令,则利用例1设置的指令副本可以包括:源程序代码中的断点处指令的上一条指令、源程序代码中的断点处指令、源程序代码中的断点处指令的下一条指令、第二异常指令、绝对跳转指令和无效指令。需要说明的是,指令副本中的相对跳转指令的跳转相对偏移量与源程序代码中的相对跳转指令的跳转相对偏移量是不同的。
例2、在判断出断点处指令的上一条指令为相对跳转指令的情况下,在指令副本中存储断点处指令的上一条指令和断点处指令,断点处指令的上一条指令和断点处指令可以按上述描述的指令先后顺序连续存储,当然,断点处指令的上一条指令和断点处指令之间也可以插入无效指令。指令副本中的断点处指令的上一条指令的跳转相对偏移量根据指令副本中的绝对跳转指令的存储位置设置,指令副本中的绝对跳转指令的跳转绝对偏移量为源程序代码中断点处指令的上一条指令的跳转相对偏移量,将指令副本中的断点处指令的下一条有效指令(即相对跳转指令后的第二条有效指令)设置为第二异常指令,将绝对跳转指令的下一条指令设置为无效指令。
也就是说,在断点处指令的上一条指令为相对跳转指令的情况下,利用例2设置的指令副本可以不包括源程序代码中的断点处指令的下一条指令,而是包括:源程序代码中的断点处指令的上一条指令、源程序代码中的断点处指令、第二异常指令、绝对跳转指令和无效指令。需要说明的是,指令副本中的断点处指令的上一条指令的跳转相对偏移量与源程序代码中的断点处指令的上一条指令的跳转相对偏移量是不同的。
例3、在判断出断点处指令为相对跳转指令的情况下,在指令副本中存储断点处指令和断点处指令的下一条指令,断点处指令和断点处指令的下一条指令可以按上述描述的指令先后顺序连续存储,当然,断点处指令和断点处指令的下一条指令之间可以插入无效指令。指令副本中的断点处指令的跳转相对偏移量根据指令副本中的绝对跳转指令的存储位置设置,指令副本中的绝对跳转指令的跳转绝对偏移量为源程序代码中断点处指令的跳转相对偏移量,将指令副本中的断点处指令后的第二条有效指令(即相对跳转指令后的第二条有效指令)设置为第二异常指令,将绝对跳转指令的下一条指令设置为无效指令。
也就是说,在断点处指令为相对跳转指令的情况下,利用例3设置的指令副本可以不包括源程序代码中的断点处指令的上一条指令,而是包括:源程序代码中的断点处指令、源程序代码中的断点处指令的下一条指令、第二异常指令、绝对跳转指令和无效指令。需要说明的是,指令副本中的断点处指令的跳转相对偏移量与源程序代码中的断点处指令的跳转相对偏移量是不同的。
在上述S120描述的设置指令副本的操作中还可以可选的包括:将指令副本中的相对跳转指令后的第二条或第三条有效指令设置为第三异常指令。针对上述例1来说,就是将指令副本中的断点处指令后的第三条有效指令设置为第三异常指令。针对上述例2来说,就是将指令副本中的断点处指令后的第二条有效指令设置为第三异常指令。针对上述例3来说,就是将指令副本中的断点处指令后的第三条有效指令设置为第三异常指令。
通常源程序代码中基本上不会存在两条连续的指令均为相对跳转指令的情况,但是有可能存在两条连续的指令均不为相对跳转指令的情况。在本实施例中,如果源程序代码中的断点处指令和断点处指令的上一条指令均不为相对跳转指令,则可以只针对断点处指令设置指令副本。为断点处指令设置指令副本具体包括:在指令副本中存储断点处指令,将指令副本中的断点处指令的下一条有效指令设置为第二异常指令。第二异常指令用于返回源程序代码,以继续执行源程序代码中的指令。例如,返回源程序代码中的断点处指令的下一条指令。
本实施例中设置的指令副本可以存在内存空间中。另外,上述第一异常指令、第二异常指令和第三异常指令可以相同,也可以不相同,第一异常指令、第二异常指令和第三异常指令的一个具体例子为:Break。上述无效指令可以为nop或者sync等。
从上述实施例一的描述可知,通过对断点处指令和断点处指令的上一条指令进行是否为相对跳转指令的判断,可以针对相对跳转指令选取有关联的指令来设置指令副本,从而可以尽可能的避免指令副本中包括过多指令使指令副本占用过多内存空间的现象;通过设置绝对跳转指令和无效指令,可以在尽可能小的修改指令副本中的相对跳转指令的情况下实现经过性断点设置,从而可以尽可能的避免经过性断点设置过程带来的人为错误;通过在指令副本中设置第二异常指令和绝对跳转指令可以跳转回源程序代码,继续执行源程序代码中的指令;通过将指令副本中的断点处指令后的第三条指令设置为第三异常指令,为指令副本中可能包含的Likely类型的相对跳转指令提供了具体的解决方案。最终上述实施例一提供的经过性断点设置方法节约了内存占用空间,提高了程序调试效率。
实施例二、经过性断点调试方法。该方法的流程如附图2所示。
图2中,S200、判断引发断点异常的异常指令,如果该断点异常由第一异常指令引发,则到S210;如果该断点异常由第二异常指令引发,则到S220。可选的,S200还可以包括:如果该断点异常由第三异常指令引发,则到S230。
可选的,在S200之前,还可以包括判断是否接管异常的操作,即判断发生的异常是否属于断点异常,在判断出发生的异常属于断点异常时,确定接管异常,到S200,否则,不进入S200,即不进行本实施例中记载的经过性断点调试操作。判断是否接管异常的操作可以采用现有的方法来实现,本实施例不限制判断是否接管异常的具体判断过程。
S210、获取断点异常的现场信息,并输出获取的现场信息,在确定出该断点异常发生在延迟槽中时,指示执行指令副本中的断点处指令的上一条指令(即退出断点异常处理过程,从指令副本中的断点处指令的上一条指令继续进行正常的指令处理过程);在确定出该断点异常没有发生在延迟槽中时,指示执行指令副本中的断点处指令(即退出断点异常处理过程,从指令副本中的断点处指令继续进行正常的指令处理过程)。
在S210中,可以先获取断点异常的现场信息,在判断是否需要输出获取的现场信息,在判断出需要输出获取的现场信息时,再输出获取的现场信息,否则,不输出获取的现场信息。本实施例也可以先判断是否需要获取断点异常的现场信息,在判断出需要获取断点异常的现场信息后,再获取现场信息并直接输出获取的现场信息,否则,不获取现场信息,进而也就不会输出现场信息。另外,本实施例也可以在获取断点异常的现场信息前执行是否获取现场信息的判断操作,且在输出现场信息前执行是否输出现场信息的判断操作。本实施例也可以不执行是否获取现场信息的判断操作,且不执行是否输出现场信息的判断操作,而是直接获取断点异常的现场信息,并直接将获取的现场信息输出。
在S210中,可以根据获取现场信息条件来判断是否获取断点异常的现场信息,在判断出符合获取现场信息条件后,执行获取断点异常的现场信息的操作。
获取断点异常的现场信息的一个具体例子为:判断引发该断点异常的核,如果引发该断点异常的核的信息属于获取现场信息条件中的断点触发的核信息,则获取断点异常的现场信息,否则不执行获取断点异常的现场信息的操作。
获取断点异常的现场信息的另一个具体例子为:判断引发断点异常的异常指令的信息,如果引发断点异常的异常指令的信息不属于获取现场信息条件中的跳过的断点信息,则获取断点异常的现场信息,否则不执行获取断点异常的现场信息的操作。
获取断点异常的现场信息的第三个具体例子为:判断引发该断点异常的任务,如果引发该断点异常的任务的信息属于获取现场信息条件中的断点与任务绑定信息,则获取断点异常的现场信息,否则不执行获取断点异常的现场信息的操作。
获取断点异常的现场信息的过程也可以通过其它方式实现,例如将上述例举的三个具体例子或者任意两个具体例子结合起来等,本实施例不限制获取断点异常的现场信息的具体实现过程。
在S210中,可以根据输出现场信息条件来判断是否输出已经获取到的现场信息,且在判断出符合输出现场信息条件后,执行输出现场信息的操作。
输出现场信息的一个具体例子为:判断引发该断点异常的核,如果引发该断点异常的核的信息属于输出现场信息条件中的断点触发的核信息,则输出已经获得的断点异常的现场信息,否则不执行输出操作。
输出现场信息的另一个具体例子为:判断引发断点异常的异常指令的信息,如果引发断点异常的异常指令的信息不属于输出现场信息条件中的跳过的断点信息,则输出已经获取的断点异常的现场信息,否则不执行输出操作。
输出现场信息的第三个具体例子为:判断引发该断点异常的任务,如果引发该断点异常的任务的信息属于输出现场信息条件中的断点与任务绑定信息,则输出已经获取的断点异常的现场信息,否则不执行输出操作。
输出断点异常的现场信息的过程也可以通过其它方式实现,例如将上述例举的三个具体例子或者任意两个具体例子结合起来等,本实施例不限制输出断点异常的现场信息的具体实现过程。
S220、在该断点异常发生在延迟槽中时,指示执行源程序代码中的断点处指令的下一条指令(即退出断点异常处理过程,返回到源程序代码,从源程序代码中的断点处指令的下一条指令继续进行正常的指令处理过程),在该断点异常没有发生在延迟槽中时,指示执行源程序代码中的断点处指令后的第二条指令(即退出断点异常处理过程,返回到源程序代码,从源程序代码中的断点处指令后的第二条指令继续进行正常的指令处理过程)。
S230、指示执行源程序代码中的断点处指令后的第三条指令,即退出断点异常处理过程,返回到源程序代码,从源程序代码中的断点处指令后的第三条指令继续进行正常的指令处理过程。
从上述实施例二的描述可知,通过对引发断点异常的异常指令进行判断,并针对判断结果指示执行不同的处理操作,保证了对经过性断点的正确调试;通过根据断点触发的核信息、跳过的断点信息、以及断点与任务绑定信息等判断是否获取或输出断点异常的现场信息,可以实现在多核多进程条件下,针对某个核或某个进程的经过性断点调试,进而可以实现断点异常在特定核上触发、在特定的位置上触发、以及在特定任务上触发等特定的经过性断点调试,从而可以满足单核单进程、多核多进程、多核非共享代码段、以及多核共享代码段的经过性断点的调试需求,提高了程序调试效率。
实施例三、经过性断点设置和调试方法。下面结合附图3和3A对本实施例进行说明。
图3为经过性断点调试方法流程图。图3A为源程序代码段和设置的指令副本的程序代码段示意图。图3A的左半部分为源程序代码段示意图,图3A的右半部分为指令副本的程序代码段示意图。
在图3A中,Addr1-4、Addr1、Addr1+4、Addr1+8和Addr1+12等是源程序代码段中的指令的存储地址,Addr2-4、Addr2、Addr2+4、Addr2+8、Addr2+12、Addr2+16和Addr2+20等是指令副本的程序代码段中的指令的存储地址。图3A中示出的存储地址仅仅是一种示意而已,并不代表各指令一定需要按照图3A中示出的方式存储。
在接收到携带有断点位置信息和断点属性信息的断点设置命令后,从断点设置命令中获取断点位置信息和断点属性信息,并存储断点属性信息。
根据获取的断点位置信息确定源程序代码中的断点处指令,源程序代码中的断点处指令为图3A示出的Addr1中存储的指令。分析源程序代码中的断点处指令以及断点处指令的上一条指令,如果这两条指令中有一条指令是相对跳转指令,则将源程序代码中的断点处指令、断点处指令的上一条指令以及断点处指令的下一条指令存储在指令副本中,否则,可以直接将源程序代码中的断点处指令存储在指令副本中。源程序代码中的断点处指令在指令副本中的存储地址为Addr2,源程序代码中的断点处指令的上一条指令在指令副本中的存储地址为Addr2-4,源程序代码中的断点处指令的下一条指令在指令副本中的存储地址为Addr2+4。副本中存储的相对跳转指令应翻译为绝对跳转指令,也就是说,指令副本中的相对跳转指令的跳转相对偏移量应该为绝对跳转指令的存储地址,如果在指令副本中的存储地址为Addr2+16处存储绝对跳转指令,则指令副本中的相对跳转指令的跳转相对偏移量应该为Addr2+16,指令副本中该相对跳转指令的其它特性不会发生变化。
在本实施例中可以在相对跳转指令存储在指令副本中之前,对该相对跳转指令的跳转相对偏移量进行修改,然后,再将修改后的相对跳转指令存储在副本中。也可以先不修改相对跳转指令的跳转相对偏移量,而是先将相对跳转指令存储在指令副本中,之后,再对该相对跳转指令的跳转相对偏移量进行修改。另外,需要说明的是,在修改相对跳转指令的跳转相对偏移量之前,指令副本中可能并没有存储绝对跳转指令,可以根据预先设置的绝对跳转指令在存储副本中的存储位置来修改相对跳转指令的跳转相对偏移量。如果在修改相对跳转指令的跳转相对偏移量之前,指令副本中已经存储有绝对跳转指令,则可以根据指令副本中绝对跳转指令的实际存储位置来修改相对跳转指令的跳转相对偏移量。也就是说,在设置指令副本过程中,可以先存储绝对跳转指令,再存储相对跳转指令;也可以先存储相对跳转指令,再存储绝对跳转指令,而且,可以在指令副本中存储相对跳转指令之前修改相对跳转指令的跳转相对偏移量,也可以在指令副本中存储相对跳转指令之后修改相对跳转指令的跳转相对偏移量。
绝对跳转指令的跳转绝对偏移量是根据源程序代码中相对跳转指令的跳转相对偏移量设置的,也就是说,绝对跳转指令的跳转绝对偏移量是指令副本中相对跳转指令的修改前的跳转相对偏移量。
图3A的指令副本中的绝对跳转指令的下一条指令为无效指令即nop指令。无效指令是针对绝对跳转指令导致的延迟槽而设置的。nop指令在指令副本中的存储地址为Addr2+20。
在指令副本中存储地址为Addr2+8处存储有第二异常指令Break,第二异常指令Break可以表示为Break(2)。在指令副本中存储地址为Addr2+12处存储有第三异常指令Break,第三异常指令Break可以表示为Break(3)。
在进行了上述指令副本的设置后,可以将源程序代码段中的断点处指令修改为第一异常指令Break,第一异常指令Break可以表示为Break(1)。
需要说明的是,图3A中的Addr1+X以及Addr2+X只是逻辑上的顺序,指令的存储地址之间的间隔不是一定为4。而且,图3A示出的指令副本中的断点处指令的上一条指令和断点处指令之间、断点处指令和断点处指令的下一条指令之间、以及断点处指令的下一条指令之后可以插入nop、sync等无效指令。
在进行了上述经过性断点设置后,运行源程序代码,在源程序代码运行过程中,源程序代码中的Break(1)会引发断点异常,在发生断点异常后,进入图3所示的流程。需要说明的是,本实施例是为了说明经过性断点调试方法,其实,在源程序代码的实际运行过程中,产生的异常可能并不是由Break(1)引发的,不论是否由Break(1)均进入S300。
在图3中,S300、判断是否接管异常,即判断异常是否由Break引发的断点异常,如果判断出是由Break引发的断点异常,则到S310,否则,到S350。
S310、判断该断点异常是否由Break(1)引发,如果判断出断点异常是由Break(1)引发,则到S311,否则,到S320。
S311、执行断点异常处理操作,即获取断点异常的现场信息,并将获取的现场信息存储到指定的存储位置。到S312。
S312、判断本次断点异常是否发生在延迟槽中。可以通过Cause寄存器判断本次断点异常是否发生在延迟槽中。如果判断出本次断点异常发生在延迟槽中,则到S313,否则,到S314。
S313、将PC(Program couter,程序计数器)指向指令副本中断点处指令的上一条指令,即设置PC=Addr2-4。到S340。
在判断出断点异常发生在延迟槽中的情况下,断点处指令的上一条指令一定是相对跳转指令且肯定会发生跳转,这样,由于断点处指令的上一条指令还没有执行,因此,需要重新执行断点处指令的上一条指令。S313即指示继续正常执行断点处指令的上一条指令。
S314、将PC指向指令副本中的断点处指令,即设置PC=Addr2。在判断出异常没有发生在延迟槽中的情况下,只需执行断点处的指令即可。到S340。
S340、退出本次断点异常处理操作,也就是说,根据PC的指示继续正常执行对应的指令。
S320、判断该断点异常是否由Break(2)引发,如果判断出断点异常是由Break(2)引发,则到S321,否则,到S330。
S321、进入断点异常处理操作,本次进入的断点异常处理操作对外透明,即用户不会获知该断点异常处理操作。到S322。需要说明的是S321可以省略,即由S320直接到S322。
S322、判断本次断点异常是否发生在延迟槽中。可以通过Cause寄存器判断本次断点异常是否发生在延迟槽中。如果判断出本次断点异常发生在延迟槽中,则到S323,否则,到S324。
S323、将PC指向源程序代码中的断点处指令的下一条指令,即设置PC=Addr1+4。到S340。
在判断出本次断点异常发生在延迟槽中的情况下,断点处指令的下一条指令一定是相对跳转指令且肯定会发生跳转,这样,由于断点处指令的下一条指令还没有执行,因此,需要执行源程序代码中的断点处指令的下一条指令。S323即指示执行源程序代码中的断点处指令的下一条指令。
S324、将PC指向源程序代码中的断点处指令后的第二条指令,即设置PC=Addr1+8。在判断出本次断点异常没有发生在延迟槽中的情况下,只需执行源程序代码中的断点处指令后的第二条指令即可。到S340。
S330、判断本次断点异常是否由Break(3)引发,如果判断出本次断点异常由Break(3)引发,则到S331,否则,到S350。
由Break(3)引发异常的情况很少,例如,在断点处指令的下一条指令为Likely类型的跳转指令且不会发生跳转时,才会由Break(3)触发断点异常。在断点处指令的下一条指令为Likely类型的跳转指令且不会发生跳转时,需要跳过不需要运行的一条指令即可,即跳过Break(2),执行Break(3)。
S331、进入断点异常处理操作,本次进入的断点异常处理操作对外透明。到S332。需要说明的是,S331可以省略,即由S330直接到S332。
S332、将PC指向源程序代码中的断点处指令后的第三条指令,即设置PC=Addr1+12。到S340。
S350、输出错误信息,本次经过性断点调试过程结束。
需要说明的是,当指令副本的断点处指令或者断点处指令的上一条指令为相对跳转指令并且确实发生了跳转,则根据相对跳转指令的跳转相对偏移量执行绝对跳转指令,并通过绝对跳转指令返回到源程序代码中,继续执行跳转绝对偏移量指示的源程序代码中指令,即PC=跳转绝对偏移量。
从上述实施例三的描述可知,通过对断点处指令和断点处指令的上一条指令进行是否为相对跳转指令的判断,可以针对相对跳转指令选取有关联的指令来设置指令副本,减少了指令副本占用的内存空间;通过设置绝对跳转指令和无效指令,可以在尽可能小的修改指令副本中的相对跳转指令的情况下实现经过性断点设置,减少了经过性断点设置过程中的人为错误;通过在指令副本中设置第二异常指令和绝对跳转指令可以跳转回源程序代码,继续执行源程序代码中的指令;通过将指令副本中的断点处指令后的第三条指令设置为第三异常指令,为指令副本中可能包含的Likely类型的相对跳转指令提供了具体的解决方案。通过对引发断点异常的异常指令进行判断,并针对判断结果指示执行不同的处理操作,保证了对经过性断点的正确调试;通过根据断点触发的核信息、跳过的断点信息、以及断点与任务绑定信息等判断是否获取或输出断点异常的现场信息,可以实现在多核多进程条件下,针对某个核或某个进程的经过性断点调试,进而可以实现断点异常在特定核上触发、在特定的位置上触发、以及在特定任务上触发等特定的经过性断点调试,从而可以满足单核单进程、多核多进程、多核非共享代码段、以及多核共享代码段的经过性断点的调试需求。最终上述实施例三节约了内存占用空间,提高了程序调试效率。
实施例四、经过性断点设置装置。该装置的结构如附图4所示。图4中示出的经过性断点设置装置包括:接收模块400、确定模块410和第一设置模块420。
接收模块400用于接收断点设置命令。
接收模块400接收到的断点设置命令中可以包括断点位置信息,而不包括断点属性信息。接收模块400接收到的断点设置命令中也可以既包括断点位置信息,又包括断点属性信息。这里的断点位置信息用于指示源程序代码中的哪条指令为断点指令。断点位置信息和断点属性信息具体包括的内容等如上述实施例一的描述,在此不再重复说明。
确定模块410用于根据断点设置命令确定源程序代码中的断点处指令。
确定模块410根据断点设置命令确定源程序代码中的断点处指令的具体实现方式有多种,一个具体的例子为:确定模块410根据断点设置命令中的断点位置信息确定源程序代码中的断点指令,例如,确定模块410根据断点位置信息中的指令名称和指令所在行数确定源程序代码中的断点处指令;再例如,确定模块410根据断点位置信息中的指令存储地址查找存储位置,该存储位置中的指令即为断点处指令。本实施例不限制确定模块410根据断点设置命令确定源程序代码中的断点处指令的具体实现过程。
第一设置模块420,用于在断点处指令和断点处指令的上一条指令中存在一条相对跳转指令时,为相对跳转指令和相对跳转指令的下一条指令设置指令副本,并将源程序代码中的断点处指令设置为第一异常指令。第一设置模块420设置指令副本的具体过程包括:第一设置模块420在指令副本中存储相对跳转指令和相对跳转指令的下一条指令,指令副本中的相对跳转指令的跳转相对偏移量根据指令副本中的绝对跳转指令的存储位置设置,指令副本中的绝对跳转指令的跳转绝对偏移量为相对跳转指令的原跳转相对偏移量,第一设置模块420将指令副本中的相对跳转指令后的第二条有效指令设置为第二异常指令,第一设置模块420将绝对跳转指令的下一条指令设置为无效指令。在指令副本中的相对跳转指令与第二异常指令之间不存在无效指令的情况下,相对跳转指令后的第二条有效指令即为相对跳转指令后的第二条指令。可选的,第一设置模块420设置指令副本的具体过程还可以包括:第一设置模块420将指令副本中的相对跳转指令后的第二条或第三条有效指令设置为第三异常指令。
第一设置模块420为相对跳转指令和相对跳转指令的下一条指令设置指令副本的具体过程可以包括多种,相应的,第一设置模块420设置出的指令副本也包括多种不同的形式,下面对第一设置模块420包含的子模块执行的操作进行说明。
上述第一设置模块420包括:判断子模块421。第一设置模块420在包括判断子模块421的基础上,还包括:第一设置子模块422、第二设置子模块423和第三设置子模块424中的一个或多个。另外,第一设置模块420还可以可选的包括第四设置子模块425。
判断子模块421用于判断断点处指令和断点处指令的上一条指令中是否存在一条相对跳转指令。
第一设置子模块422用于在判断子模块421判断出断点处指令和断点处指令的上一条指令中存在一条相对跳转指令的情况下,为断点处指令的上一条指令、断点处指令和断点处指令的下一条指令设置指令副本,并将源程序代码中的断点处指令设置为第一异常指令。第一设置子模块422设置指令副本的操作包括:第一设置子模块422在指令副本中存储断点处指令的上一条指令、断点处指令和断点处指令的下一条指令,指令副本中的相对跳转指令的跳转相对偏移量根据指令副本中的绝对跳转指令的存储位置设置,指令副本中的绝对跳转指令的跳转绝对偏移量为相对跳转指令的原跳转相对偏移量,第一设置子模块422将指令副本中的断点处指令后的第二条有效指令设置为第二异常指令,第一设置子模块422将绝对跳转指令的下一条指令设置为无效指令。
也就是说,在断点处指令和断点处指令的上一条指令中只要存在相对跳转指令,第一设置子模块422设置的指令副本可以包括:源程序代码中的断点处指令的上一条指令、源程序代码中的断点处指令、源程序代码中的断点处指令的下一条指令、第二异常指令、绝对跳转指令和无效指令。
可选的,第一设置子模块422还可以将指令副本中的断点处指令后的第三条有效指令设置为第三异常指令,即第一设置子模块422设置的指令副本中还包括有第三异常指令。
第二设置子模块423用于在判断子模块421判断出断点处指令的上一条指令为相对跳转指令的情况下,为断点处指令的上一条指令和断点处指令设置指令副本,并将源程序代码中的断点处指令设置为第一异常指令。第二设置子模块423设置指令副本的操作包括:第二设置子模块423在指令副本中存储断点处指令的上一条指令和断点处指令,指令副本中的断点处指令的上一条指令的跳转相对偏移量根据指令副本中的绝对跳转指令的存储位置设置,指令副本中的绝对跳转指令的跳转绝对偏移量为源程序代码中断点处指令的上一条指令的跳转相对偏移量,第二设置子模块423将指令副本中的断点处指令的下一条有效指令设置为第二异常指令,将绝对跳转指令的下一条指令设置为无效指令。
也就是说,在断点处指令的上一条指令为相对跳转指令的情况下,第二设置子模块423设置的指令副本可以不包括源程序代码中的断点处指令的下一条指令,而是包括:源程序代码中的断点处指令的上一条指令、源程序代码中的断点处指令、第二异常指令、绝对跳转指令和无效指令。
可选的,第二设置子模块423还可以将指令副本中的断点处指令后的第二条有效指令设置为第三异常指令。即第二设置子模块423设置的指令副本中还包括有第三异常指令。
第三设置子模块424用于在判断子模块421判断出断点处指令为相对跳转指令的情况下,为断点处指令和断点处指令的下一条指令设置指令副本,并将源程序代码中的断点处指令设置为第一异常指令。第三设置子模块424设置指令副本的操作包括:第三设置子模块424在指令副本中存储断点处指令和断点处指令的下一条指令,指令副本中的断点处指令的跳转相对偏移量根据指令副本中的绝对跳转指令的存储位置设置,指令副本中的绝对跳转指令的跳转绝对偏移量为源程序代码中断点处指令的跳转相对偏移量,第三设置子模块424将指令副本中的断点处指令后的第二条有效指令设置为第二异常指令,将绝对跳转指令的下一条指令设置为无效指令。
也就是说,在断点处指令为相对跳转指令的情况下,第三设置子模块424设置的指令副本可以不包括源程序代码中的断点处指令的上一条指令,而是包括:源程序代码中的断点处指令、源程序代码中的断点处指令的下一条指令、第二异常指令、绝对跳转指令和无效指令。
可选的,第三设置子模块424还可以将指令副本中的断点处指令后的第三条有效指令设置为第三异常指令,即第三设置子模块424设置的指令副本中还包括有第三异常指令。
第四设置子模块425,用于在断点处指令和断点处指令的上一条指令均不为相对跳转指令的情况下,为断点处指令设置指令副本。为断点处指令设置指令副本具体包括:在指令副本中存储所述断点处指令,将指令副本中的断点处指令的下一条有效指令设置为第二异常指令。这里的第二异常指令用于返回源程序代码,以继续执行源程序代码中的指令。例如,返回源程序代码中的断点处指令的下一条指令。
本实施例中第一设置模块420或者相应的各子模块设置的指令副本可以存在内存空间中。另外,第一设置模块420或者相应的各子模块设置的指令副本中的第一异常指令、第二异常指令和第三异常指令可以相同,也可以不相同,第一异常指令、第二异常指令和第三异常指令的一个具体例子为:Break。上述无效指令可以为nop或者sync等。
从上述实施例四的描述可知,第一设置模块420通过对断点处指令和断点处指令的上一条指令进行是否为相对跳转指令的判断,可以针对相对跳转指令选取有关联的指令来设置指令副本,减少了指令副本占用的内存空间;第一设置模块420通过设置绝对跳转指令和无效指令,可以在尽可能小的修改指令副本中的相对跳转指令的情况下实现经过性断点设置,减小了经过性断点设置过程中的人为错误;第一设置模块420通过在指令副本中设置第二异常指令和绝对跳转指令可以跳转回源程序代码,继续执行源程序代码中的指令;第一设置子模块422通过将指令副本中的断点处指令后的第三条指令设置为第三异常指令,为指令副本中可能包含的Likely类型的相对跳转指令提供了具体的解决方案。最终上述实施例四节约了内存占用空间,提高了程序调试效率。
实施例五、经过性断点调试装置。该装置的结构如附图5所示。图5中示出的经过性断点调试装置包括:判断模块500、第一异常处理模块510和第二异常处理模块520。可选的,该装置还可以包括:第三异常处理模块530。
判断模块500用于判断引发断点异常的异常指令。
可选的,判断模块500在判断引发断点异常的异常指令之前,还可以判断是否接管异常的操作,即判断模块500判断发生的异常是否属于断点异常,判断模块500在判断出发生的异常属于断点异常时,确定接管异常,之后,判断模块500再判断引发断点异常的异常指令,否则,判断模块500不进行引发断点异常的异常指令的判断操作。判断模块500可以采用现有的方法来判断是否接管异常的操作,本实施例不限制判断模块500判断是否接管异常的具体过程。
第一异常处理模块510用于在判断模块500判断出断点异常由第一异常指令引发,则获取并输出断点异常的现场信息,在断点异常发生在延迟槽中时,指示执行指令副本中的断点处指令的上一条指令,在断点异常没有发生在延迟槽中时,指示执行指令副本中的断点处指令。
第一异常处理模块510可以先获取断点异常的现场信息,再判断是否需要输出获取的现场信息,第一异常处理模块510在判断出需要输出获取的现场信息时,再输出获取的现场信息,否则,第一异常处理模块510不输出获取的现场信息。第一异常处理模块510也可以先判断是否需要获取断点异常的现场信息,在判断出需要获取断点异常的现场信息后,第一异常处理模块510再获取现场信息并直接输出获取的现场信息,否则,第一异常处理模块510不获取现场信息,进而第一异常处理模块510也就不会输出现场信息。另外,第一异常处理模块510也可以在获取断点异常的现场信息前执行是否获取现场信息的判断操作,且第一异常处理模块510在输出现场信息前执行是否输出现场信息的判断操作。第一异常处理模块510也可以不执行是否获取现场信息的判断操作,且不执行是否输出现场信息的判断操作,而是直接获取断点异常的现场信息,并直接将获取的现场信息输出。第一异常处理模块510获取断点异常的现场信息的具体例子、以及输出现场信息的具体例子如上述实施例二中的描述,在此不再重复说明。
第二异常处理模块520在判断模块500判断出断点异常由第二异常指令引发,则在断点异常发生在延迟槽中时,指示执行源程序代码中的断点处指令的下一条指令(即退出断点异常处理过程,返回到源程序代码,从源程序代码中的断点处指令的下一条指令继续进行正常的指令处理过程),在断点异常没有发生在延迟槽中时,指示执行源程序代码中的断点处指令后的第二条指令(即退出断点异常处理过程,返回到源程序代码,从源程序代码中的断点处指令后的第二条指令继续进行正常的指令处理过程)。
第三异常处理模块530用于在判断模块500判断出断点异常由第三异常指令引发,则指示执行源程序代码中的断点处指令后的第三条指令,即退出断点异常处理过程,返回到源程序代码,从源程序代码中的断点处指令后的第三条指令继续进行正常的指令处理过程。
上述第一异常处理模块510、第二异常处理模块520和第三异常处理模块530都可以通过设置PC的方式实现退出断点异常处理后指令继续进行正常指令的执行操作。具体如上述实施例三的描述,在此不再重复说明。
从上述实施例五的描述可知,判断模块500通过对引发断点异常的异常指令进行判断,且第一异常处理模块510、第二异常处理模块520和第三异常处理模块530针对判断结果执行不同的处理操作,保证了对经过性断点的正确调试;第一异常处理模块510通过根据断点触发的核信息、跳过的断点信息、以及断点与任务绑定信息等判断是否获取或输出断点异常的现场信息,可以实现在多核多进程条件下,针对某个核或某个进程的经过性断点调试,进而可以实现断点异常在特定核上触发、在特定的位置上触发、以及在特定任务上触发等特定的经过性断点调试,从而可以满足单核单进程、多核多进程、多核非共享代码段、以及多核共享代码段的经过性断点的调试需求,提高了程序调试效率。
实施例六、程序调试设备。该设备的结构如附图6所示。图6示出的设备包括:经过性断点设置装置600和经过性断点调试装置610。
经过性断点设置装置600用于接收断点设置命令,根据断点设置命令确定源程序代码中的断点处指令,在判断出断点处指令和断点处指令的上一条指令中存在一条相对跳转指令,则为相对跳转指令和相对跳转指令的下一条指令设置指令副本,并将源程序代码中的断点处指令设置为第一异常指令;设置指令副本包括:在指令副本中存储相对跳转指令和所述相对跳转指令的下一条指令,指令副本中的相对跳转指令的跳转相对偏移量根据指令副本中的绝对跳转指令的存储位置设置,绝对跳转指令的跳转绝对偏移量为相对跳转指令的原跳转相对偏移量,将指令副本中的相对跳转指令后的第二条有效指令设置为第二异常指令,将绝对跳转指令的下一条指令设置为无效指令。
可选的,经过性断点设置装置600还用于在指令副本包括断点处指令的下一条指令的情况下,将指令副本中的断点处指令后的第三条有效指令设置为第三异常指令;在指令副本不包括断点处指令的下一条指令的情况下,将指令副本中的断点处指令后的第二条有效指令设置为第三异常指令;
经过性断点调试装置610用于判断引发断点异常的异常指令,如果断点异常由第一异常指令引发,则获取并输出断点异常的现场信息,在断点异常发生在延迟槽中时,指示执行指令副本中的断点处指令的上一条指令,在断点异常没有发生在延迟槽中时,指示执行指令副本中的断点处指令;如果断点异常由第二异常指令引发,则在断点异常发生在延迟槽中时,指示执行源程序代码中的断点处指令的下一条指令,在断点异常没有发生在延迟槽中时,指示执行源程序代码中的断点处指令后的第二条指令。
可选的,经过性断点调试装置610还用于如果判断出断点异常由第三异常指令引发,则指示执行源程序代码中的断点处指令后的第三条指令。
经过性断点设置装置600和经过性断点调试装置610具体执行的操作、以及经过性断点设置装置600和经过性断点调试装置610的具体结构如上述实施例的描述,在此不再重复说明。
从上述实施例六的描述可知,经过性断点设置装置600通过对断点处指令和断点处指令的上一条指令进行是否为相对跳转指令的判断,可以针对相对跳转指令选取有关联的指令来设置指令副本,减少了指令副本占用的内存空间;经过性断点设置装置600通过设置绝对跳转指令和无效指令,可以在尽可能小的修改指令副本中的相对跳转指令的情况下实现经过性断点设置,减少了经过性断点设置过程中的人为错误;经过性断点设置装置600通过在指令副本中设置第二异常指令和绝对跳转指令可以跳转回源程序代码,继续执行源程序代码中的指令;经过性断点设置装置600通过将指令副本中的断点处指令后的第三条指令设置为第三异常指令,为指令副本中可能包含的Likely类型的相对跳转指令提供了具体的解决方案。经过性断点调试装置610通过对引发断点异常的异常指令进行判断,并针对判断结果指示执行不同的处理操作,保证了对经过性断点的正确调试;经过性断点调试装置610通过根据断点触发的核信息、跳过的断点信息、以及断点与任务绑定信息等判断是否获取或输出断点异常的现场信息,可以实现在多核多进程条件下,针对某个核或某个进程的经过性断点调试,进而可以实现断点异常在特定核上触发、在特定的位置上触发、以及在特定任务上触发等特定的经过性断点调试,从而可以满足单核单进程、多核多进程、多核非共享代码段、以及多核共享代码段的经过性断点的调试需求。最终上述实施例六节约了内存占用空间,提高了程序调试效率。
实施例七、程序调试系统。该系统的结构如附图7所示。图7示出的系统包括:调试器700和程序调试设备710。
调试器700用于发送断点设置命令,并触发源程序代码运行。调试器700可以为Shell、以及GDB等。断点设置命令中包含的具体内容如上述实施例的描述,在此不再重复说明。
程序调试设备710用于接收断点设置命令,根据断点设置命令确定源程序代码中的断点处指令,在判断出断点处指令和断点处指令的上一条指令中存在一条相对跳转指令,则为相对跳转指令和相对跳转指令的下一条指令设置指令副本,并将源程序代码中的断点处指令设置为第一异常指令。
程序调试设备710设置指令副本的具体操作包括:在指令副本中存储相对跳转指令和相对跳转指令的下一条指令,指令副本中的相对跳转指令的跳转相对偏移量根据所述指令副本中的绝对跳转指令的存储位置设置,绝对跳转指令的跳转绝对偏移量为相对跳转指令的原跳转相对偏移量,将指令副本中的相对跳转指令后的第二条有效指令设置为第二异常指令,将绝对跳转指令的下一条指令设置为无效指令。
在源程序代码运行后,程序调试设备710判断引发断点异常的异常指令;如果断点异常由第一异常指令引发,则程序调试设备710获取并输出断点异常的现场信息,在断点异常发生在延迟槽中时,程序调试设备710指示执行指令副本中的断点处指令的上一条指令,在断点异常没有发生在延迟槽中时,程序调试设备710指示执行指令副本中的断点处指令。如果断点异常由第二异常指令引发,则在所述断点异常发生在延迟槽中时,程序调试设备710指示执行源程序代码中的断点处指令的下一条指令,在断点异常没有发生在延迟槽中时,程序调试设备710指示执行源程序代码中的断点处指令后的第二条指令。
程序调试设备710具体执行的操作、以及程序调试设备710的具体结构等如上述实施例的描述,在此不再重复说明。
从上述实施例七的描述可知,程序调试设备710通过对断点处指令和断点处指令的上一条指令进行是否为相对跳转指令的判断,可以针对相对跳转指令选取有关联的指令来设置指令副本,减少了指令副本占用的内存空间;程序调试设备710通过设置绝对跳转指令和无效指令,可以在尽可能小的修改指令副本中的相对跳转指令的情况下实现经过性断点设置,减少了经过性断点设置过程中的人为错误;程序调试设备710通过在指令副本中设置第二异常指令和绝对跳转指令可以跳转回源程序代码,继续执行源程序代码中的指令;程序调试设备710通过将指令副本中的断点处指令后的第三条指令设置为第三异常指令,为指令副本中可能包含的Likely类型的相对跳转指令提供了具体的解决方案。程序调试设备710通过对引发断点异常的异常指令进行判断,并针对判断结果指示执行不同的处理操作,保证了对经过性断点的正确调试;程序调试设备710通过根据断点触发的核信息、跳过的断点信息、以及断点与任务绑定信息等判断是否获取或输出断点异常的现场信息,可以实现在多核多进程条件下,针对某个核或某个进程的经过性断点调试,进而可以实现断点异常在特定核上触发、在特定的位置上触发、以及在特定任务上触发等特定的经过性断点调试,从而可以满足单核单进程、多核多进程、多核非共享代码段、以及多核共享代码段的经过性断点的调试需求。最终上述实施例七节约了内存占用空间,提高了程序调试效率。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的硬件平台的方式来实现,当然也可以全部通过硬件来实施,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案对背景技术做出贡献的全部或者部分可以以软件产品的形式体现出来,所述的软件产品在可以用于执行上述的方法流程。该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
虽然通过实施例描绘了本发明,本领域普通技术人员知道,本发明有许多变形和变化而不脱离本发明的精神,本发明的申请文件的权利要求包括这些变形和变化。
Claims (16)
1.一种经过性断点设置方法,其特征在于,包括:
接收断点设置命令;
根据所述断点设置命令确定源程序代码中的断点处指令;
在所述断点处指令和所述断点处指令的上一条指令中存在一条相对跳转指令时,为所述相对跳转指令和所述相对跳转指令的下一条指令设置指令副本,并将所述源程序代码中的断点处指令设置为第一异常指令;
所述设置指令副本包括:在指令副本中存储所述相对跳转指令和所述相对跳转指令的下一条指令,所述指令副本中的相对跳转指令的跳转相对偏移量根据所述指令副本中的绝对跳转指令的存储位置设置,所述绝对跳转指令的跳转绝对偏移量为所述相对跳转指令的原跳转相对偏移量,将所述指令副本中的相对跳转指令后的第二条有效指令设置为第二异常指令,将所述绝对跳转指令的下一条指令设置为无效指令。
2.如权利要求1所述的方法,其特征在于:所述在指令副本中存储所述相对跳转指令和所述相对跳转指令的下一条指令包括:
在指令副本中存储所述断点处指令的上一条指令、所述断点处指令和所述断点处指令的下一条指令;或者
在所述断点处指令的上一条指令为相对跳转指令的情况下,在指令副本中存储所述断点处指令的上一条指令和所述断点处指令;或者
在所述断点处指令为相对跳转指令的情况下,在指令副本中存储所述断点处指令和所述断点处指令的下一条指令。
3.如权利要求2所述的方法,其特征在于,所述设置指令副本还包括:
在所述指令副本包括断点处指令的下一条指令的情况下,将所述指令副本中的断点处指令后的第三条有效指令设置为第三异常指令;或者
在所述指令副本不包括断点处指令的下一条指令的情况下,将所述指令副本中的断点处指令后的第二条有效指令设置为第三异常指令。
4.如权利要求1或2或3所述的方法,其特征在于,所述方法还包括:
在所述断点处指令和所述断点处指令的上一条指令均不为相对跳转指令的情况下,为所述断点处指令设置指令副本;
所述为所述断点处指令设置指令副本具体包括:
在指令副本中存储所述断点处指令,将所述指令副本中的断点处指令的下一条有效指令设置为第二异常指令。
5.如权利要求1或2或3所述的方法,其特征在于,所述断点设置命令包括:断点位置信息,或者包括:断点位置信息和断点属性信息,所述断点属性信息包括:获取现场信息条件、输出现场信息条件、断点引发异常后是否挂起任务信息和现场信息的输出路径信息中的任意一个或多个。
6.一种基于权利要求1至5中任一权利要求的经过性断点调试方法,其特征在于,包括:
判断引发断点异常的异常指令;
如果所述断点异常由第一异常指令引发,则获取并输出所述断点异常的现场信息,在所述断点异常发生在延迟槽中时,指示执行指令副本中的断点处指令的上一条指令,在所述断点异常没有发生在延迟槽中时,指示执行指令副本中的断点处指令;
如果所述断点异常由第二异常指令引发,则在所述断点异常发生在延迟槽中时,指示执行所述源程序代码中的断点处指令的下一条指令,在所述断点异常没有发生在延迟槽中时,指示执行所述源程序代码中的断点处指令后的第二条指令。
7.如权利要求6所述的方法,其特征在于,在所述指令副本包括第三异常指令的情况下,所述方法还包括:
如果所述断点异常由第三异常指令引发,则指示执行所述源程序代码中的断点处指令后的第三条指令。
8.如权利要求6或7所述的方法,其特征在于:
所述获取并输出所述断点异常的现场信息包括:
根据断点属性信息中的获取现场信息条件判断出允许获取所述断点异常的现场信息后,获取并输出所述断点异常的现场信息;或者
获取所述断点异常的现场信息,根据断点属性信息中的输出现场信息条件判断出允许输出所述断点异常的现场信息后,输出所述现场信息。
9.一种经过性断点设置装置,其特征在于,包括:
接收模块,用于接收断点设置命令;
确定模块,用于根据所述断点设置命令确定源程序代码中的断点处指令;
第一设置模块,用于在所述断点处指令和所述断点处指令的上一条指令中存在一条相对跳转指令时,为所述相对跳转指令和所述相对跳转指令的下一条指令设置指令副本,并将所述源程序代码中的断点处指令设置为第一异常指令;
所述设置指令副本包括:在指令副本中存储所述相对跳转指令和所述相对跳转指令的下一条指令,所述指令副本中的相对跳转指令的跳转相对偏移量根据所述指令副本中的绝对跳转指令的存储位置设置,所述绝对跳转指令的跳转绝对偏移量为所述相对跳转指令的原跳转相对偏移量,将所述指令副本中的相对跳转指令后的第二条有效指令设置为第二异常指令,将所述绝对跳转指令的下一条指令设置为无效指令。
10.如权利要求9所述的装置,其特征在于,所述第一设置模块包括:
判断子模块,用于判断所述断点处指令和所述断点处指令的上一条指令中是否存在一条相对跳转指令;和
第一设置子模块,用于在所述判断子模块判断出所述断点处指令和所述断点处指令的上一条指令中存在一条相对跳转指令的情况下,为所述断点处指令的上一条指令、所述断点处指令和所述断点处指令的下一条指令设置指令副本,并将所述源程序代码中的断点处指令设置为第一异常指令;或者
第二设置子模块,用于在所述判断子模块判断出所述断点处指令的上一条指令为相对跳转指令的情况下,为所述断点处指令的上一条指令和所述断点处指令设置指令副本,并将所述源程序代码中的断点处指令设置为第一异常指令;或者
第三设置子模块,用于在所述判断子模块判断出所述断点处指令为相对跳转指令的情况下,为所述断点处指令和所述断点处指令的下一条指令设置指令副本,并将所述源程序代码中的断点处指令设置为第一异常指令。
11.如权利要求10所述的装置,其特征在于:
所述第一设置子模块或者第三设置子模块的设置指令副本操作还包括:将所述指令副本中的断点处指令后的第三条有效指令设置为第三异常指令;
或者所述第二设置子模块的设置指令副本操作还包括:将所述指令副本中的断点处指令后的第二条有效指令设置为第三异常指令。
12.如权利要求10所述的装置,其特征在于,所述第一设置模块还包括:
第四设置子模块,用于在所述断点处指令和所述断点处指令的上一条指令均不为相对跳转指令的情况下,为所述断点处指令设置指令副本;且所述为所述断点处指令设置指令副本具体包括:
在指令副本中存储所述断点处指令,将所述指令副本中的断点处指令的下一条有效指令设置为第二异常指令。
13.一种基于权利要求9至12中任一权利要求的经过性断点调试装置,其特征在于,包括:
判断模块,判断引发断点异常的异常指令;
第一异常处理模块,用于在所述判断模块判断出所述断点异常由第一异常指令引发,则获取并输出所述断点异常的现场信息,在所述断点异常发生在延迟槽中时,指示执行指令副本中的断点处指令的上一条指令,在所述断点异常没有发生在延迟槽中时,指示执行指令副本中的断点处指令;
第二异常处理模块,用于在所述判断模块判断出所述断点异常由第二异常指令引发,则在所述断点异常发生在延迟槽中时,指示执行所述源程序代码中的断点处指令的下一条指令,在所述断点异常没有发生在延迟槽中时,指示执行所述源程序代码中的断点处指令后的第二条指令。
14.如权利要求13所述的装置,其特征在于,所述装置还包括:
第三异常处理模块,用于在所述判断模块判断出所述断点异常由第三异常指令引发,则指示执行所述源程序代码中的断点处指令后的第三条指令。
15.一种程序调试设备,其特征在于,包括:
经过性断点设置装置,用于接收断点设置命令,根据所述断点设置命令确定源程序代码中的断点处指令,在所述断点处指令和所述断点处指令的上一条指令中存在一条相对跳转指令时,为所述相对跳转指令和所述相对跳转指令的下一条指令设置指令副本,并将所述源程序代码中的断点处指令设置为第一异常指令;所述设置指令副本包括:在指令副本中存储所述相对跳转指令和所述相对跳转指令的下一条指令,所述指令副本中的相对跳转指令的跳转相对偏移量根据所述指令副本中的绝对跳转指令的存储位置设置,所述绝对跳转指令的跳转绝对偏移量为所述相对跳转指令的原跳转相对偏移量,将所述指令副本中的相对跳转指令后的第二条有效指令设置为第二异常指令,将所述绝对跳转指令的下一条指令设置为无效指令;
经过性断点调试装置,用于判断引发断点异常的异常指令;如果所述断点异常由第一异常指令引发,则获取并输出所述断点异常的现场信息,在所述断点异常发生在延迟槽中时,指示执行指令副本中的断点处指令的上一条指令,在所述断点异常没有发生在延迟槽中时,指示执行指令副本中的断点处指令;如果所述断点异常由第二异常指令引发,则在所述断点异常发生在延迟槽中时,指示执行所述源程序代码中的断点处指令的下一条指令,在所述断点异常没有发生在延迟槽中时,指示执行所述源程序代码中的断点处指令后的第二条指令。
16.如权利要求15所述的设备,其特征在于:
所述经过性断点设置装置还用于,在所述指令副本包括断点处指令的下一条指令的情况下,将所述指令副本中的断点处指令后的第三条有效指令设置为第三异常指令;在所述指令副本不包括断点处指令的下一条指令的情况下,将所述指令副本中的断点处指令后的第二条有效指令设置为第三异常指令;
所述经过性断点调试装置,还用于如果判断出所述断点异常由第三异常指令引发,则指示执行所述源程序代码中的断点处指令后的第三条指令。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009102423739A CN102096629B (zh) | 2009-12-14 | 2009-12-14 | 经过性断点设置、调试方法和装置 |
PCT/CN2010/078866 WO2011072565A1 (zh) | 2009-12-14 | 2010-11-18 | 经过性断点设置、调试方法和装置 |
EP20100837002 EP2506145B1 (en) | 2009-12-14 | 2010-11-18 | Method and device for pass-by breakpoint setting and debugging |
US13/523,279 US8555256B2 (en) | 2009-12-14 | 2012-06-14 | Pass-by breakpoint setting and debugging method and device |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009102423739A CN102096629B (zh) | 2009-12-14 | 2009-12-14 | 经过性断点设置、调试方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102096629A true CN102096629A (zh) | 2011-06-15 |
CN102096629B CN102096629B (zh) | 2013-09-25 |
Family
ID=44129732
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009102423739A Active CN102096629B (zh) | 2009-12-14 | 2009-12-14 | 经过性断点设置、调试方法和装置 |
Country Status (4)
Country | Link |
---|---|
US (1) | US8555256B2 (zh) |
EP (1) | EP2506145B1 (zh) |
CN (1) | CN102096629B (zh) |
WO (1) | WO2011072565A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103530214A (zh) * | 2012-07-04 | 2014-01-22 | 三星电子株式会社 | 用于可重构处理器的源码级调试设备与方法 |
CN108027733A (zh) * | 2015-09-19 | 2018-05-11 | 微软技术许可有限责任公司 | 在目标字段中存储无效 |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8291388B2 (en) * | 2008-01-09 | 2012-10-16 | International Business Machines Corporation | System, method and program for executing a debugger |
US9632909B2 (en) * | 2008-12-16 | 2017-04-25 | Microsoft Technology Licensing, Llc | Transforming user script code for debugging |
CN102662845B (zh) * | 2012-04-17 | 2016-03-30 | 华为技术有限公司 | 一种实现经过性数据断点的方法、装置及系统 |
CN102831054B (zh) * | 2012-06-30 | 2015-12-02 | 华为技术有限公司 | 程序断点处理方法及装置 |
US9164871B2 (en) * | 2013-05-17 | 2015-10-20 | International Business Machines Corporation | Evaluation of statement-level breakpoints |
US9785536B2 (en) | 2013-11-29 | 2017-10-10 | Nxp Usa, Inc. | Code injection for conditional breakpoints |
US9983986B2 (en) * | 2015-09-28 | 2018-05-29 | International Business Machines Corporation | Testing code response to injected processing errors |
US9747189B2 (en) | 2015-11-12 | 2017-08-29 | International Business Machines Corporation | Breakpoint for predicted tuple processing time in a streaming environment |
IT202100002642A1 (it) * | 2021-02-05 | 2022-08-05 | Sk Hynix Inc | Metodo implementato da un microcontrollore per gestire una istruzione nop e microcontrollore corrispondente |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1271896A (zh) * | 1999-04-23 | 2000-11-01 | 太阳微系统有限公司 | 调试优化代码的方法和设备 |
FR2880963A1 (fr) * | 2005-01-19 | 2006-07-21 | Atmel Corp | Points d'arrets logiciels destines a etre utilises avec des dispositifs a memoire |
CN101142560A (zh) * | 2005-01-28 | 2008-03-12 | Nxp股份有限公司 | 调试装置和方法 |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2197506A (en) * | 1986-10-27 | 1988-05-18 | Burr Brown Ltd | Providing and handling break points in a software monitor |
US4819234A (en) * | 1987-05-01 | 1989-04-04 | Prime Computer, Inc. | Operating system debugger |
JPH05241889A (ja) * | 1992-02-26 | 1993-09-21 | Nec Corp | 機械語命令のステップ実行方式 |
EP0992906B1 (en) * | 1998-10-06 | 2005-08-03 | Texas Instruments Inc. | Apparatus and method for software breakpoint in a delay slot |
US6480818B1 (en) | 1998-11-13 | 2002-11-12 | Cray Inc. | Debugging techniques in a multithreaded environment |
US7047519B2 (en) * | 2001-09-26 | 2006-05-16 | International Business Machines Corporation | Dynamic setting of breakpoint count attributes |
US6948053B2 (en) * | 2002-02-25 | 2005-09-20 | International Business Machines Corporation | Efficiently calculating a branch target address |
US7086033B2 (en) * | 2002-04-25 | 2006-08-01 | International Business Machines Corporation | Software debugger having a monitor for monitoring conditional statements within a software program |
US7225431B2 (en) * | 2002-10-24 | 2007-05-29 | International Business Machines Corporation | Method and apparatus for setting breakpoints when debugging integrated executables in a heterogeneous architecture |
US7299456B2 (en) * | 2003-09-18 | 2007-11-20 | International Business Machines Corporation | Run into function |
US7543186B2 (en) * | 2004-09-13 | 2009-06-02 | Sigmatel, Inc. | System and method for implementing software breakpoints |
JP2006227681A (ja) | 2005-02-15 | 2006-08-31 | Matsushita Electric Ind Co Ltd | デバッグ装置、デバッグ方法およびプログラム |
JP4718901B2 (ja) * | 2005-05-27 | 2011-07-06 | パナソニック株式会社 | 命令実行装置、デバッグ方法、デバッグ装置及びデバッグプログラム |
JP4853998B2 (ja) * | 2005-09-16 | 2012-01-11 | ルネサスエレクトロニクス株式会社 | デバッガ装置及びそのデバッガ装置を使用したデバッグ方法 |
US7950001B2 (en) * | 2006-09-08 | 2011-05-24 | International Business Machines Corporation | Method and apparatus for instrumentation in a multiprocessing environment |
US8572577B2 (en) * | 2008-06-20 | 2013-10-29 | International Business Machines Corporation | Monitoring changes to data within a critical section of a threaded program |
-
2009
- 2009-12-14 CN CN2009102423739A patent/CN102096629B/zh active Active
-
2010
- 2010-11-18 EP EP20100837002 patent/EP2506145B1/en active Active
- 2010-11-18 WO PCT/CN2010/078866 patent/WO2011072565A1/zh active Application Filing
-
2012
- 2012-06-14 US US13/523,279 patent/US8555256B2/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1271896A (zh) * | 1999-04-23 | 2000-11-01 | 太阳微系统有限公司 | 调试优化代码的方法和设备 |
FR2880963A1 (fr) * | 2005-01-19 | 2006-07-21 | Atmel Corp | Points d'arrets logiciels destines a etre utilises avec des dispositifs a memoire |
CN101142560A (zh) * | 2005-01-28 | 2008-03-12 | Nxp股份有限公司 | 调试装置和方法 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103530214A (zh) * | 2012-07-04 | 2014-01-22 | 三星电子株式会社 | 用于可重构处理器的源码级调试设备与方法 |
CN108027733A (zh) * | 2015-09-19 | 2018-05-11 | 微软技术许可有限责任公司 | 在目标字段中存储无效 |
Also Published As
Publication number | Publication date |
---|---|
EP2506145A4 (en) | 2012-12-12 |
EP2506145B1 (en) | 2015-04-22 |
US20120254666A1 (en) | 2012-10-04 |
US8555256B2 (en) | 2013-10-08 |
WO2011072565A1 (zh) | 2011-06-23 |
EP2506145A1 (en) | 2012-10-03 |
CN102096629B (zh) | 2013-09-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102096629B (zh) | 经过性断点设置、调试方法和装置 | |
CN103577315B (zh) | 反向调试器和反向调试方法 | |
US20050039078A1 (en) | Trace data source identification within a trace data stream | |
CN103729288A (zh) | 一种嵌入式多核环境下应用程序的调试方法 | |
CN1228173A (zh) | 同步方法 | |
CN102609241A (zh) | 热补丁方法及装置 | |
CN104063319A (zh) | 一种嵌入式系统的调试方法及其装置 | |
CN100334561C (zh) | 程序调试装置、程序调试方法 | |
JP2007058731A (ja) | プロセッサ、及び並列命令実行対応デバッグ装置 | |
JP2008033849A (ja) | 障害解析システム | |
US4628449A (en) | Vector interrupt system and method | |
US6728954B1 (en) | Method for allowing execution management of optimized code | |
US20120166887A1 (en) | Monitoring multiple data transfers | |
JP3429631B2 (ja) | 並列計算機システム | |
CN101467128B (zh) | 处理器和指令控制方法 | |
CN103246575B (zh) | 软件有效代码量统计方法和装置 | |
CN115599714A (zh) | 一种多线程同步的车端数据采集方法及装置 | |
JP3892873B2 (ja) | プログラマブルコントローラ | |
US5790872A (en) | Interrupt control handler for a RISC-type microprocessor | |
CN103593239A (zh) | Linux系统中应用进程命令处理的方法及装置 | |
CN107612919B (zh) | 协议配置方法及装置 | |
CN108932171B (zh) | 嵌入式软件交互方法 | |
JP2653412B2 (ja) | ブレークポイント設定方法 | |
JP2001154877A (ja) | 割込制御装置および方法 | |
KR100333487B1 (ko) | 병행 프로그램에서 동일한 실행 코드를 공유하는프로세스의 스태핑 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20211220 Address after: 450046 Floor 9, building 1, Zhengshang Boya Plaza, Longzihu wisdom Island, Zhengdong New Area, Zhengzhou City, Henan Province Patentee after: Super fusion Digital Technology Co.,Ltd. Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen Patentee before: HUAWEI TECHNOLOGIES Co.,Ltd. |