一种断点调试方法和调试器的制作方法

文档序号:6429173阅读:213来源:国知局
专利名称:一种断点调试方法和调试器的制作方法
技术领域
本发明涉及计算机软件设计,尤其涉及一种断点调试方法和调试器。
背景技术
调试器是处理器体系结构设计与软硬件协同验证中不可或缺的一部分。一方面, 它在软件层次上对目标处理器的体系结构进行建模来模拟其执行行为,另一方面,通过提供调试接口,接收用户输入的各种控制信息,实现对程序执行过程中的数据流、控制流的监测及修改。调试器最基础、最核心的功能之一是断点功能,它可以让程序中断在需要的地方, 从而方便其分析。断点又可以分为行断点和条件断点两种,且以用户输入的条件断点为主。现有技术的调试器一般采用表达式计算来实现条件断点的解析,而表达式计算一般采用如下两种方案进行处理第一种方案其于栈结构的表达式计算,以后缀表达式a+b*c > (d*e+f)*g为例, 首先将后缀表达式利用栈操作生成中缀表达式abc*+de*f+g* >,按a,b,c*,+,d,e, *,f, +,g,*,>的顺序依次压栈,在压栈过程中,遇到有效操作符的时候,按照操作符所需要操作数的个数,从栈中弹出相应个数,计算后将结果再次压入栈中。例如,当压入操作符*的时候,需要将操作数c和b依次弹出栈,并计算b*c后将结果再压入到栈中。具体过程如图1 所示。第二种方案基于语义二叉树结构的表达式计算,按字符的优先级组织成二叉树结构,计算时应用深度优先搜索算法从二叉树的底层从左至右,从下至上依次进行计算。以第一种方案中的后缀表达式为例,处理的二叉树结构如图2所示。现有技术上述两种方案存在的缺点是只能处理有限的固定模式,应用面窄,当通过调试接口输入条件断点信息时,繁琐的表达式计算会严重影响调试器的执行效率,严重影响调试器性能。

发明内容
本发明的目的是提供一种执行效率高且稳定可靠的断点调试方法和调试器,来解决断点信息中繁琐的表达式计算问题,从而大幅提高了调试器的执行效率。为实现上述目的,本发明提供了一种断点调试方法,其特征在于包括以下步骤接收调试中的断点信息;将所述断点信息组合成断点函数并输出;加载动态链接库,所述动态链接库由所述断点函数进行编译生成。本发明还提供了一种调试器,其特征在于包括接收单元,用于接收调试中的断点信息;输出单元,用于将所述断点信息组合成断点函数并输出;加载单元,用于加载所述动态链接库。
本发明实施例的断点调试方法和调试器,通过将调试器接收的断点信息组合成函数并进行编译,生成供调试器加载调用,并执行的动态链接库中的函数,解决了调试器处理繁琐的条件断点表达式时遇到的执行效率低下问题,从而大幅提升调试器的执行效率。


