1、回 电占料技女管硕十学位论文论文题目嵌人式系统交义调试器的没计与实现学科专业计算机应用技术指导教师雷航教接作者姓名罐塞班学巴中文摘要中文摘要随着嵌入式系统的飞速发展,嵌入式系统开发工具在开发过程中所起的作用日益突出,相关的研究、技术也随之不断更新。嵌入式交叉调试器是嵌入式系统开发者使用最多的工具,也是整个开发周期中使用时问晟长的工具。其除了要具备传统调试器的断点追踪、变量查询等基本功能, 还必须具备远程下载、 远程调试控制,甚至虚拟机的部分功能,从而导致交叉调试技术实现的复杂程度要远高于传统调试器。本文首先简要说明了嵌入式软件的开发过程,回顾了嵌入式交叉调试技术的发展历程。然后分析了调试器的整
2、个框架和核心,借此展现调试器的相关理论和设计思想,并 对调试器和代理中的关键流程,如硬件和操作系统对调试的支持、断点执行、程序运行控制、程序上下文分析、表达式求值等关键调试技术进行详细阐述。是图形化的调试器(),本文对其的层次结构和模块结构进行了详细的分析,并对其源代码进行了深入的研究。然后在研究基础上进行了一定的改造,使其适应我们调试环境的需求。在嵌入式领域,由于目标平台结构的多样化, 设计并开发一款能够支持多种目标机结构的调试代理将具有重要的意义。本文对支持多目标机的跨平台调试代理结构进行了分析和研究,设计了一种跨平台的调试代理的结构,并以硬件平台为基础,实现了具有多种功能的跨平台调试代理
3、,在文中对该调试代理的各个层次和功能模块进行了详细的阐述。嵌入式开发研究领域正在向实时、分布式、等方向发展,对交叉调试技术提出了很多新的研究问题和方向。本文虽力图在方方面面覆盖其设计实现,但由于交叉调试器的复杂程度高、体系庞大、 实现难度较大等,仍有上述部分研究领域无暇涉及,希望后续研究能够在上述方面深入下去。关键字:嵌入式,交叉调试, 调试代理,多目标机独创性声明本人声明所呈交的学位论文是本人在导师指导下进行的研究工作及取得的研究成果。据我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含为获得电子科技大学或其它教育机构的学位或证书而使用过的材料
4、。与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明确的说明并表示谢意。年月日关于论文使用授权的说明本学位论文作者完全了解电子科技大学有关保留、使用学位论文的规定,有权保留并向国家有关部门或机构送交论文的复印件和磁盘,允许论文被查阅和借阅。本人授权电子科技大学可以将学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存、汇编学位论文。(保密的学位论文在解密后应遵守此规定)签名:日期:年月日第一章引言嵌入式系统概述第一章引言嵌入式系统是计算机的一种应用形式,此类计算机一般不被设备使用者在意,亦称埋藏式计算机,典型的如微控制器,微处理器和等。嵌入式处理器使宿
5、主设备智能化、设计灵活和操作简单, 这些设备功能各异,千差万别,但都具有功能强、实时性强、结构紧凑、可靠性高和面向 对象等共同特点。嵌入式系统是指作为某种技术过程得一核心处理环节,能直接与现实环境接口或交互的信息处理系统。在这种应用环境中,信息处理系统处于嵌入式工作状态,即 实时就绪与环互动,即使是工作方式,其典型例子如在工业过程控制或实验监测的应用【】。嵌入式系统是将先进的计算机技术、半导体技术和电子技术和各个行业的具体应用相结合后的产物。这一点就决定了它必然是一个技术密集、资金密集、高度分散、不断创新的知识集成系统。常说的嵌入式应用就是将这类系统嵌入于各种设备及应用产品内部的计算机应用,相
6、应的设备产品称之为嵌入式设备产品。大多数嵌入式系统都十分轻巧,完全可以放在人的拇指尖上。通常,这些系统都隐藏在比它们大得多,也复杂得多的移动计算或电子设备中,不太容易为人们所注意。由于被嵌入对象的体系结构、应用环境要求不同,嵌入式系统有许多类型。各 类嵌入式系 统的兴起,广泛渗透到国民经济各个领域。嵌入式计算机在应用数量上远远超过了各种通用计算机,一台通用计算机的外部设备中就包含了数个嵌入式微处理器,如键盘、鼠标、软驱、硬 盘、显示卡、显示器、网卡、声卡、打印机、扫描仪、数字相机等均是由嵌入式处理器控制的。在制造工业、过程控制、通信、仪器、仪表、汽车 、船舶、航空、航天、军事装备、消费类产 品
7、等方面均是嵌入式计算机的应用领域。最有量产效益和时代特征的嵌入式产品应属因特网上的信息家电,如可视电话、游戏 机、电话手机以及多媒体产品,如电视机顶盒、播放机、电子阅读机。其中手机算得上一种具有代表性的嵌入式设备,其结构小巧、电池供电,且屏幕 较大,能无线入网,全球漫游,因此其功能复杂度较高、要求内嵌高,而(无线应用协议)则赋予手机以随时随地访问因特网的功能,读电子科技大学硕士学位论文取互联网上的诸多信息服务,如电子邮件、 电子商务、气象查询等。信息设备的出现标志着革命性的一代嵌入式系统已经诞生。嵌入式系统的概念和特点从某种意义上来说,通用计算机行业的技术是垄断的。占整个计算机行业的产业,采用
8、的体系 结构,芯片基本上出自,等几家公司。在几乎每台计算机必备的操作系统和文字处理器方面,的及占,凭借操作系统还可以搭配其它应用程序。因此当代的通用计算机工业的基础被认为是由(和年代初建立的联盟) 垄断的工业。嵌入式系 统则不同,它是一个分散的工业,充满了竞争、机遇与 创新,没有哪一个系列的处理器和操作系统能够垄断全部市场。即便在体系结构上存在着主流,但各不相同的应用领域决定了不可能有少数公司、少数产 品垄断全部市场。因此嵌入式系 统领域的产品和技术,必然是高度分散的,留给 各个行业的中小规模高技术公司的创新余地很大。另外,社会上的各个应用领域是在不断向前发展的,要求其中的嵌入式处理器核心也同
9、步发展,这也构成了推动嵌入式工业发展的强大动力。器件是嵌入式系统产业的根本,嵌入式系统工件是嵌入式系统产业的根本,嵌入式系统工业的基础就是以应用为中心的“芯片”设计技术和面向应用的软件产品开发技术。嵌入式系统是当今国内外时髦的技术用语,应用广泛。对嵌入式系统的定义也很多,可以概括如下:嵌入式系统是现代科学的多许可相互融合产品,它以应用技术产品为核心,以 计算机技术为基础,以通信技术为载体,以消费类产品为对象,引入各 类传感器,接入因特网络,并适应应用环境。嵌入式系 统是一种软件已故花台出现而又无多余软件的,应建议无多余存储器得名,可靠性高、成本低、体积小、功耗小的非通用计算机系统,因此包含了十
10、分广泛 应用的各种不同类型的设备。嵌入式系 统又是知识密集、投 资规模大、产品更新换代快、且具有不断创新特征才能不断发展的系统。嵌入式系统是面向用户、面向产品、面向 应用的,如果独立于 应用自行发展,则会失去市场。嵌入式 处理器的功耗、体 积、成本、可靠性、速度、处理能力、电磁兼容性等方面均受到应用要求的制约,这些也是各个半导体厂商之间竞争的热点。第一章引言和通用计算机不同,嵌入式系统的硬件和软件都必须高效率地设计,量体裁衣、去除冗余,力争在同样的硅片面积上实现更高的性能, 这样才能在具体应用对处理器的选择面前更具有竞争力。嵌入式处理器要针对用户的具体需求,对芯片配置进行裁剪和添加才能达到理想
11、的性能;但同时还受用户订货量的制约。因此不同的处理器面向的用户是不一样的,可能是一般用户,行业用户或单一用户。嵌入式系统和具体应用有机地结合在一起,它的升级换代也是和具体产品同步进行,因此嵌入式系统产品一旦进入市场,具有 较长的生命周期。嵌入式系统中的软件,一般都固化在只读存储器中,而不是以磁 盘为载体,可随意更 换,所以嵌入式系统的应用软件生命周期也和嵌入式产品一样长。另外,各个行业的应用系统和产品,和通用 计算机软件不同,很少 发生突然性跳跃,嵌入式系统中的软件也因此更强调可继承性和技术衔接性,发展比较稳定。嵌入式处理器的发展也体现出稳定性,一个体系一般要存在年的时间。一个体系结构及其相关
12、的片上外设、开发工具、库函数、嵌入式应用产品是一套复杂的知识系统,用户和半导体厂商都不会轻易地放弃一种处理器。嵌入式处理器的应用软件是实现嵌入式系统功能的关键,对嵌入式处理器系统软件和应用软件的要求和通用计算机有所不同。)软件要求固 态化存储为了提高执行速度和系统可靠性,嵌入式系统的软件一般都固化在存储器芯片或单片机本身中,而不是存储于磁盘等载体中。)软件代码高 质量、高可靠性尽管半导体技术的发展使处理器速度不断提高、片上存储容量不断增加,但在大多数应用中,存储空间仍然是宝贵的, 还存在实时性的要求。 为此要求程序编写和变异工具质量要高,以减少程序二进制代码长度,提高执行速度。)系统软件的高实
13、时性是基本要求在多任务嵌入式系统中,对重要性各不相同的任务进行统筹兼顾的合理调度是保证每个人物及时执行的关键。单纯通过提高处理速度是无法完成没有效率的。这种任务调度只能由优化编写的系统软件来完成,因此系统软件的高实时性是基本要求。嵌入式系统的 发展方向当前的嵌入式系统应用广泛、种类繁多。从位微控制器的结构简单,功能电子科技大学硕士学位论文专一的小型控制系统,到智能通信转换仪器、便携式的诊断测量工具、高端消 费电子设备,嵌入式系 统几乎随处可见。 预计在今后的年内,嵌入式技术将进入迅速普及和飞速发展的时期。与此同时,未来的 应用需求对嵌入式系统提出了更高更多的要求,可以预见未来嵌入式系统发展的主
14、要趋势【。体积更小,功耗更低由于嵌入式系统大量应用于便携式设备如测控工具、手机、等,这就要求系统体积一定要小,这样才能提高便携性。而 这些设备大多只能依靠电池供电,所以功耗是评价系统的重要指标。当前有的设备为了达到用户满意的电池续航能力,不得不以降低系统性能为代价,比如降低微 处理器时钟频率、使用清晰度低且功耗低的液晶屏种类,当然也有为设备选配外接电源的方式,但无疑降低了便携性,都不是令人满意的解决办法。只有在 总体上降低系统功耗能从根本上解决问题,同时也能加快 设备普及。是其中一种代表性的功耗评价方法。)强大的开发 工具为了满足应用功能的升级,设计师们一方面采用更强大的嵌入式处理器如位、“位
15、芯片或信号处理器增强处理能力;同时还采用实时多任务编程技术和交叉开发工具技术来控制功能复杂性,简化应用程序设计、保障软件质量和缩短开发周期。越来越复杂的应用使得传统的嵌入式软件开发方式不再适用。由于嵌入式软件并不是为了单独出售而开发,开发者们销售随身播放器、手机、高清电视,而这些软 件作为产品的附件一同售出,同时免费的提供升级更新。因此软件开发仅仅是嵌入式系统中的,部分,传统的开发是在硬件系统设计基本完成之后再加入软件部分,使得软件开发受到严重的限制,并且很多时候不得不用软件来解决本应该在硬件设计时解决的问题。这样显然是低效的。因此我们需要将软件开发同硬件开发协同进行,交叉开发。)方便的网络
16、接入现在,嵌入式因特网技术得到了广泛的应用。各种智能家电可以接入因特网进行信息下载和远程控制,如电子公司的因特网冰箱和空调、公司的网络微波炉等。各种手机、掌上型游戏机都加入了网 络接入功能。 办公设备和网络设备可以接入因特网实现设备共享和远程参数配置,如、 公司的可以通过浏览器来管理的路由器和集线器等。各种昂贵的实验设备可以通过因特网在各个高校之间共享,学生可以通过浏览器对设备进行远程操作,并能查看由网络摄像机拍摄的实验现场的图片和视频。各种自助服务设备如自动第一章引言售货机、自助取款机等可以通过因特网进行远程管理和维护并对其核心部件一货币识别接收器进行远程软件升级,从而降低管理成本、缩短升级
17、周期、降低升级费用。此外,嵌入式因特网技术还应用于交通管理、 远程抄表, 电力控制和远程医疗诊断等领域。今后,网络接口将是嵌入式设备的基本配置。任何设备都能在需要的时候通过有线或无线网络接入到网中。)多媒体处理能力嵌入式系统在通信设备,消费电子产品中的应用对系统多媒体处理能力提出了新的要求。前段时间风靡全球的播放器,以及现在正在兴起的播放器都展示了多媒体处理能力在嵌入式应用中的重要应用。现在很多厂商出品的手机中加入了大量的多媒体功能,使手机逐渐地向数字娱乐终端靠拢。高清电视,机顶盒,游戏机等设备也正在普及之中。将来的数字 娱乐终端将集视频、音 频播放,图片浏览,网络通信,游 戏等功能于一身,嵌
18、入式消费电子产品的多媒体处理能力将是其角逐市场的关键因素。嵌入式交叉调试技术概述交叉调试的特点嵌入式设备功能专一,针对性强,并且很多情况下有着实时性和低功耗等要求,一般不会有丰富的资源。在 资源有限的嵌入式设备上建立一套开发系统不太现实,所以一般情况下以交叉开发的方式进行嵌入式应用开发。即:开发系统建立在资源丰富的机上,一般称之为宿主机()。代码的编写、 编译、链接等开发工作都是在宿主机上进行。与之相对应的是开发出的应用的实际运行平台,一般称之为目标机()。两者之间可能存在很大的差别,比如:硬件结构上的差别。宿主机和目标机的可以不同。比如,宿主机使用的是体系 结构,而目标机是体系结构的。软件环
19、境差异。宿主机一般运行在通用操作系统之上(如,等),而目标机一般运行专用的嵌入式操作系统或者根本就没有操作系统。因此,在 对嵌入式应用进行调试的时候,采取宿主机与目标机互联的交叉调试方式。由于嵌入式开发采取的交叉开发方式,以及嵌入式系统的固有特性,使得交叉调试与传统的本地调试方式相比,一般有着如下特点【】:电子科技大学硕士学位论文调试器()和被调试程序()运行在不同的计算机上。运行在功能强大资源丰富的机或者工作站上(宿主机),而运行在某种实际的嵌入式设备或评估板上(目标机)。目标 机通过 某种通信方式与目标及建立连接。通信方式可以是串口、并口、以太网、或其它专用通信方式。在目标机上一般运行有宿
20、主机的某种调试代,调试代理能与宿主机上的一起通过通信完成对运行在目标机上的程序的调试。这种调试代理可以是软件的形式,也可以是硬件的直接支持。目标 机也可以是一种虚 拟机。在这种情况下,似乎 调试 器和被调试程序运行在了同一台计算机上。但是调试方式的本质没有变化,即被调试程序是被下载到了目标机,而它的 调试并不是直接通过宿主机的操作系统的调试支持来完成,而是通过虚拟机代理的方式来完成调试。交叉调试技术的发展回顾交叉调试的发展过程实质上就是嵌入式应用开发技术的发展过程,二者密不可分。随着硬件和软件技术的不断发展,嵌入式 应用开发的技术越来越高级,越来越完善。相应的交叉调试技术也得到了不断的发展。交
21、叉调试方式的更新是其重要标志阎。这是最初的调试方式,或者可以说这是没有调试的调试。利用该方式开发嵌入式程序的过程如下:编写代码 直到编译通 过将生成的程序固化()到目标机上的非易失性记忆体中(如:,)测试是否正常工作若不能正常工作(),查找错误,改写代码,重新 编译重复上述步骤,直到程序正常运行。显然,这种开 发方式是极其原始和低效的。 给开发者带来的痛苦和难度可想而知。是运行在目标机上的一段程序。它负责监控目 标机上被调试的第一章引言程序运行,和宿主机端程序一起完成对应用程序的调试。预先被固化到目标机,在目 标机复位后首先执行的就是程序,它对目标机进行一些比较的初始化,然后等待宿主机端发来命
22、令。一般能完成代码下载,目标及内存和寄存器的读写,断点 设置, 单步执 行等功能。一些更高级的能完成代码分析,系统分析,空 间 写操作, 设置条件断点等功能。这种调试方式优点是简单、方便。成本低廉、并且可扩展性强,基本上不需要专门的调试硬件支持。而缺点也很明显:本身的开发困难,需要用的方式;运行时要占用目标机一定的资源;并在一定程度上造成应用程序的最终执行环境和调试的环境存在差异。是一种用于替代目标机上芯片的设备,即仿真器。利用这种设备目标机可以没有芯片,而目标机的可以读取设备上的芯片的内容,从而仿真目 标机上的。这是一种不完全的调试方式,通常只是为目标机提供芯片和为目标机和宿主机之间建立一条
23、高速的通信通道。一般和的调试方式结合使用。这种方式的优点是目标机可以没有芯片并且不需要专门的工具来写。缺点是,目标及必须 支持外部存储空间,并且由于一般需和配合使用,所以具有前者的全部缺点。现在大多数目标板都提供芯片并且支持在板上直接对空间进行写操作,所以属于被淘汰的调试方式。又被称为在线仿真器,是一种用于替代目标机上的设备。上的存储器也可以被映射到用户的程序空间。在连接和目标机时,将目标机的取下,而将的引出线接到目标机的插槽。在用 进行调试时,在宿主机端运行的调试器通过来控制目标机上运行的程序。调试方式特别适用于调试实时的应用、设备驱动以及对硬件进行功能和性能的测试,并且可以 进行一些实时性
24、能分析,精确测定运行的时间。的缺点是太昂贵,一般是在普通调试器无法解决或是需要进行精确性能分析时使用。又被称为片上调试,片上调试是在处理器内部嵌入额外的控制模块,当满足了一定的触发条件时进入某种特殊状态。在该状态下,被调试程序停止运行,电子科技大学硕士学位论文宿主机的调试器可以通过处理器外部特设的通信接口访问各种资源,如寄存器、存储器等,并 执行指令。为了实现宿主机通信端口与目标及调试通信接口各引脚信号的匹配,二者通过一块简单的信号转换电路板连接。内嵌的控制模块以基于微码的监控器()或纯硬件资源的形式存在,包括一些提供给用户的接口(如断点寄存器等)。采用方式的调试器的主要优点是:不占用目标机资
25、源,调试环境和最终的程序运行环境基本一致。支持软硬断点、功能、精确计量程序的执行时间、时序分析等功能。缺点是: 调试的实时性不如、不支持非干扰调试查询、必须具有功能,存在各种实现标准不一。现在比较常用的有:(),()。(,和的一种结合等。相当于在宿主机上虚拟一台目标机。该目标机可以使和宿主机不同的类型。比较高级的可以模拟目 标机的外部设备,如等设备。利用的最大好处就是可以不用真正的目标机,调试时可以提供更详细的信息。但它的缺点也比较明显:由于不适采用的真正的目标机,被调试程序运行的环境和实际相差较大,即使在这种方式下调试成功也不一定就能够在真正的目标机上成功运行。其次,由于嵌入式应用中外部设备
26、种类繁多,要全部都提供仿真模拟有一定难度。并且由于调试环境不适真实环境,无法得出被调试程序的真实运行时间特性。 这种方式对宿主机的资源要求比较高。所以方式主要应用在对运行时间没有严格要求,没有特殊的外围设备且只须验证程序的逻辑正确性的情况。国内外研究和应用现状国外计算机业在调试器领域发展很快,开发出了很多功能强大、支持多种目标机的交叉调试器。而国内在这个领域相关研究相对较少,只有科银京成和麦克泰等少数几个厂商提供针对等的集成开发环境的支持【】。目前,在国内外比较流行,著名的嵌入式调试器有以下几种:)一个经典的调试器, 专门为嵌入式系统设计的实时软件调试器,独立于调试硬件,目标处 理器和代码生成
27、器。可以作 为在线仿真器, 调试器设置模拟第一章引言器的前端调试器。支持所有的工业标准调试文件,兼容所有的编译器和链接器生成的目标文件。含有集成的宏语言工具,用户可以定制测试和开发脚本,很容易建立测试套件自动完成重复的测试任务。)是一种著名的调试器。是高度集成化的嵌入式开发环境,支持,抖嵌入式抖,和语言,可运行在或主机,支持多种目标系统的远程调试。)系列源码级调试器为开发人员解决问题和达到目标提供了强大的工具。功能强大的源码级调试特性并具有可扩展的性能效果。汇编级调试支持解决硬件相关问题。支持丰富的目标系统连接方法。)完全集成在开发环境中的调试器,配合其高人气值的嵌入实时操作系统使用。高性能图
28、形界面调试器,加速的特性包括可供用户成组观察表达式的窗口,图形界面修改变量、寄存器和局部 变量以及指定不同组元素的基数,弹出式的面板显示有效的调试信息。开发人员可以在目标系统运行时分离和调试任务,可以连接调试器到从应用中或任务级调试环境中分离出来正在运行的任务上。)该调试器支持多种处理器,多进程,多 线程,主要配合公司产品 实时操作系统使用。紧密集成的工具加速编辑、 编译和调试周期。支持多 线程等各种复杂的嵌入式应用环境。以上较有名的调试器,在调试过程中为用户解决许多难题,但是也有不足之处,如的,的,都与特定的操作系统密切相关。()是一个源代码开放的、功能 强大的调试 器,是它的图形前端,即
29、图形化的。它能调试、等语言的应用程序, 还支持各种处理器的汇编指令。的 远程调试功能同样出色,经过适当的改造,完全能够胜任嵌入式软件内核级调试。现今,很多调试器开发商都表示与兼容,也证明了在调试领域的重要地位。电子科技大学硕士学位论文嵌入式交叉调试器的发展方向目前嵌入式交叉调试器正朝着以下几个主要的方向发展:)面向多目标机:在嵌入式交叉调试开发中,宿主机一般是功能强大的机或工作站,而目标机是各种各样的嵌入式设备。如何使调试器适应多种结构不同的目标机是个值得研究的课题。现在主要的解决思路是采用构件组装技术。把交叉调试器的各个功能设计成模块,根据不同的需要安装不同的模块。把和目标机硬件相关的部分集
30、中到一个模块中,并且尽量做到各模块之间松散耦合, 这样虽然对不同体系结构的目标机还是需要重新生成目标调试代理,但可以做到很高的可移植性。在增加对其他目标机的支持时,只需要增加和硬件相关的部分。)自动配置:自动配置实际上是使调试器适应多目标机的一种可能的实现。在调试器运行的时候,面对不同的目标机结构,调试器本身能够自动识别其、外设、存储设备 等,并通过一种建模语言,生成目 标机结构模型,并且根据生成的模型自动调用相应模块工作。这样,可以 实现调试器对不同结构目标机的自适应。)低资源占用:嵌入式设备一般是资源极其有限的。然而传统的调试器,一般都需要在目标机端运行一个独立的调试进程,完成对被调试程序
31、的控制、断点设置、和宿主机的信息交流等,这样就给目标机嵌入式系统带来了较大的资源占用,往往使得被调试的应用由于资源不足而运行缓慢,使得被调试程序在实时性能的反映信息失去了价值。如何降低调试器对目标系统的资源占用也是一个有价值的研究方向。交叉调试系统的结构一个完备的交叉调试系统通常由三个部分组成。一是宿主系统,该系统是运行调试器的平台, 该平台可以是一台一般的机或者工作站,其上运行的操作系统可以是,等。二是目标机系统,目标机上的处理器一般是面向嵌入式的,具有功能密度高,省电等特点,在板上的内存资源一般都很有限,而外部设备 种类多、针对性强。三是通信系 统, 该部分主要是完成调试器到目标机系统的物
32、理连接。本节中主要介绍和调试方式下,交叉调试环 境的构成。第一章引言方式的调试方式下,调试系统由三部分构成(如图所示):宿主机端的调试器,目标机端的以及二者间的通信连接。宿主机端的调试器一般都支持源码级调试,高级的调试器还支持任务级的调试【】【 】。宿主机和目标机的通信连接都是直接连接的方式,不存在中间的硬件转换。通信连接可以是:串口连接,网络连接,连接等。整个调试系统的结构如图所示:被调试程硬件序通信连接硬件图调试方式下的结构方式是的缩写,是公司支持的一种()调试模式。在调试方式下,目标机上不用事先固化任何程序,通过接口可以完成基本的调试功能,例如:设置断点、 读写内存、读写寄存器、下 载程
33、序、单步执行程序、运行程序、停止程序运行等。在宿主机方需要专门的驱动程序,并且在宿主机和目标机间需要用专门的接口电路,由这种方式构成的调试系统的结构如图所示:图方式下的调试环境结构电子科技大学硕士学位论文交叉调试的过程无论是基于方式还是方式,调试 器都是先将被调试程序下载到耳标机,并且应在编译时在被调试程序中加入调试信息,然后调试器让被调试程序按指定的方式运行,直到程序停止将控制权交由调试者。到这里,调试器的行为和使用和通用调试器完全一样【】。调试器可以完成的操作有:设 置断点查 看和修改变量查看和修改寄存器查看和修改内存单步执行等。对于调试者,感觉不到交叉调试和非交叉调试的区别。的 调试方式
34、的调试过程如图所示:宿主机目标机图的调试过程第一章引言选题依据和研究内容在嵌入式软件开发过程中,调试()所消耗的时间往往在总的开发时间中占据很大的比例,一般会占。所以交叉调试器的优劣直接关系着整个开发过程的推进速度。国外在调试器领域发展很快,开发出了很多功能强大的商业化产品。而在国内对这方面的研究相对较少,只有少数几家公司有推出相关产品。对于我们进行嵌入式软件开发,特别是嵌入式操作系统的开发,一个好的开发工具特另是高效的调试工具必不可少。国外的商业化产品大多价格昂贵,而且也无法得到其源代码,想要在上面添加我们所需要的功能几乎是不可能的。因此,根据实际开发的需要,开发出一套自己的嵌入式交叉调试工
35、具,并能 够自由的对其功能进行添加或裁剪,对我们进行嵌入式应用研究和开发,特 别是嵌入式操作系统的研究和开发,有着重要的意义。根据具体开发的需要,什么样的交叉调试工具才能给嵌入式软件开发提供最大的便利,正是需要解决的问题。结合现实技术和实际需要,本课题具体有以下研究内容:是当今最流行的调试器之一,其提供的目 标机端调试代理是基于类系统的简单的任务级调试代理,不能独立于操作系统运行,不能调试操作系统或一些不需要操作系统的简单的应用。本课题将在(图形化的)的基础上, 实现在嵌入式平台上的系统级调试代理。该调试代理运行单独运行于目标机上,既可以调试操作系统,也可以 调试一般的应用。目前已有的调试器可
36、以在线程序下载,但却不支持程序固化,调试器和固化器是分开工作的,这样极不方便,因此本 课题将在调试器中加入固化功能。一般一种调试代理只能 对应种目标机结构,本课题将研究实现能够自适应多种目标机结构的通用的调试代理。本文结构第一章对嵌入式系统的基本概念和特点进行了详细的阐述,介绍了嵌入式系统开发环境和交叉调试的概念,说明调试技术在嵌入式系统开发中的重要性,以及嵌入式交叉调试的概念,术语, 发展状况和未来发展方向。第二章对调试过程电子科技大学硕士学位论文中的关键性技术进行了具体的分析。第三章对的结构进行透彻的分析,对其各个关键性模块进行详细的分析。第四章论述调试代理的总体设计思路。第五章对调试代理
37、实现进行详细的论述。第六章总结全文。第二章调试技术分析和研究第二章调试技术分析和研究调试器设计应遵循的原则调试器所反映的信息必须真实可靠【】调试器作为软件开发者用于查错纠错的工具,它所反映的信息要作为判断程序错误的依据,因此调试器必须做到真实可靠。比如对于高层调试器来说,在源代码到机器代码的映射,对编译器优化代码的处理等方面必须考虑周全。原则调试器应该尽量减少对被调试系统的影响【】。调试进程应尽量减少对被调试进程的影响,尤其是对于动态调试器来说,由于动态调试器在执行过程中要向被调试程序插入断点等手段来控制被调试程序,如果操作影响了被调试程序的正常执行,那么调试 器所反映的调试信息就不再可靠了【
38、】。调试器应提供尽可能多的程序上下文信息调试器用于跟踪错误,他如果能够多的提供一些程序上下文信息,就会给程序开发者判断错误多一份依据,从而能跟快的找到错误。所以,从另一方面说,给出的程序上下文信息的多少反映了调试器的强大与否。调试器的结构尽管调试器产品有着各种各样的形式,但它们本质上都是基于大致相同的结构,所不同的只是某些扩展功能,以及其表 现形式。 图为调试器一般结构。由图中可以看到,调试器需要建立于操作系统至上。调试器核心和操作紧密结合,完成一系列调试特性,并由用户界面提供给调试者。用户界面是直接与调试者交互的部分。优秀的用户界面能够直观地将调试器的功能和特性展现给调试者,并清晰地将调试者
39、需要的信息显示出来。通常的用户界磅面分为命令行方式和图形界面。命令行方式的优点是直接而快速,但是数目众多的命令给调试者带来了额外的记忆负担,对代码和调试信息的显示也不够直观。所以现在大多数调试器都采用图形界面【。电子科技大学硕士学位论文硬件对调试的支持图调试器的一般结构调试器对程序运行的控制离不开计算机硬件和操作系统的支持。很多都内建了对调试的支持特性,而操作系统也都内建了用于调试的接口和功能函数。本节将对硬件和操作系统对调试器的支持进行分析和讨论。硬件调试功能调试器对硬件的基本要求旮】:一种设置断点的方法。断点,指程序代 码中的某个位置,当处理器运行到这个位置时停止执行。最简单的实现方法是在
40、需要断点的地方加入一些非法指令,使程序运行出错停止。中断或陷阱。在某种重要的事件(如程序出错 、外部事件)需要一种机制来通知操作系统,中断和陷阱能很好地完成这个任务。在中断发 生时,能够直接对包括程序指针在内的硬件寄存器进行读写。其他的一些功能能给调试器带来更多有用的特性,但是这些是足以支持调试器的基本特性。需要注意的是,并不需要硬件对单步执行和指令追踪的直接支持,因为这些都可以依靠断点功能来完成。硬件断点断点通常通过一条特殊的指令来实现,它引起操作系统自陷,然后通知调试器。在具有变长 指令的结构中,断点指令一般都具有最短的指令长度。这能够使第二章调试技术分析和研究调试器在添加和删除断点时更加
41、简单【】【。调试器通过操作系统提供的特殊的结构能够对被调试进程的程序区进行读写。给出某个指令地址,调试器先保存该地址的指令,然后在 该地址处插入一条断点指令。当程序运行到该处时,将引起操作系统自陷,而不去执行下一条指令。操作系统发现程序停止执行,并知道为什么会停止,在哪里停止,以及一些运行时进程信息。然后,交由 调试器做进一步的处理。通常,调试器会通过另一个系统子程序获取被调试程序的状态信息,以及当前所有寄存器的一份拷贝。某些情况下,调试器会希望被 调试程序继续执行下去,此时,需要用已保存的原指令替换断点指令, 单步执行该指令,然后从 该指令下一指令开始继续执行。算法如下:】()】),)算法硬
42、件断点算法单步执行单步指处理器每次只执行被调试程序的一条指令。大多数处理器都提供了一个模式位来控制单步执行。通常这是由操作系统控制。由于这个模式位是处理器状态的一部分,所以一个线程单步并不会影响其他线程的运行。处理器通常没有单步直接支持,因为这会影响程序执行速度,这种情况下通过断点来模拟单步执行。错误检测电子科技大学硕士学位论文找出被调试程序中的错误是调试器最重要的功能之一。尽管如此,调试器大多数时候都用来控制程序执行。通常有些错误被处理器发现,例如除 错误,内存访问错误等。而操作系统能检测出另一些错误,如某些端口错误。有些情况下,高级软 件系统检测出另外一些错误,如 栈溢出,数组越界等。无
43、论是哪种情况,操作系统都通知调试器被调试程序在运行中发生了错误,并停止被调试程序运行,将控制权交由调试器。 这对于调试者来说很有用,调试者可以查看程序状态以分析是什么原应引起了错误。因为在程序真正发生错误后将会破坏程序运行环境,导致 错误的原因难以发现,所以在程序真正发生错误之前通知调试者至关重要。调试 器或调试者可以定义错误的严重程度以决定是否允许被调试程序在错误发生后继续运行。 这对于像时钟错误这样的不能认为是系统失效的错误很重要。另一些情况下,即便是严重错误也会被允许发生,交给程序本身的错误处理程序处理。一 观察点(数据断点)支持【】数据断点的功能是当被调试程序的某段存储空间被修改时通知调试器。其目的是指出程序中内存写访问发生的地点,假设其结果和预期的不同。例如,错误地或非预期地改变变量的值。程序中存在一些难以被发现的,它们被检测的位置和导致错误发生的根源位置并不相同。换句话说,代码中发生错误内存访问的位置并不是错误地使用内存访问语句的位置,甚至相隔甚远。硬件对数据断点的支持可以有各种各样的形式。最常用的方法是寄存器,定义 开始地址和长度【 】。然后处理器负责在任何对这段内存的修改发生时,在写操作 发生之前停止执行并通知调试器。另一种相对使用较少的方法是,在硬件没有数据断点寄存器支持时,将