资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,#,第七章,AXD,调试工具的使用,一、,AXD,调试工具介绍,二、,AXD,调试方法,一、,AXD,调试工具介绍,1.1 AXD,调试介绍,AXD,支持多种调试方法:,JTAG,、,Angel,、,ARMulator,等等。,AXD,调试工具具有如下一些特点:,提供合适的调试方法,比如中断功能、断点设置、连续运行或非连续运,行等;,能够执行所设计的计算机指令,检查软件程序设计是否存在缺陷;,能够方便地监测调试对象的运行和程序的运行;,能够根据调试命令实时控制硬件动作,检测硬件电路设计是否合理。,1.,使用,JTAG,的调试方法,调试系统一般包括三个部分:调试主机、协议转换器和调试目标。,通过,JTAG,接口直接和,ARM,内核对话,实现了如下功能:,1.,程序下载,;,2.,停止或启动程序运行,;,3.,观察和修改内存,;,4.,观察和修改,ARM,的内核运行状态,.,2,使用,Angel,的调试方法,3,使用,ARMulator,的调试方法,AXD,提供的一种软件仿真的调试方法,,ARMulator,调试方法。,ARMulator,调试方法是一种脱离硬件调试软件的方法。这种方法所使用的工具软件是,armulate.dll,。,Angel,是,AXD,中的另一种调试方法或工具。这种方法的软件支持工具(调试环境)称为,ADP,(,Angel Debug Protocol,),其文件名是,remote_a.dll,。,Angel,调试方法的结构包括计算机和目标板两部分。这种调试方法在目标板上必须含有调试监控程序。计算机和目标板的通信实际上是计算机与调试监控程序之间的通信。,AXD,调试结构,1.2 AXD,调试步骤,AXD,调试界面,各菜单的含义如下:,File,用于文件管理;,Processor Views,用于处理器选项管理,可以选择在调试时观察处理器的某些选项:如寄存器、变量和存储器等;,System Views,用于对调试目标管理,这是处理器以外的内容,比如其他寄存器和断点等;,Options,用于对,AXD,进行配置,如进行目标配置;,Excute,控制程序运行,如单步、执行到断点等。,进行程序调试前的两个基本步骤:,1,目标配置,单击菜单“,Options”“Configure Target”,,弹出一个,Target Environments,选项窗口。这个窗口中有几个系统加载的选项,如图所示。,使用,ARMulate,作为调试工具,点击“,Configure”,,则出现如图所示的配,置对话框。,2,加载映像文件,加载已经编译和链接过的映像文件:,进入菜单,File,后,选择上面第,1,项,Load Image,加载映像文件,弹出一个文件搜索对话窗口。加载的映像文件在工程项目文件夹中,扩展名是,AXF,,文件名称和工程项目名称相同。,打开映像文件之后,大部分选项被激活。可以进行其他选项设置,也可以开始调试。,注意:,AXD,没有复位功能,调试过程中如果想重新运行程序,需要重新加载程序。,1.3 View,菜单介绍,Processor Views,菜单,System Views,菜单,1.Control Monitor,菜单介绍,选择“,System Views”“Control Monitor”,,就会打开如图所示的显示窗口。这个“,Control Monitor”,窗口共有四个标签页:,Target,、,Image,、,Files,、,Class,。在“,Control Monitor”,窗口的任一标签页中点击右键,选择右键菜单“,Hide”,命令可以隐藏本窗口。,Target,标签页,在,Target,标签页中,显示了当前的目标硬件,如图所示,图中显示当前的目标硬件是,ARM7TDMI,内核。,Image,标签页,:,显示了当前装载的映像文件路径和名称,Files,标签页,:,显示这个映像文件所涉及到的一些源文件,Class,标签页:,显示这个映像文件所涉及的类、全局变量和全局函数。,2,Output,、,Console,菜单介绍,Console,窗口是一个控制台窗口,不但可以接收用户的按键信息,而且可以显示程序的输出信息。,这个输出窗口共有,RDI Log,和,Debug Log,两个标签页,分别显示,RDI,日志信息和调试过程中产生的日志信息。,3,Disassembly,、,Source,菜单介绍,在“,Processor Views”,菜单下“,Source”,菜单用来打开源程序;“,Disassembly”,菜单用来打开反汇编代码文件。,4,Registers,菜单介绍,调试中有两部分寄存器:,一部分是,ARM,内部的寄存器;,一部分是,ARM,外部其他模块的寄存器。,单击“,Processor Views”“Registers”,打开一个,ARM,寄存器选项窗口。,ARM,寄存器窗口,ARM,寄存器选项窗口共有,8,个选项,每个选项可以打开一组寄存器。,1.Current,当前工作寄存器,包括,RO,R14,、,PC,、,CPSR,和,SPSR,;,2.User/System,用户模式,/,系统模式寄存器组,包括,RO,R14,、,PC,、,CPSR,;,3.FIQ,快速中断模式寄存器组,包括,FIQ,模式中的,R8,R14,、,SPSR,;,4.IRQ,通用中断模式寄存器组,包括,IRQ,模式中的,R13,、,R14,和,SPSR,;,5.SVC,管理模式寄存器组,包括管理模式中的,R13,、,R14,和,SPSR,;,6.Abort,中止模式寄存器组,包括,abt,模式中的,R13,、,R14,和,SPSR,;,7.Undef,未定义模式寄存器组,包括,und,模式中的,R13,、,R14,和,SPSR,;,8.Debug Comms,调试信息,包括控制信息寄存器,读状态寄存器和写 状态寄存器。,5,Memory,菜单介绍,单击菜单栏“,Processor Views”“Memory”,打开存储器显示窗口。,在,Start addresser,处可以输入要显示内存的起始地址,图中输入,0 x8000,,所以内存单元内容从,0 x8000,处开始显示。,6,Low Level Symbols,菜单介绍,左侧的窗口是符号表管理窗口,每个符号都对应一个地址。,7,Watch,菜单介绍,使用观测项,(Watch),可以在调试程序时动态地了解某些信息,这些信息取决于所设置的观测项的表达式。,在观测项窗口所得到的是一个表达式的值,表达式可以由程序调试者输入。,R0+R5-R6,;使用寄存器和算术运算符,R0+R7*0 x20,;使用寄存器和算术运算符,&b,;求变量,b,的地址,b+value,;两个变量相加,Add Watch,添加观察项;,Locate Using Value,搜寻观察项的值;,Locate Using Address,搜寻观察项的地址;,Format,设置数据显示格式。,Add Watch,窗口,在,Watch,窗口的右键菜单中选择“,Add Watch”,。然后单击,Evaluate,按钮,这个表达式和这个表达式的值就会出现在下面的窗口中。,8,Watchpoint,菜单介绍,AXD,中还有一种辅助调试手段,叫做观测点(,Watchpoint,)。观测点与观测项的主要区别:,1.,观测项是检查一个表达式的值,要对表达式进行计算,而观测点不对表达式进行计算;,2.,观测项不会使正在执行的程序停止;而观测点与断点一样可以使程序停止;,3.,观测点和断点一样,可以设置实现条件;观测项没有条件,通过菜单选项“,Systerm Views”“Watchpoint”,打开系统观测点管理窗口:,State,:,表明当前观测点的状态,当图标为圆形时,该观测点处于打开状态;,Processor,:,目标处理器的名称;,Item,:,观测点的地址或名称,可能是变量名、寄存器名或者是地址;,Watching,:,注释项;,Count,:,计数器,分母是一个设定的循环次数。,Condition,:,观测点条件;,Action,:,程序执行到观测点时有两种可能的结果:一种是停止运行(,Break,);另一种是注释字符串到指定日志文件中。,右键菜单中选择“,Add”,,系统弹出一个观测点设置对话框,如图所示,二、,AXD,调试方法,1.1,常用的调试方法,控制程序运行的方法分为两种:,单步运行,单步运行就是让程序一条语句接一条语句执行,可以通过查看寄存器、内存表、变量以及表达式的值来判断程序的运行结果。,设置断点运行。,设置断点的方法能够用来调试大段的程序。程序中并不重要部分直接让它运行,在程序中的关键点处设置断点,当程序运行到断点处时会自动停止,然后观察运行的结果或决定程序是否继续运行。,1.2,单步调试,工具栏中的“,单步,”运行按钮。这个单步运行操作使程序执行到下一条指令。如果指令是一条函数调用指令,则这项功能不进入函数体内。,工具栏中的“,进入单步,”运行按钮。这个单步运行操作使程序运行到下一条指令。如果指令是一条函数调用指令,则这项功能将进入函数体内。,工具栏中的“,跳出单步,”运行按钮。这个单步运行操作使程序执行到下一条指令。如果指令是在函数体内,则这项功能使程序跳出函数体。,工具栏中的“,执行到光标处,”运行按钮。这项功能可以使程序运行到事先选定的指令行。,字符串拷贝程序清单,AREABufData,DATA,READWRITE,;声明数据段,BufData,MesDCB“HELLO,,,The World!”,BufSPACE 100,;分配,100,字节空间,AREAExample1,CODE,READONLY,;声明代码段,Example1,ENTRY,;标识程序入口,CODE32,;声明,32,位,ARM,指令,STARTLDRR1,=Mes,LDR R2,=Buf,LDRB R3,R1,#16,;装载,Mes,数组的最后一个字符,$,NLDRBR0,R1,#1,;读源地址的字符,,R1,自动加,1,STRBR0,R2,#1,;保存字符到目的地址,,R2,自动加,1,CMPR0,R3,;比较,判断字符是否为,$,BNEN,;没有碰到,$,,继续传送字符,BSTART,END,源程序窗口和反汇编窗口,存储器显示窗口,1.3,使用断点进行调试,1,断点的简单应用,在调试程序的过程中,使用断点是经常要使用的方法。,设置断点,在源程序或反汇编程序的窗口中,把光标指向要设置断点的指令行,双击即把这个选中的指令行标注为断点位置。或者单击要设置为断点的指令行设置断点。,执行到断点,按,F9,键使程序开始运行,直到最近一个断点。,删除断点,删除断点跟设置断点一样,最简单的方法是:在源文件或反汇编文件的断点位置双击这个指令行,就可以删除这个断点。,2.,断点管理窗口,State,断点状态;,Processor,处理器型号;,Position,断点位置;,Count,断点计数器;,Condition,断点计数器计数条件。,Size,代码类型。,Action,断点执行动作。,Add,增加一个断点;,Disable,关闭选中的断点;,Delete,删除选中断点;,Delete All,删除断点管理窗口中所有的断点;,Locate Using Address,搜索断点所在指令行的地址;,Refresh,断点管理窗口中的内容刷新一次;,Properties,设置断点的属性。,Float within main window,使断点管理窗口浮置,浮置的窗口可以悬挂在屏幕的任意位置;,Allow docking,吨使断点管理窗口锁定在屏幕边缘位置。,Hide,隐藏断点管理窗口;,Close,关闭断点管理窗口。,断点管理窗口中的右键下拉菜单,思考题,1,、为什么要进行程序调试,即程序调试的作用是什么?,2,、,AXD,调试工具支持哪些调试方法,这些调试方法分别需要配套什么样的实验环境。,3,、,AXD,调试的大致步骤是什么?,4,、在程序运行过程中,请问如何观察某个寄存器的值,如何观察某段内存的内容,如何观察某个变量的变化?,5,、在使用,AXD,工具进行程序调试时,有哪些常用的调试方法?,
展开阅读全文