图1为现有技术的基于栈结构的表达式计算;图2为现有技术的基于语义二叉树结构的表达式计算;图3为本发明一实施例的断点调试方法流程图;图4为本发明一实施例的调试器示意结构图;图5示意性示出了一种断点调试方法的处理系统。
具体实施例方式下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。图3为本发明一实施例的断点调试方法流程图。在步骤301,接收调试中的断点信息。调试器在调试中接收来自用户设置的断点信息,例如,用户设置的条件断点信息。 调试器将所有在调试中接收到的断点信息存储在断点缓冲器中。在步骤302,对所述断点信息组合成断点函数并输出。调试器在接收断点信息完成后,将存储在断点缓冲器中的断点信息组合成断点函数并输出。在一个实施例中,调试器将存储在断点缓冲器中的全部条件断点信息和需要变量进程地址组合成断点函数并输出,上述输出可以是输出到C语言文件中。输出的C语言文件的组织形式如下#define variable process—address…_declspec(dllexport)int_stdcall breakpoints_test(void){if(breakpint_expression_l)return 1 ;if(breakpint_expression_l)return2 ;…if(breakpint_expression_n)return η ;}其中各条件断点由if语句包装,在c语言级别上,当其中某一条件断点满足时,则返回相应的条件断点编号,调试器暂停执行。例如,上述语句“breakpintexpressiorul”为条件断点表达式,其条件断点编号为1,语句“return 1”为返回编号为1的条件断点。当条件断点表达式1满足条件时,则返回到编号为1的条件断点处,调试器暂停执行。在步骤303,对所述断点函数进行编译,生成动态链接库。当C语言文件输出成功后,调试器调用第三方编译器将步骤302中输出的C语言文件进行编译、汇编和链接,最后形成动态链接库(DLL)。在一个实施例中,调试器调用C语言编译器对输出的C语言文件进行编译、汇编和链接,形成DLL。在步骤304,加载所述动态链接库。调试器加载在步骤303中形成的动态链接库,加载后的动态链接库可供调试器调用,调试器在对断点的判断时可直接调用函数breakpointsJestO。调试器在加载目标动态链接库后,该动态链接库和调试器将共享同一段进程空间,而对断点条件判断执行中的各变量均可归结到从固定地址取固定长度的数据进行处理。以条件断点insncounter >=10为例,相应的声明代码如下所示#define address_register_fille
*(unsigned long*)0x008a3138#define data_register_fille
*(unsigned long氺)0x009a3138…#define insncounter*(_ _int64氺)0x010a3138上述声明代码中,条件断点insncounter > = 10的有符号变量insncounter在进程空间中的地址为0x010a3138,因此条件断点insncounter > = 10直接等价于*(_ _ int64*)0x010a3138 >= 10。图4为本发明一实施例的调试器示意结构图。如图所示40表示调试器,41表示接收单元,42表示存储单元,43表示输出单元,44表示加载单元,45表示执行单元,以及46 表示断点缓冲器。接收单元41用于接收调试中的断点信息。存储单元42用于存储在调试中接收到的断点信息。输出单元43用于将所述断点信息组合成断点函数并输出。加载单元44用于加载动态链接库。调试器40的接收单元41接收来自用户设置的断点信息,例如,用户设置的条件断点信息。调试器40将所有在调试中接收到的断点信息通过存储单元42存储在断点缓冲器 46中。在调试器40接收断点信息完成后,将存储在断点缓冲器46中的断点信息组合成断点函数并通过输出单元43输出。其中,调试器40将断点缓冲器46中的条件断点信息组合成断点函数并输出到C语言文件中,另外,将断点缓冲器46中的条件断点信息组合成断点函数并输出到C语言文件中的同时将所需要变量进程地址也一起输出到C语言文件中。通过C语言编译器对C语言文件进行编译、汇编和链接后形成的动态链接库G)LL)由调试器 40的加载单元44进行加载,加载后的动态链接库可供调试器40的执行单元45进行调用并判断执行。由此可以看出,本发明实施例的断点调试方法和调试器采用第三方编译器对条件断点的函数进行编译,并在经汇编和链接后生成动态链接库的方式来解决断点信息中繁琐的表达式计算问题,从而大幅提高了调试器的执行效率。图5示意性示出了一种断点调试方法的处理系统。图3中所示的断点调试方法可以在该系统中实现。图5中所示的处理系统包括CPU(中央处理器)501,RAM(随机存取器)502,R0M(只读存储器)503,系统总线504,硬盘控制器505,鼠标控制器506,键盘控制器507,显示器控制器508,硬盘509,鼠标510,键盘512,显示器513。在这些部件中,与系统总线504相连的有CPTOO1、RAM502、R0M503、硬盘控制器505,鼠标控制器506,键盘控制器507和显示器控制器508。硬盘509与硬盘控制器505相连,鼠标510与鼠标控制器506 相连,键盘512与键盘控制器507相连,以及显示器513与显示器控制器508相连。图5中每个部件的功能在本技术领域内都是众所周知的,并且图5所示的结构也是常规的。通常作为软件存储在硬盘509中的计算机可读指令控制。在图3中所示的流程图的基础上,对于一个技术领域内熟练的技术人员无需创造性的工作即可开发出一个或更多的软件,这样开发出的软件将执行图3所示的断点调试方法。专业人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。 这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。 专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。以上所述的具体实施方式
,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式
而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种断点调试方法,其特征在于,所述方法包括接收调试中的断点信息;将所述断点信息组合成断点函数并输出;加载动态链接库,所述动态链接库由所述断点函数进行编译生成。
2.根据权利要求1所述的方法,其特征在于所述接收调试中的断点信息包括接收调试中的条件断点信息。
3.根据权利要求1所述的方法,其特征在于所述接收调试中的断点信息步骤后还包括将接收的断点信息存储在断点缓冲器中。
4.根据权利要求1所述的方法,其特征在于将所述断点信息组合成断点函数并输出步骤还包括将变量进程地址和所述断点函数一起输出。
5.根据权利要求1或4所述的方法,其特征在于所述输出是输出到C语言文件中。
6.根据权利要求1所述的方法,其特征在于所述动态链接库由所述断点函数进行编译生成步骤包括通过编译器对所述断点函数进行编译,汇编和链接,生成动态链接库。
7.—种调试器,其特征在于,所述调试器包括接收单元,用于接收调试中的断点信息;输出单元,用于将所述断点信息组合成断点函数并输出;加载单元,用于根据所述断点函数编译生成动态链接库,并加载所述动态链接库。
8.根据权利要求7所述的调试器,其特征在于所述接收单元包括用于接收调试中的条件断点信息。
9.根据权利要求7所述的调试器,其特征在于所述调试器还包括存储单元,用于存储所述接收的断点信息。
10.根据权利要求7所述的调试器,其特征在于所述输出单元包括用于将变量进程地址和所述断点函数一起输出。
11.根据权利要求7或10所述的调试器,其特征在于所述输出单元输出是输出到C语言文件中。
全文摘要
本发明涉及一种断点调试方法和调试器。所述断点调试方法包括以下步骤接收调试中的断点信息;将所述断点信息组合成断点函数并输出;加载动态链接库,所述动态链接库由所述断点函数进行编译生成。所述调试器包括接收单元,用于接收调试中的断点信息;输出单元,用于将所述断点信息组合成断点函数并输出;加载单元,用于加载动态链接库。根据本发明的调试方法和调试器,可以大幅提升调试器的执行效率。
文档编号G06F11/36GK102262587SQ20111020745
公开日2011年11月30日 申请日期2011年7月22日 优先权日2011年7月22日
发明者侯朝焕, 彭楚, 朱浩, 洪缨, 王东辉 申请人:中国科学院声学研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1