CN102662845B - 一种实现经过性数据断点的方法、装置及系统 - Google Patents
一种实现经过性数据断点的方法、装置及系统 Download PDFInfo
- Publication number
- CN102662845B CN102662845B CN201210112766.XA CN201210112766A CN102662845B CN 102662845 B CN102662845 B CN 102662845B CN 201210112766 A CN201210112766 A CN 201210112766A CN 102662845 B CN102662845 B CN 102662845B
- Authority
- CN
- China
- Prior art keywords
- breakpoint
- data breakpoint
- instruction
- source program
- data
- 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.)
- Expired - Fee Related
Links
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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明实施例提供的一种实现经过性数据断点的方法、装置及系统,涉及计算机领域,用以在Linux?ARM或Unix?ARM系统中实现经过性数据断点的同时,还可以重复使用该数据断点,该方法包括,当所述源程序运行到设置有数据断点的指令处时,取消所述数据断点;对所述设置有数据断点的指令进行解码;执行所述解码后的指令;重新在所述设置有数据断点的指令处设定数据断点;将程序计数器PC指针指向所述设置有数据断点的指令的下一条指令,其中,所述程序计数器PC指针用于存放将要执行的下一条指令的地址,本发明实施例用于实现经过性数据断点。
Description
技术领域
本发明涉及计算机领域,尤其涉及一种实现经过性数据断点的方法、装置及系统。
背景技术
经过性数据断点是软件定位数据或指令后,进行改写的必要功能。经过性数据断点的基本原理是将要监控的数据或指令地址设置到CPU的调试寄存器中,当CPU访问被监控的数据或指令地址时就会触发一个trap(陷阱)异常处理程序,处理完该trap异常处理程序后会恢复到触发该trap异常处理程序的上下文,继续执行。整个过程不影响原系统的状态。
但是,现有的LinuxARM或UnixARM系统实现断点处理时有如下问题:
当源程序运行到被监控的数据或指令的地址处时,CPU会触发一个trap异常处理程序,在LinuxARM或UnixARM系统中,由于这个trap为同步异常,所以在执行完trap异常处理程序后,会重新执行那条触发trap的指令。这样一来,又会再次触发trap异常处理程序,结果造成循环触发,无法实现经过性数据断点,进而导致中断现有软件系统的业务的问题。
发明内容
本发明的实施例提供一种实现经过性数据断点的方法、装置及系统,用以在linuxARM或UnixARM系统中实现经过性数据断点。
为达到上述目的,本发明的实施例采用如下技术方案:
一方面,提供一种实现经过性数据断点的方法,应用在运行有源程序的LinuxARM或UnixARM系统中,所述源程序中设置有至少一个数据断点;所述方法包括:
当所述源程序运行到设置有数据断点的指令处时,取消所述数据断点;
对所述设置有数据断点的指令进行解码;
执行所述解码后的指令;
重新在所述设置有数据断点的指令处设定数据断点;
将程序计数器PC指针指向所述设置有数据断点的指令的下一条指令,其中,所述程序计数器PC指针用于存放将要执行的下一条指令的地址。
一方面,提供一种实现经过性数据断点的方法,应用在运行有源程序的LinuxARM或UnixARM系统中;所述源程序中设置有至少一个数据断点;所述方法包括:
当所述源程序运行到设置有数据断点的指令处时,取消所述数据断点;
备份所述设置有数据断点的指令的下一条指令,作为备份指令;
将所述设置有数据断点的指令的下一条指令修改为非法指令;
执行所述设置有数据断点的指令以及所述修改后的下一条指令;
恢复所述设置有数据断点的指令处的数据断点;
将所述修改后的下一条指令恢复为所述备份指令。
一方面,提供一种通信系统,所述通信系统包括内存和至少一个CPU;
所述CPU中运行有操作系统,所述操作系统之上运行有至少一种应用程序,所述应用程序包括源程序以及与之关联的至少一个异常处理程序;所述内存中载入有所述源程序和所述异常处理程序,所述源程序中设置有至少一个数据断点,当所述源程序运行到具有数据断点的指令处时触发所述异常处理程序,所述异常处理程序还用于,
当所述源程序运行到设置有数据断点的指令处时,取消所述数据断点;
对所述设置有数据断点的指令进行解码;
执行所述解码后的指令;
重新在所述设置有数据断点的指令处设定数据断点;
将程序计数器PC指针指向所述设置有数据断点的指令的下一条指令,其中,所述程序计数器PC指针用于存放将要执行的下一条指令的地址。
一方面,提供一种通信系统,所述通信系统包括内存和至少一个CPU;
所述CPU中运行有操作系统,所述操作系统之上运行有至少一种应用程序,所述应用程序包括源程序以及与之关联的至少一个异常处理程序;所述内存中载入有所述源程序和所述异常处理程序,所述源程序中设置有至少一个数据断点,当所述源程序运行到具有数据断点的指令处时触发异常处理程序,所述异常处理程序还用于,
当所述源程序运行到设置有数据断点的指令处时,取消所述数据断点;
备份所述设置有数据断点的指令的下一条指令,作为备份指令;
将所述设置有数据断点的指令的下一条指令修改为非法指令;
执行所述设置有数据断点的指令以及所述修改后的下一条指令;
恢复所述设置有数据断点的指令处的数据断点;
将所述修改后的下一条指令恢复为所述备份指令。
一方面,提供一种实现经过性数据断点的装置,应用在运行有源程序的LinuxARM或UnixARM系统中,所述源程序中设置有至少一个数据断点,其特征在于,所述经过性数据断点的装置包括:
第一取消模块,用于当所述源程序运行到设置有数据断点的指令处时,取消所述数据断点;
解码模块,用于对所述设置有数据断点的指令进行解码;
第一执行模块,用于执行所述解码后的指令;
设定模块,用于重新在所述设置有数据断点的指令处设定数据断点;
指向模块,用于将程序计数器PC指针指向所述设置有数据断点的指令的下一条指令,其中,所述程序计数器PC指针用于存放将要执行的下一条指令的地址。
一方面,提供一种实现经过性数据断点的装置,应用在运行有源程序的LinuxARM或UnixARM系统中;所述源程序中设置有至少一个数据断点,其特征在于,所述经过性数据断点的装置包括:
第二取消模块,用于当所述源程序运行到设置有数据断点的指令处时,取消所述数据断点;
备份模块,用于备份所述设置有数据断点的指令的下一条指令,作为备份指令;
修改模块,用于将所述设置有数据断点的指令的下一条指令修改为非法指令;
第二执行模块,用于执行所述设置有数据断点的指令以及所述修改后的下一条指令;
恢复模块,用于恢复所述设置有数据断点的指令处的数据断点;
替换模块,用于将所述修改后的下一条指令恢复为所述备份指令。
本发明实施例提供的实现经过性数据断点的方法、装置及系统,通过在异常处理程序中仿真执行触发异常处理程序的指令后返回源程序执行触发异常处理程序的指令的下一条指令,或者在异常处理程序中取消该触发异常处理程序的数据断点,并保存触发该异常处理程序的指令的下一条指令及设置该下一条指令为非法指令,从而达到了实现经过性数据断点的效果,并且不会再次触发异常处理程序,造成循环触发,同时还可以重复使用该数据断点。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种实现经过性数据断点的方法;
图2为本发明实施例提供的另一种实现经过性数据断点的方法;
图3为本发明实施例提供的又一种实现经过性数据断点的方法;
图4a为本发明实施例的通信系统的一种结构示意图;
图4b为本发明实施例的通信系统的局部逻辑示意图;
图4c为一种传统的应用程序的编译过程的原理示意图;
图5为本发明实施例提供的一种实现经过性数据断点的装置;
图6为本发明实施例提供的另一种实现经过性数据断点的装置;
图7为本发明实施例提供的又一种实现经过性数据断点的装置。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供的实现经过性数据断点的方法,应用在运行有源程序的LinuxARM或UnixARM系统中,所述源程序中设置有至少一个数据断点;该方法如图1所示,包括:
S101、当所述源程序运行到设置有数据断点的指令处时,取消所述数据断点。
具体的,取消源程序的断点处的数据断点可以直接调用操作系统中取消数据断点的方法。
S102、对所述设置有数据断点的指令进行解码。
具体的,由于CPU在源程序中执行到数据断点处时,触发异常程序后,都会保存该触发异常处理程序的指令的上下文信息,以使得CPU在执行完异常处理程序后会恢复到被中断的源程序的上下文继续执行,该过程可以通过现有技术实现,在此不再赘述。
该步骤中通过保存的触发异常处理程序的指令的上下文信息,查找出该指令,由于该指令是不可预知的机器语言,所以此时需要解码该指令以得到该指令的信息,为下一步操作奠定基础。
S103、执行所述解码后的指令。
具体的,根据上步骤中解码出的触发异常处理程序的指令,调用相应的方法来执行。
S104、重新在所述设置有数据断点的指令处设定数据断点。
具体的,可以在该异常程序中直接调用内核提供的设置数据断点的方法进行设置。
S105、将程序计数器PC指针指向所述设置有数据断点的指令的下一条指令,其中,所述程序计数器PC指针用于存放将要执行的下一条指令的地址。
具体的,在执行触发异常处理程序前,由于没有执行设置有数据断点的指令,所以程序计数器PC指针还是会指向所述设置有数据断点的指令,这时,为了保证CPU在执行完异常程序后,返回源程序时,执行触发所述异常处理程序的指令的下一条指令,就需要将PC指针指向所述设置有数据断点的指令的下一条指令,示例性的,可以将PC指针指向PC=PC+4的位置,并且,由异常处理程序返回到所述源程序中的过程可以通过现有技术可以实现,此处不再赘述。
本发明实施例提供的实现经过性数据断点的方法,通过在异常处理程序中仿真执行触发异常处理程序的指令后返回源程序执行触发异常处理程序的指令的下一条指令,从而达到了实现经过性数据断点的效果,并且不会再次触发异常处理程序,造成循环触发,同时还可以重复使用该数据断点。
优选的,如图2所示,所述实现经过性数据断点的方法还包括,
S106、创建至少一个数据断点文件,所述数据断点文件用于记录要监控的断点的信息。
具体的,创建数据断点文件的过程为:
首先,创建数据断点文件目录,该步骤可以通过调用Linux系统中的kernel_kobj属性来创建数据断点目录,示例性的,创建hwbrk这个目录,通过下列一段程序实现:
hw_breakpoint_kobj=kobject_create_and_add(″hwbrk″,kernel_kobj);if(!hw_breakpoint_kobj)
return-ENOMEM;
其次,在所述数据断点目录中创建至少一个数据断点文件,该过程通过调用Linux系统内核提供的函数来创建文件,如sysfs_create_group等,示例性的,在hwbrk数据断点目录下创建数据断点的文件,可以通过以下程序代码实现:
需要说明的是,可以通过在数据断点文件的写属性中调用Linux系统内核提供的与数据断点相关的函数来实现在源程序中设置数据断点。
具体的,在该数据断点文件中写入要监控的断点地址,根据所述数据断点文件中的断点地址在所述源程序中设置数据断点,同样的,还可以将用户需要监控的断点参数写入所述数据断点文件中;所述数据断点文件根据所述断点参数到预先设置的符号表中去查找相应的断点地址,并根据所述断点地址在源程序中设置数据断点。
其中,当该数据断点文件写入数据后,会判断该数据为断点地址还是断点参数,当该数据为断点地址时,该数据断点文件会在源程序的相应位置处设置数据断点,以使源程序运行到该数据断点处时,触发异常处理程序;当该数据为断点参数时,该数据断点文件会查找出该断点参数相应的断点地址,并在该断点地址处设置数据断点,以使源程序运行到具有该断点参数的指令处时,触发异常处理程序,其中,该断点参数包括符号名或参数值。
更具体的,可以通过以下程序代码实现根据写入的断点地址在源程序中设置数据断点:
这样,可以通过在该数据断点文件中写入要监控的断点参数或断点地址,以在源程序中相应位置处设置数据断点,方便了用户使用,需要说明的是,该断点参数可以是符号名或者参数值。
需要说明的是,还可以设置数据断点文件的读属性,来对该数据断点文件进行一些操作限制,具体实现过程为:
进一步的,还可以将用户需要监控的断点参数以及要监控的断点参数的类型写入所述数据断点文件中;根据所述断点参数和所述断点参数的类型查找相应的断点地址,并根据所述断点地址在源程序中设置数据断点,该断点参数的类型为:可读类型,可写类型以及可读可写类型。
这样,不仅可以通过在数据断点文件中写入要监控断点参数,还可以通过在该数据断点文件写入要监控的断点参数的类型,以在源程序相应位置处设置数据断点,进一步方便了用户使用。
需要说明的是,根据所述断点参数和所述断点参数的类型查找相应的断点地址,可以通过在相应表中查找相应的断点地址,该过程为现有技术,此处不再赘述。
示例性的,该表可以为操作系统中存储的符号表,当该数据断点文件写入断点参数和断点参数的类型后,该数据断点文件会在符号表中查找出符合该断点参数类型的断点参数的断点地址,并根据该断点地址在源程序中设置数据断点。
更进一步的,还可以将用户需要监控的断点参数以及要监控的断点参数的范围写入所述数据断点文件中;根据所述断点参数和所述断点参数的范围查找相应的断点地址,并根据所述断点地址在所述源程序中设置数据断点。
这样,不仅可以通过在数据断点文件中写入要监控的断点参数,还可以通过在该数据断点文件中写入要监控的断点参数的范围,以在源程序相应位置处设置数据断点,又进一步的方便了用户的使用。
示例性的,当该数据断点文件写入断点参数和要监控的断点参数范围后,该数据断点文件会在符号表中查找出符合该断点参数范围的断点参数的断点地址,并根据该断点地址在源程序中设置数据断点。
需要说明的是,当数据断点文件只写入了上述内容的断点参数,断点地址,断点参数的类型和断点参数范围中的任意一个或多个,则其他为默认值,显然,这样能够更加灵活的通过该数据断点文件在源程序中设置数据断点。
本发明实施例提供的实现经过性数据断点的方法,应用在运行有源程序的LinuxARM或UnixARM系统中,所述源程序中设置有至少一个数据断点,所述方法如图3所示,
在所述异常处理程序中进行以下操作:
S301、当所述源程序运行到设置有数据断点的指令处时,取消所述数据断点。
具体的,取消源程序的断点处的数据断点可以直接调用内核中取消数据断点的方法。
S302、备份所述设置有数据断点的指令的下一条指令,作为备份指令。
具体的,该过程可以通过现有技术实现,此处不再赘述。
S303、将所述设置有数据断点的指令的下一条指令修改为非法指令。
S304、执行所述设置有数据断点的指令以及所述修改后的下一条指令。
需要说明的是,在执行完步骤303后,还需要仿真执行设置有数据断点的指令,在执行完该设置有数据断点的指令后,需要返回到源程序中,执行修改后的下一条指令,在该过程中,本领域技术人员可以根据本发明实施例的描述,具体完成上述过程,在此不再赘述。
S305、恢复所述设置有数据断点的指令处的数据断点。
具体的,该过程可以通过调用内核提供的设置数据断点的方法重新设置断点处的数据断点。
S306、将所述修改后的下一条指令恢复为所述备份指令。
本发明实施例提供的实现经过性数据断点的方法,通过在异常处理程序中取消该触发异常处理程序的数据断点,并保存触发该异常处理程序的指令的下一条指令及设置该下一条指令为非法指令,从而达到了实现经过性数据断点的效果,并且不会再次触发异常处理程序,造成循环触发,同时还可以重复使用该数据断点。
优选的,该实现经过性数据断点的方法,如图3所示,还包括,
S307、创建至少一个数据断点文件,所述数据断点文件用于记录要监控的断点的信息。
其中,创建数据断点文件的过程可以参考上述实施例中的步骤106。
具体的,在该数据断点文件中写入要监控的断点地址,根据所述数据断点文件中的断点地址在所述源程序中设置数据断点,同样的,还可以将用户需要监控的断点参数写入所述数据断点文件中;所述数据断点文件根据所述断点参数到预先设置的符号表中去查找相应的断点地址,并根据所述断点地址在源程序中设置数据断点。
其中,当该数据断点文件写入数据后,会判断该数据为断点地址还是断点参数,当该数据为断点地址时,该数据断点文件会在源程序的相应位置处设置数据断点,以使源程序运行到该数据断点处时,触发异常处理程序;当该数据为断点参数时,该数据断点文件会查找出该断点参数相应的断点地址,并在该断点地址处设置数据断点,以使源程序运行到具有该断点参数的指令处时,触发异常处理程序,其中,该断点参数包括符号名或参数值。
这样,可以通过在该数据断点文件中写入要监控的断点值或地址,以在源程序中相应位置处设置数据断点,方便了用户使用。
进一步的,还可以将用户需要监控的断点参数以及要监控的断点参数的类型写入所述数据断点文件中;根据所述断点参数和所述断点参数的类型查找相应的断点地址,并根据所述断点地址在源程序中设置数据断点,该断点参数的类型为:可读类型,可写类型以及可读可写类型。
这样,不仅可以通过在数据断点文件中写入要监控断点参数,还可以通过在该数据断点文件写入要监控的断点参数的类型,以在源程序相应位置处设置数据断点,进一步方便了用户使用。
需要说明的是,根据所述断点参数和所述断点参数的类型查找相应的断点地址,可以通过在相应表中查找相应的断点地址,该过程为现有技术,此处不再赘述。
示例性的,该表可以为操作系统中存储的符号表,当该数据断点文件写入断点参数和断点参数的类型后,该数据断点文件会在符号表中查找出符合该断点参数类型的断点参数的断点地址,并根据该断点地址在源程序中设置数据断点。
更进一步的,还可以将用户需要监控的断点参数以及要监控的断点参数的范围写入所述数据断点文件中;根据所述断点参数和所述断点参数的范围查找相应的断点地址,并根据所述断点地址在所述源程序中设置数据断点。
这样,不仅可以通过在数据断点文件中写入要监控的断点参数,还可以通过在该数据断点文件中写入要监控的断点参数的范围,以在源程序相应位置处设置数据断点,又进一步的方便了用户的使用。
示例性的,当该数据断点文件写入断点参数和要监控的断点参数范围后,该数据断点文件会在符号表中查找出符合该断点参数范围的断点参数的断点地址,并根据该断点地址在源程序中设置数据断点。
需要说明的是,当数据断点文件只写入了上述内容的断点参数,断点地址,断点参数的类型和断点参数范围中的任意一个或多个,则其他为默认值,显然,这样能够更加灵活的通过该数据断点文件在源程序中设置数据断点。
本发明实施例提供的一种通信系统,其系统结构示意图以及局部逻辑示意图分别如图4a和4b所示,图4a中包括三个CPU,即CPU1,CPU2,CPU3,所述CPU通过总线访问内存,应当理解的是,本发明实施例的通信系统中可以包括一个CPU,即单CPU的通信系统,也可以包括多个CPU,即多CPU(多核)的通信系统。即本发明实施例的通信系统,包括至少一个CPU和内存,所述CPU上运行有操作系统,所述操作系统之上运行有至少一种应用程序(亦称为软件),用于执行特定的任务,所述应用程序包括源程序以及与之关联的至少一个异常处理程序,其中:
所述内存中载入有所述源程序和所述异常处理程序,所述源程序中设置有至少一个数据断点,当所述源程序运行到具有数据断点的指令处时触发异常处理程序,所述异常处理程序用于,当所述源程序运行到设置数据断点的指令处时,通过调用操作系统中取消数据断点的方法取消所述数据断点;对所述所述设置有数据断点的指令进行解码,并执行解码后的指令,具体的,调用相应的方法来执行;重新在所述设置有数据断点的指令处设定数据断点;将程序计数器PC指针指向所述设置有数据断点的指令的下一条指令,其中,所述程序计数器PC指针用于存放将要执行的下一条指令的地址。
本发明实施例的通信系统进一步包括:编译器(图中未示意出),用于将源程序进行编译以生成可执行文件,请参阅图4c,为一种传统的应用程序的编译过程的原理示意图,如图4c所示,传统的编译过程包括:通过编译器将源文件(.c文件)编译成目标文件(.o文件,即二进制文件),再将多个目标文件链接成可执行文件。编译器在编译源程序之前,用户可以设置一些经过性数据断点,这样,源程序运行到具有数据断点的指令处时,就会触发异常处理程序;经过性数据断点的基本原理是将要监控的数据/指令地址设置到cpu的debug寄存器中,当cpu访问被监控的数据/指令地址时就出触发一个异常处理程序,处理完异常处理程序后会恢复到触发异常处理程序的上下文,继续执行,整个过程不影响原系统的状态,达到“经过性数据断点”的效果。
在本发明实施例中还通过提供一种数据断点文件来在源程序中设置经过性数据断点,具体方法是,在操作系统的内核中创建数据断点文件的目录;在所述数据断点目录中创建至少一个数据断点文件;所述数据断点文件用于写入要监控的断点地址,并根据所述断点地址在源程序中设置数据断点,这样一来,通过在该文件中写入数据断点的断点地址,就可以在源程序中设置数据断点,方便了用户使用,除此之外,该数据断点文件还可以通过写入断点参数来设置数据断点,并且还可以通过写入断点参数类型来进一步设置数据断点,而且还可以通过写入断点参数范围来设置数据断点。
应当理解的是,本发明实施例通信系统具体可以是Linuxarm系统,或者UnixARM系统,也可以是LinuxX86系统、Solaris、aix等类Unix系统等等。例如,在Linuxarm系统下,包括至少一个arm架构的CPU,CPU上运行有Linux操作系统,所述Linux操作系统之上运行有至少一种应用程序(亦称为软件),所述应用程序由源程序以及与之关联的至少一个异常处理程序(具体功能同上,故不再赘述)。
本发明实施例提供的通信系统,通过在异常处理程序中仿真执行触发异常处理程序的指令后返回源程序执行触发异常处理程序的指令的下一条指令,或者在异常处理程序中取消该触发异常处理程序的数据断点,并保存触发该异常处理程序的指令的下一条指令及设置该下一条指令为非法指令,从而达到了实现经过性数据断点的效果,并且不会再次触发trap异常处理程序,造成循环触发,同时还可以重复使用该数据断点。
本发明实施例提供的一种通信系统,该信系统中可以包括一个CPU,即单CPU的通信系统,也可以包括多个CPU,即多CPU(多核)的通信系统。即本发明实施例的通信系统,包括至少一个CPU和内存,所述CPU上运行有操作系统,所述操作系统之上运行有至少一种应用程序(亦称为软件),用于执行特定的任务,所述应用程序包括源程序以及与之关联的至少一个异常处理程序,其中:
所述内存中载入所述有源程序和所述异常处理程序,所述源程序中设置有至少一个数据断点,当所述源程序运行到具有数据断点的指令处时触发异常处理程序,所述异常处理程序还用于,当所述源程序运行到设置有数据断点的指令处时,取消所述数据断点;备份所述设置有数据断点的指令的下一条指令,作为备份指令;将所述设置有数据断点的指令的下一条指令修改为非法指令;执行所述设置有数据断点的指令以及所述修改后的下一条指令;恢复所述设置有数据断点的指令处的数据断点;将所述修改后的下一条指令恢复为所述备份指令。
本发明实施例的通信系统进一步包括:编译器(图中未示意出),用于将源程序进行编译以生成可执行文件,请参阅图4c,为一种传统的应用程序的编译过程的原理示意图,如图4c所示,传统的编译过程包括:通过编译器将源文件(.c文件)编译成目标文件(.o文件,即二进制文件),再将多个目标文件链接成可执行文件。编译器在编译源程序之前,用户可以设置一些经过性数据断点,这样,源程序运行到具有数据断点的指令处时,就会触发异常处理程序;经过性数据断点的基本原理是将要监控的数据/指令地址设置到cpu的debug寄存器中,当cpu访问被监控的数据/指令地址时就出触发一个异常处理程序,处理完异常处理程序后会恢复到触发异常处理程序的上下文,继续执行,整个过程不影响原系统的状态,达到“经过性数据断点”的效果。
在本发明实施例中还通过提供一种数据断点文件来在源程序中设置经过性数据断点,具体方法是,在操作系统的内核中创建数据断点文件的目录;在所述数据断点目录中创建至少一个数据断点文件;所述数据断点文件用于写入要监控的断点地址,并根据所述断点地址在源程序中设置数据断点,这样一来,通过在该文件中写入数据断点的断点地址,就可以在源程序中设置数据断点,方便了用户使用,除此之外,该数据断点文件还可以通过写入断点参数来设置数据断点,并且还可以通过写入断点参数类型来进一步设置数据断点,而且还可以通过写入断点参数范围来设置数据断点。
应当理解的是,本发明实施例通信系统具体可以是Linuxarm系统,或者UnixARM系统,也可以是LinuxX86系统、Solaris、aix等类Unix系统等等。例如,在Linuxarm系统下,包括至少一个arm架构的CPU,CPU上运行有Linux操作系统,所述Linux操作系统之上运行有至少一种应用程序(亦称为软件),所述应用程序由源程序以及与之关联的至少一个异常处理程序(具体功能同上,故不再赘述)。
本发明实施例提供的通信系统,通过在异常处理程序中仿真执行触发异常处理程序的指令后返回源程序执行触发异常处理程序的指令的下一条指令,或者在异常处理程序中取消该触发异常处理程序的数据断点,并保存触发该异常处理程序的指令的下一条指令及设置该下一条指令为非法指令,从而达到了实现经过性数据断点的效果,并且不会再次触发trap异常处理程序,造成循环触发,同时还可以重复使用该数据断点。
本发明实施例提供的一种实现经过性数据断点的装置,应用在运行有源程序的LinuxARM或UnixARM系统中,所述源程序中设置有至少一个数据断点,如图5所示,该装置50包括:
第一取消模块501,用于当所述源程序运行到设置有数据断点的指令处时,取消所述数据断点。
解码模块502,用于对所述设置有数据断点的指令进行解码。
第一执行模块503,用于执行所述解码后的指令。
设定模块504,用于重新在所述设置有数据断点的指令处设定数据断点。
指向模块505,用于将程序计数器PC指针指向所述设置有数据断点的指令的下一条指令,其中,所述程序计数器PC指针用于存放将要执行的下一条指令的地址。
本发明实施例提供的实现经过性数据断点的装置,通过在异常处理程序中仿真执行触发异常处理程序的指令后返回源程序执行触发异常处理程序的指令的下一条指令,这样一来,达到了实现经过性数据断点的效果,并且还可以重复使用该数据断点。
优选的,如图6所示,该经过性数据断点的装置50还包括:
创建文件模块506,用于创建至少一个数据断点文件。
写入模块507,用于将用户需要监控的断点地址写入所述数据断点文件中。
设置模块508,用于根据所述数据断点文件中的断点地址在所述源程序中设置数据断点。
具体的,写入模块507在该数据断点文件中写入要监控的断点地址,设置模块508根据所述数据断点文件中的断点地址在所述源程序中设置数据断点,同样的,写入模块507还可以将用户需要监控的断点参数写入所述数据断点文件中;设置模块508根据所述断点参数到预先设置的符号表中去查找相应的断点地址,并根据所述断点地址在源程序中设置数据断点。
这样,可以通过在该数据断点文件中写入要监控的断点值或地址,以在源程序中相应位置处设置数据断点,方便了用户使用。
进一步的,写入模块507还可以将用户需要监控的断点参数以及要监控的断点参数的类型写入所述数据断点文件中;设置模块508根据所述断点参数和所述断点参数的类型查找相应的断点地址,并根据所述断点地址在源程序中设置数据断点,该断点参数的类型为:可读类型,可写类型以及可读可写类型。
这样,不仅可以通过在数据断点文件中写入要监控断点参数,还可以通过在该数据断点文件写入要监控的断点参数的类型,以在源程序相应位置处设置数据断点,进一步方便了用户使用。
需要说明的是,根据所述断点参数和所述断点参数的类型查找相应的断点地址,可以通过在相应表中查找相应的断点地址,该过程为现有技术,此处不再赘述。
示例性的,该表可以为操作系统中存储的符号表,当该数据断点文件写入断点参数和断点参数的类型后,该数据断点文件会在符号表中查找出符合该断点参数类型的断点参数的断点地址,并根据该断点地址在源程序中设置数据断点。
更进一步的,写入模块507还可以将用户需要监控的断点参数以及要监控的断点参数的范围写入所述数据断点文件中;设置模块508根据所述断点参数和所述断点参数的范围查找相应的断点地址,并根据所述断点地址在所述源程序中设置数据断点。
这样,不仅可以通过在数据断点文件中写入要监控的断点参数,还可以通过在该数据断点文件中写入要监控的断点参数的范围,以在源程序相应位置处设置数据断点,又进一步的方便了用户的使用。
示例性的,当该数据断点文件写入断点参数和要监控的断点参数范围后,该数据断点文件会在符号表中查找出符合该断点参数范围的断点参数的断点地址,并根据该断点地址在源程序中设置数据断点。
需要说明的是,当数据断点文件只写入了上述内容的断点参数,断点地址,断点参数的类型和断点参数范围中的任意一个或多个,则其他为默认值,显然,这样能够更加灵活的通过该数据断点文件在源程序中设置数据断点。
本发明实施例提供的一种实现经过性数据断点的装置,应用在运行有源程序的LinuxARM或UnixARM系统中,所述源程序中设置有至少一个数据断点,该装置70,如图7所示,包括:
第二取消模块701,用于当所述源程序运行到设置有数据断点的指令处时,取消所述数据断点;
备份模块702,用于备份所述设置有数据断点的指令的下一条指令,作为备份指令;
修改模块703,用于将所述设置有数据断点的指令的下一条指令修改为非法指令;
第二执行模块704,用于执行所述设置有数据断点的指令以及所述修改后的下一条指令;
恢复模块705,用于恢复所述设置有数据断点的指令处的数据断点;
替换模块706,用于将所述修改后的下一条指令恢复为所述备份指令。
本发明实施例提供的实现经过性数据断点的装置,通过在异常处理程序中取消该触发异常处理程序的数据断点,并保存触发该异常处理程序的指令的下一条指令及设置该下一条指令为非法指令,当源程序运行到触发该异常处理程序的指令的下一条指令时,会触发非法异常处理程序,在该非法异常处理程序中,恢复先前的数据断点并将保存的指令替换本条指令,这样,当源程序运行到该数据断点处时达到了实现经过性数据断点的效果,并且还可以重复使用该数据断点。
优选的,该经过性数据断点的装置70还包括:
创建文件模块707,用于创建至少一个数据断点文件。
写入模块708,用于将用户需要监控的断点地址写入所述数据断点文件中。
设置模块709,用于根据所述数据断点文件中的断点地址在所述源程序中设置数据断点。
具体的该优选的内容提供的创建文件模块707如图6所示的创建文件模块506,写入模块708如图6所示的写入模块507,设置模块709如图6所示的设置模块508。
具体的,写入模块708可以在该数据断点文件中写入要监控的断点地址,设置模块709根据所述数据断点文件中的断点地址在所述源程序中设置数据断点,同样的,写入模块708还可以将用户需要监控的断点参数写入所述数据断点文件中;设置模块709根据所述断点参数到预先设置的符号表中去查找相应的断点地址,并根据所述断点地址在源程序中设置数据断点。
这样,可以通过在该数据断点文件中写入要监控的断点值或地址,以在源程序中相应位置处设置数据断点,方便了用户使用。
进一步的,写入模块708还可以将用户需要监控的断点参数以及要监控的断点参数的类型写入所述数据断点文件中;设置模块709根据所述断点参数和所述断点参数的类型查找相应的断点地址,并根据所述断点地址在源程序中设置数据断点,该断点参数的类型为:可读类型,可写类型以及可读可写类型。
这样,不仅可以通过在数据断点文件中写入要监控断点参数,还可以通过在该数据断点文件写入要监控的断点参数的类型,以在源程序相应位置处设置数据断点,进一步方便了用户使用。
需要说明的是,根据所述断点参数和所述断点参数的类型查找相应的断点地址,可以通过在相应表中查找相应的断点地址,该过程为现有技术,此处不再赘述。
示例性的,该表可以为操作系统中存储的符号表,当该数据断点文件写入断点参数和断点参数的类型后,该数据断点文件会在符号表中查找出符合该断点参数类型的断点参数的断点地址,并根据该断点地址在源程序中设置数据断点。
更进一步的,写入模块708还可以将用户需要监控的断点参数以及要监控的断点参数的范围写入所述数据断点文件中;设置模块709根据所述断点参数和所述断点参数的范围查找相应的断点地址,并根据所述断点地址在所述源程序中设置数据断点。
这样,不仅可以通过在数据断点文件中写入要监控的断点参数,还可以通过在该数据断点文件中写入要监控的断点参数的范围,以在源程序相应位置处设置数据断点,又进一步的方便了用户的使用。
示例性的,当该数据断点文件写入断点参数和要监控的断点参数范围后,该数据断点文件会在符号表中查找出符合该断点参数范围的断点参数的断点地址,并根据该断点地址在源程序中设置数据断点。
需要说明的是,当数据断点文件只写入了上述内容的断点参数,断点地址,断点参数的类型和断点参数范围中的任意一个或多个,则其他为默认值,显然,这样能够更加灵活的通过该数据断点文件在源程序中设置数据断点。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (16)
1.一种实现经过性数据断点的方法,应用在运行有源程序的LinuxARM或UnixARM系统中,所述源程序中设置有至少一个数据断点;其特征在于,所述方法包括:
当所述源程序运行到设置有数据断点的指令处时,触发异常处理程序,在所述异常处理程序中进行以下操作:
取消所述数据断点;
对所述设置有数据断点的指令进行解码;
执行所述解码后的指令;
重新在所述设置有数据断点的指令处设定数据断点;
将程序计数器PC指针指向所述设置有数据断点的指令的下一条指令,其中,所述程序计数器PC指针用于存放将要执行的下一条指令的地址;
在执行完所述异常处理程序后,返回所述源程序时,执行触发所述异常处理程序的指令的下一条指令。
2.根据权利要去1所述的方法,其特征在于,还包括:
创建至少一个数据断点文件,所述数据断点文件用于记录要监控的断点的信息。
3.根据权利要求2所述的方法,其特征在于,还包括:
将用户需要监控的断点地址写入所述数据断点文件中;
根据所述数据断点文件中的断点地址在所述源程序中设置数据断点。
4.根据权利要求2所述的方法,其特征在于,还包括:
将用户需要监控的断点参数写入所述数据断点文件中;
根据所述断点参数到预先设置的符号表中去查找相应的断点地址,并根据所述断点地址在源程序中设置数据断点。
5.根据权利要2所述的方法,其特征在于,还包括:
将用户需要监控的断点参数以及要监控的断点参数的类型写入所述数据断点文件中;
根据所述断点参数和所述断点参数的类型查找相应的断点地址,并根据所述断点地址在源程序中设置数据断点。
6.根据权利要求2所述的方法,其特征在于,还包括:
将用户需要监控的断点参数以及要监控的断点参数的范围写入所述数据断点文件中;
根据所述断点参数和所述断点参数的范围查找相应的断点地址,并根据所述断点地址在所述源程序中设置数据断点。
7.一种实现经过性数据断点的方法,应用在运行有源程序的LinuxARM或UnixARM系统中;所述源程序中设置有至少一个数据断点;其特征在于,所述方法包括:
当所述源程序运行到设置有数据断点的指令处时,触发异常处理程序,在所述异常处理程序中进行以下操作:
取消所述数据断点;
备份所述设置有数据断点的指令的下一条指令,作为备份指令;
将所述设置有数据断点的指令的下一条指令修改为非法指令;
执行所述设置有数据断点的指令;
在执行完所述设置有数据断点的指令后,返回所述源程序中,执行所述修改后的下一条指令;
当所述源程序运行到所述修改后的下一条指令时,触发非法异常处理程序,在所述非法异常处理程序中进行以下操作:
恢复所述设置有数据断点的指令处的数据断点;
将所述修改后的下一条指令恢复为所述备份指令。
8.根据权利要求7所述的实现经过性数据断点的方法,其特征在于,还包括:
创建至少一个数据断点文件,所述数据断点文件用于记录要监控的断点的信息。
9.根据权利要求8所述的实现经过性数据断点的方法,其特征在于,还包括:
将用户需要监控的断点地址写入所述数据断点文件中;
根据所述数据断点文件中的断点地址在所述源程序中设置数据断点。
10.根据权利要求8所述的实现经过性数据断点的方法,其特征在于,还包括:
将用户需要监控的断点参数写入所述数据断点文件中;
根据所述断点参数到预先设置的符号表中去查找相应的断点地址,并根据所述断点地址在源程序中设置数据断点。
11.根据权利要求8所述的实现经过性数据断点的方法,其特征在于,还包括:
将用户需要监控的断点参数以及要监控的断点参数的类型写入所述数据断点文件中;
根据所述断点参数和所述断点参数的类型查找相应的断点地址,并根据所述断点地址在源程序中设置数据断点。
12.根据权利要求8所述的实现经过性数据断点的方法,其特征在于,还包括:
将用户需要监控的断点参数以及要监控的断点参数的范围写入所述数据断点文件中;
根据所述断点参数和所述断点参数的范围查找相应的断点地址,并根据所述断点地址在所述源程序中设置数据断点。
13.一种通信系统,所述通信系统包括内存和至少一个CPU;
所述CPU中运行有操作系统,所述操作系统之上运行有至少一种应用程序,所述应用程序包括源程序以及与之关联的至少一个异常处理程序;所述内存中载入有所述源程序和所述异常处理程序,所述源程序中设置有至少一个数据断点,当所述源程序运行到具有数据断点的指令处时触发所述异常处理程序,其特征在于,所述异常处理程序还用于,
当所述源程序运行到设置有数据断点的指令处时,取消所述数据断点;
对所述设置有数据断点的指令进行解码;
执行所述解码后的指令;
重新在所述设置有数据断点的指令处设定数据断点;
将程序计数器PC指针指向所述设置有数据断点的指令的下一条指令,其中,所述程序计数器PC指针用于存放将要执行的下一条指令的地址;
在执行完所述异常处理程序后,返回所述源程序时,执行触发所述异常处理程序的指令的下一条指令。
14.根据权利要求13所述的通信系统,其特征在于,所述异常处理程序还用于,
创建至少一个数据断点文件;将用户需要监控的断点地址写入所述数据断点文件中;
根据所述数据断点文件中的断点地址在所述源程序中设置数据断点。
15.一种通信系统,其特征在于,所述通信系统包括内存和至少一个CPU;
所述CPU中运行有操作系统,所述操作系统之上运行有至少一种应用程序,所述应用程序包括源程序以及与之关联的至少一个异常处理程序;所述内存中载入有所述源程序和所述异常处理程序,所述源程序中设置有至少一个数据断点,当所述源程序运行到具有数据断点的指令处时触发异常处理程序,其特征在于,所述异常处理程序还用于,
当所述源程序运行到设置有数据断点的指令处时,取消所述数据断点;
备份所述设置有数据断点的指令的下一条指令,作为备份指令;
将所述设置有数据断点的指令的下一条指令修改为非法指令;
执行所述设置有数据断点的指令;
在执行完所述设置有数据断点的指令后,返回所述源程序中,执行所述修改后的下一条指令;
当所述源程序运行到所述修改后的下一条指令时,触发非法异常处理程序,在所述非法异常处理程序中进行以下操作:
恢复所述设置有数据断点的指令处的数据断点;
将所述修改后的下一条指令恢复为所述备份指令。
16.根据权利要求15所述的通信系统,其特征在于,所述异常处理程序还用于,
创建至少一个数据断点文件;将用户需要监控的断点地址写入所述数据断点文件中;
根据所述数据断点文件中的断点地址在所述源程序中设置数据断点。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210112766.XA CN102662845B (zh) | 2012-04-17 | 2012-04-17 | 一种实现经过性数据断点的方法、装置及系统 |
PCT/CN2012/083108 WO2013155822A1 (zh) | 2012-04-17 | 2012-10-17 | 一种实现经过性数据断点的方法、装置及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210112766.XA CN102662845B (zh) | 2012-04-17 | 2012-04-17 | 一种实现经过性数据断点的方法、装置及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102662845A CN102662845A (zh) | 2012-09-12 |
CN102662845B true CN102662845B (zh) | 2016-03-30 |
Family
ID=46772342
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210112766.XA Expired - Fee Related CN102662845B (zh) | 2012-04-17 | 2012-04-17 | 一种实现经过性数据断点的方法、装置及系统 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN102662845B (zh) |
WO (1) | WO2013155822A1 (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102662845B (zh) * | 2012-04-17 | 2016-03-30 | 华为技术有限公司 | 一种实现经过性数据断点的方法、装置及系统 |
CN103019865B (zh) * | 2012-12-28 | 2015-07-15 | 北京神州绿盟信息安全科技股份有限公司 | 虚拟机监控方法和系统 |
CN104461806A (zh) * | 2013-09-16 | 2015-03-25 | 中兴通讯股份有限公司 | 一种数据断点监控方法、装置及调试器 |
CN115878363A (zh) * | 2023-02-02 | 2023-03-31 | 北京紫光芯能科技有限公司 | 用于解析处理器异常的方法、装置及计算机可读存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101154183A (zh) * | 2006-09-29 | 2008-04-02 | 上海海尔集成电路有限公司 | 一种微控制器嵌入式在线仿真调试系统 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2557688C (en) * | 2006-08-30 | 2011-10-04 | Research In Motion Limited | System and method for implementing software breakpoints in an interpreter |
CN101339581B (zh) * | 2008-08-29 | 2012-07-18 | 北京中星微电子有限公司 | 基于中断通讯的嵌入式系统的在线调试仿真方法 |
CN102096629B (zh) * | 2009-12-14 | 2013-09-25 | 华为技术有限公司 | 经过性断点设置、调试方法和装置 |
CN102214137B (zh) * | 2010-04-06 | 2014-01-22 | 华为技术有限公司 | 调试方法和调试设备 |
CN102662845B (zh) * | 2012-04-17 | 2016-03-30 | 华为技术有限公司 | 一种实现经过性数据断点的方法、装置及系统 |
-
2012
- 2012-04-17 CN CN201210112766.XA patent/CN102662845B/zh not_active Expired - Fee Related
- 2012-10-17 WO PCT/CN2012/083108 patent/WO2013155822A1/zh active Application Filing
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101154183A (zh) * | 2006-09-29 | 2008-04-02 | 上海海尔集成电路有限公司 | 一种微控制器嵌入式在线仿真调试系统 |
Non-Patent Citations (1)
Title |
---|
嵌入式系统交叉调试器的设计与实现;梁泉;《中国优秀硕士学位论文全文数据库》;20090415;第5-6、10-11、18、25、27-31、45-47页,图3-4 * |
Also Published As
Publication number | Publication date |
---|---|
WO2013155822A1 (zh) | 2013-10-24 |
CN102662845A (zh) | 2012-09-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3093768B1 (en) | Debugging systems | |
US7836430B2 (en) | Reversing execution of instructions in a debugger | |
US7950001B2 (en) | Method and apparatus for instrumentation in a multiprocessing environment | |
US8856742B2 (en) | Distributed debugging | |
Fattori et al. | Dynamic and transparent analysis of commodity production systems | |
CN101446918B (zh) | 一种实现用户态调试器调试单个函数的方法及系统 | |
US8745596B2 (en) | Program debugging with dynamically inserted instrumentation | |
CN101667154A (zh) | 用于改善片上仿真系统中高级语言的仿真速度的装置和方法 | |
JP7042270B2 (ja) | セルフデバッギング | |
CN102662845B (zh) | 一种实现经过性数据断点的方法、装置及系统 | |
US8661417B2 (en) | Debugging program function | |
Honarmand et al. | Replay debugging: Leveraging record and replay for program debugging | |
Visan et al. | URDB: a universal reversible debugger based on decomposing debugging histories | |
US11366740B2 (en) | Debugging shared memory errors | |
US10169196B2 (en) | Enabling breakpoints on entire data structures | |
CN105095079A (zh) | 一种热点模块指令跟踪的方法及设备 | |
US11030075B2 (en) | Efficient register breakpoints | |
US20110055812A1 (en) | Sharable development environment bookmarks for functional/data flow | |
US8352714B2 (en) | Executing watchpoint instruction in pipeline stages with temporary registers for storing intermediate values and halting processing before updating permanent registers | |
JP6882320B2 (ja) | ベクトル命令の処理 | |
EP2600252A1 (en) | System and method for debugging of computer programs | |
Dolev et al. | Stabilization enabling technology | |
Dolev et al. | Stabilization enabling technology | |
Zhao et al. | C++ memory check tool based on dynamic binary instrumentation platform | |
Vostokov | Memory Dump Analysis Anthology |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20160330 Termination date: 20160417 |