CN102411534A - 一种断点调试方法和调试器 - Google Patents
一种断点调试方法和调试器 Download PDFInfo
- Publication number
- CN102411534A CN102411534A CN2011102095712A CN201110209571A CN102411534A CN 102411534 A CN102411534 A CN 102411534A CN 2011102095712 A CN2011102095712 A CN 2011102095712A CN 201110209571 A CN201110209571 A CN 201110209571A CN 102411534 A CN102411534 A CN 102411534A
- Authority
- CN
- China
- Prior art keywords
- decision diagram
- breakpoint
- binary tree
- debugger
- information
- 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
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明涉及一种断点调试方法和调试器。所述调试方法包括以下步骤:接收调试中的条件断点;解析所述条件断点,获得断点信息;将所述断点信息组织成决策图;分析所述决策图选择生成有序二叉决策图或展开为语义二叉树;将所述有序二叉决策图的节点展开形成语义二叉树;将所述语义二叉树的节点信息映射到相应的优化代码片段上;将所述代码片段注入到进程空间,进行断点信息判断。所述调试器包括如下功能单元:接收单元、解析单元、生成单元、展开单元、映射单元和注入单元。根据本发明的调试方法和调试器,可以大幅提升调试器的执行效率。
Description
技术领域
本发明涉及计算机软件设计,尤其涉及一种断点调试方法和调试器。
背景技术
调试器是处理器体系结构设计与软硬件协同验证中不可或缺的一部分。一方面,它在软件层次上对目标处理器的体系结构进行建模来模拟其执行行为,另一方面,通过提供调试接口,接收用户输入的各种控制信息,实现对程序执行过程中的数据流、控制流的监测及修改。
调试器最基础、最核心的功能之一是断点功能,它可以让程序中断在需要的地方,从而方便其分析。断点可以分为行断点和条件断点两种,其中行断点是一种特殊的条件断点,而条件断点通常是以逻辑表达式的形式呈现。
现有技术的调试器一般采用表达式计算来实现条件断点的解析,而表达式计算一般采用如下两种方案进行处理:
第一种方案:其于栈结构的表达式计算,以后缀表达式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为本发明一实施例的决策图;
图6为根据图5简化后的决策图;
图7为根据图6简化后最终的有序二叉决策图;
图8为根据图7形成的判断流程图;
图9为本发明一实施例的语义二叉树;
图10示意性示出了一种断点调试方法的处理系统。
具体实施方式
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
图3为本发明一实施例的断点调试方法流程图。
在步骤301,接收调试中的条件断点。
调试器在调试中接收来自用户设置的条件断点,包括用户设置的全局条件断点。
在步骤302,解析所述条件断点,获得其中的断点信息。
调试器对在调试过程中接收到条件断点进行解析,获得条件断点中的断点信息包括:操作符、变量对应的进程地址和立即数。
在步骤303,将所述断点信息组织并生成决策图。
在一个实施例中,现以条件断点表达式(address_regfile[0]>=10||data_regfile[1]<=13)&&insncounter>=10)为例来描述有序二叉决策图的生成过程。上述条件断点的断点信息可以由布尔函数来表示,并根据布尔函数性质来生成决策图。
首先,将条件断点中的address_regfile[0]>=10用X1来替代,data_regfile[1]<=13用X2来替代,insncounter>=10用X3来替代,条件断点表达式等效为(X1||X2)&&X3,而布尔代数是由非空集合B(B中至少含有两个不同元素),以及B上的二元运算“·”、“+”,一元运算“′”组成的多元组,因此可以将条件断点中的“&&”运算符映射为布尔代数运算符“·”,将条件断点“||”运算符映射为“+”运算符,因此该条件断点对应的在变量序π:x1<x2<x3下的布尔函数为:f(x1,x2,x3)=(x1+x2)·x3,它对应的布尔函数族#f(x1,x2,x3)={(x1+x2)·x3,(x2·x3),x3,0,1}。
根据上述的布尔函数族,生成如图5所示的决策图,其中节点的0-分支用虚线连接,节点的1-分支用实线连接,图5中描述出布尔函数族在x1,x2,x3不同取值情况下各路径对应的结果。图中的X3节点存在着子节点完全相同的情况,也就是说明其对应相同的布尔函数,因此可以将这些冗余的节点进行合并形成如图6所示的决策图。
在如图6所示的决策图中,在X1的1-分支上无论X2结点取何值都不会影响该条路径的最终值,因此,X1的1-分支上的X2结点可被删除,同理在X1的0-分支上的结点X3也被删除,最终形成如图7所示的最简有序二叉决策图。
针对图7所示的最简有序二叉决策图可采用递归算法进行进一步的分析,例如,当图7中的X3节点取值为0时,该有序二叉决策图的布尔函数值始终为0,则条件断点不成立;当X3节点取值为1,且X1或X2取值为1时,该有序二叉决策图的布尔函数值为1,则条件断点成立。有序二叉决策图的分析结果描述成如图8的模式。
在步骤304,将所述决策图展开为语义二叉树。
在一个实施例中,可以通过分析决策图生成有序二叉决策图,再将有序二叉决策图展开为语义二叉树。上述生成有序二叉决策图的方法可以采用Bryant提出的有序二叉决策图简化算法。
在步骤305,将所述语义二叉树的节点信息归纳并映射到相应的优化代码片段。
调试器根据最简有序二叉决策图展开为语义二叉树,并将语义二叉树树上的各类操作符节点信息的特征码构成的模式映射到不同的优化代码片段上。
在一个实施例中,描述如何将语义二叉树的节点信息映射到相应的优化代码片上。首先,将条件断点表达式(address_regfile[0]>=10||data_regfile[1]<=13)&&insncounter>=10)生成如图9所示的语义二叉树,图9中虚线指引的各个操作符对应于图7中的各个节点。然后通过采用深度优选算法遍历该语义二叉树,以X1节点为例,其左孩子的属性为addr32,代表该操作数是32位,需要从相应的地址获取;而右孩子为u_imm32,代表该操作数为32位的无符号立即数,而X1节点代表ge,表示“>=”操作,因此X1节点的模式集合为:{addr32,ge,u_imm32},通过查询代码片段表并获取相应的指令片段信息。
而诸如跳转等需要目的地址的指令,在遍历语义二叉树生成代码片段的过程中只需要填入相应的指令保留位,而目的的地址则根据目的的地址所需要的字节数以0值的形式填入指令槽中,在后续工作中完成地址的分配。
在如图8中,当X3的取值不为1时,条件断点判断失败,程序流需要跳转到下一个断点起始处,而当X3为1时,同时X1也为1则同样跳转到下一个全局断点的起始处,否则继续判断X2。因此,X3中jump指令的目的地址是下一断点的起始处,而X1中jump指令的目的地址则是该断点的return语句的起始处。
在步骤306中,将所述代码片段注入到进程空间,进行断点信息判断。
调试器将获取的指令片段信息注入到进程空间,为实现代码片段的注入,调试器需要开辟一段独立有效,并占据一定字节数的进程空间。在本发明实施例中,通过调试器预先加载一个有效的静态库实现,通过在静态库的原始C文件中嵌入大量的空操作(nop)语句实现进程空间的占用。在调试器执行时,只需将生成好的代码段覆盖原始C文件中的nop语句处即可实现。
静态库如下所示:
在代码片段注入到进程空间后,调试器通过调用breakpoint_test函数即可以实现对断点的判断并执行。
图4为本发明一实施例的调试器示意结构图。如图所示:40表示调试器,41表示接收单元,42表示解析单元,43表示生成单元,44表示展开单元,45表示映射单元,以及46表示注入单元。
接收单元41用于接收调试中的条件断点信息;解析单元42用于解析条件断点信息,获得断点信息;生成单元43用于将条件断点中的断点信息组织生成决策图;展开单元44用于用于将决策图展开为语义二叉树,或者用于分析决策图并生成有序二叉决策图,将有序二叉决策图展开成语义二叉树。映射单元45用于用于将语义二叉树的节点信息归纳并映射到相应的优化代码片段;注入单元46用于将代码片段注入到进程空间。
在本实施例中,首先由调试器40的接收单元41接收来自用户设置的断点信息,包括用户设置的全局断点信息。接收单元41在调试中可以接收来自用户设置的大规模全局条件断点信息,解析单元42对接收单元41在调试中接收的条件断点信息进行解析,解析出条件断点信息中的断点信息,再由生成单元43根据解析单元42解析出的条件断点信息生成决策图,优选地,生成单元43可以将断点信息中的条件断点采用布尔函数来表示,根据布尔函数来生成决策图,再由展开单元44对上述决策图展开为语义二叉树,或者用于分析上述决策图并生成有序二叉决策图,将有序二叉决策图展开成语义二叉树,最后由映射单元45根据语义二叉树的节点信息的特征码构成的模式将其映射到相应的优化代码片段。调试器40通过注入单元46将上述优化代码片段注入到进程空间,判断并执行。
图10示意性示出了一种断点调试方法的处理系统。图3中所示的断点调试方法可以在该系统中实现。图10中所示的处理系统包括CPU(中央处理器)1001,RAM(随机存取器)1002,ROM(只读存储器)1003,系统总线1004,硬盘控制器1005,鼠标控制器1006,键盘控制器1007,显示器控制器1008,硬盘1009,鼠标1010,键盘1012,显示器1013。在这些部件中,与系统总线1004相连的有CPU1001、RAM1002、ROM1003、硬盘控制器1005,鼠标控制器1006,键盘控制器1007和显示器控制器1008。硬盘1009与硬盘控制器1005相连,鼠标1010与鼠标控制器1006相连,键盘1012与键盘控制器1007相连,以及显示器1013与显示器控制器1008相连。
图10中每个部件的功能在本技术领域内都是众所周知的,并且图10所示的结构也是常规的。通常作为软件存储在硬盘1009中的计算机可读指令控制。在图3中所示的流程图的基础上,对于一个技术领域内熟练的技术人员无需创造性的工作即可开发出一个或更多的软件,这样开发出的软件将执行图3所示的断点调试方法。
专业人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种断点调试方法,其特征在于,所述方法包括:
接收调试中的条件断点;
解析所述条件断点,获得断点信息;
将所述断点信息组织并生成决策图;
将所述决策图展开为语义二叉树;
将所述语义二叉树的节点信息归纳并映射到相应的优化代码片段;
将所述代码片段注入到进程空间,进行断点信息判断。
2.根据权利要求1所述的方法,其特征在于:将所述决策图展开为语义二叉树步骤替代为:分析所述决策图并生成有序二叉决策图,将所述有序二叉决策图展开为语义二叉树。
3.根据权利要求1或2所述的方法,其特征在于:所述将所述断点信息组织生成决策图步骤包括将所述断点信息由布尔函数来表示,根据布尔函数性质来生成决策图。
4.根据权利要求2所述的方法,其特征在于:采用有序二叉决策图简化算法将所述决策图生成有序二叉决策图。
5.根据权利要求1或2所述的方法,其特征在于:所述将所述语义二叉树的节点信息归纳并映射到相应的优化代码片段的步骤是根据所述语义二叉树的节点信息的特征码构成的模式将其映射到相应的优化代码片段。
6.根据权利要求1或2所述的方法,其特征在于:所述将所述代码片段注入到进程空间包括:
预先加载一个有效的静态库,通过在所述静态库的原始C文件中嵌入空操作语句实现进程空间的划分;
将所述代码片段覆盖所述空操作语句。
7.一种调试器,其特征在于,所述调试器包括:
接收单元,用于接收调试中的条件断点;
解析单元,用于解析所述条件断点,获得断点信息;
生成单元,用于将所述断点信息组织生成决策图;
展开单元,用于将所述决策图展开为语义二叉树,或者用于分析所述决策图并生成有序二叉决策图,将所述有序二叉决策图展开成语义二叉树;
映射单元,用于将所述语义二叉树的节点信息归纳并映射到相应的优化代码片段;
注入单元,用于将所述代码片段注入到进程空间。
8.根据权利要求7所述的调试器,其特征在于:所述生成单元将所述断点信息由布尔函数来表示,根据布尔函数性质来生成决策图。
9.根据权利要求7所述的调试器,其特征在于:所述展开单元采用有序二叉决策图简化算法将所述决策图生成有序二叉决策图。
10.根据权利要求7所述的调试器,其特征在于:所述映射单元根据所述语义二叉树的节点信息的特征码构成的模式将其映射到相应的优化代码片段。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110209571.2A CN102411534B (zh) | 2011-07-25 | 2011-07-25 | 一种断点调试方法和断点调试装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110209571.2A CN102411534B (zh) | 2011-07-25 | 2011-07-25 | 一种断点调试方法和断点调试装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102411534A true CN102411534A (zh) | 2012-04-11 |
CN102411534B CN102411534B (zh) | 2014-12-31 |
Family
ID=45913616
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110209571.2A Expired - Fee Related CN102411534B (zh) | 2011-07-25 | 2011-07-25 | 一种断点调试方法和断点调试装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102411534B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109716730A (zh) * | 2016-09-09 | 2019-05-03 | 微软技术许可有限责任公司 | 生产应用的自动化性能调试 |
CN112199088A (zh) * | 2020-10-19 | 2021-01-08 | 广东工业大学 | 一种二叉树数据结构的可视化演变方法 |
CN116663491A (zh) * | 2023-07-26 | 2023-08-29 | 北京云枢创新软件技术有限公司 | 基于bdd求解功能覆盖组条件约束语句的方法、设备和介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6003143A (en) * | 1994-06-30 | 1999-12-14 | Compaq Computer Corporation | Tool and method for diagnosing and correcting errors in a computer program |
US7174536B1 (en) * | 2001-02-12 | 2007-02-06 | Iowa State University Research Foundation, Inc. | Integrated interactive software visualization environment |
CN101561779A (zh) * | 2008-04-14 | 2009-10-21 | 国际商业机器公司 | 一种调试方法和调试器 |
-
2011
- 2011-07-25 CN CN201110209571.2A patent/CN102411534B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6003143A (en) * | 1994-06-30 | 1999-12-14 | Compaq Computer Corporation | Tool and method for diagnosing and correcting errors in a computer program |
US7174536B1 (en) * | 2001-02-12 | 2007-02-06 | Iowa State University Research Foundation, Inc. | Integrated interactive software visualization environment |
CN101561779A (zh) * | 2008-04-14 | 2009-10-21 | 国际商业机器公司 | 一种调试方法和调试器 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109716730A (zh) * | 2016-09-09 | 2019-05-03 | 微软技术许可有限责任公司 | 生产应用的自动化性能调试 |
CN109716730B (zh) * | 2016-09-09 | 2021-10-22 | 微软技术许可有限责任公司 | 用于生产应用的自动化性能调试的方法和计算设备 |
CN112199088A (zh) * | 2020-10-19 | 2021-01-08 | 广东工业大学 | 一种二叉树数据结构的可视化演变方法 |
CN112199088B (zh) * | 2020-10-19 | 2023-07-25 | 广东工业大学 | 一种二叉树数据结构的可视化演变方法 |
CN116663491A (zh) * | 2023-07-26 | 2023-08-29 | 北京云枢创新软件技术有限公司 | 基于bdd求解功能覆盖组条件约束语句的方法、设备和介质 |
CN116663491B (zh) * | 2023-07-26 | 2023-10-13 | 北京云枢创新软件技术有限公司 | 基于bdd求解功能覆盖组条件约束语句的方法、设备和介质 |
Also Published As
Publication number | Publication date |
---|---|
CN102411534B (zh) | 2014-12-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100385399C (zh) | 用于多个异常处理模型的中间表示的方法和系统 | |
Greenaway et al. | Bridging the gap: Automatic verified abstraction of C | |
EP2082318B1 (en) | Register-based instruction optimization for facilitating efficient emulation of an instruction stream | |
US8161439B2 (en) | Method and apparatus for processing assertions in assertion-based verification of a logic design | |
Wolf | Behavioral intervals in embedded software: timing and power analysis of embedded real-time software processes | |
US9626170B2 (en) | Method and computer program product for disassembling a mixed machine code | |
US20070011664A1 (en) | Device and method for generating an instruction set simulator | |
Chen et al. | A refined decompiler to generate C code with high readability | |
US6990438B1 (en) | Method and apparatus for observability-based code coverage | |
CN113901745A (zh) | 芯片测试方法、装置、电子设备及计算机可读存储介质 | |
CN104407968B (zh) | 一种通过静态分析测算代码指令最长运行时间的方法 | |
Rahimian et al. | RESource: a framework for online matching of assembly with open source code | |
CN102411534B (zh) | 一种断点调试方法和断点调试装置 | |
JP5440287B2 (ja) | シンボリック実行支援プログラム、方法及び装置 | |
Blanqui et al. | Designing a CPU model: from a pseudo-formal document to fast code | |
Abderehman et al. | DEEQ: Data-driven end-to-end EQuivalence checking of high-level synthesis | |
JP6116983B2 (ja) | エントリーポイント抽出装置 | |
Schlich et al. | Applying model checking to an automotive microcontroller application | |
US20040045018A1 (en) | Using address space bridge in postoptimizer to route indirect calls at runtime | |
Gesell et al. | An Interactive Verification Tool for Synchronous/Reactive Systems. | |
Sunitha | Compiler construction | |
KARAPATEAS | RETARGETING AN ASSEMBLY OPTIMIZER FOR THE MIPS/SCALE ASSEMBLY | |
Hunt et al. | Using global data flow analysis on bytecode to aid worst case execution time analysis for real-time java programs | |
Majzik | Software monitoring and debugging using compressed signature sequences | |
Bai et al. | Analysing indirect jump based on critical semantic subtree |
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: 20141231 Termination date: 20190725 |