版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、嵌入式系统的调试,提纲,调试方法概述 GDB调试 利用GDB进行本地调试 利用GDB进行远程调试,ARM调试方法,Windows操作系统 ARM ADS/SDT + 调试器 GNU + Cygwin + 调试器 ARM SDT + 简易电缆 Linux操作系统 GNU + GDB,嵌入式软件的调试,交叉调试器 是指调试程序和被调试程序运行在不同机器上的调试器 调试器通过某种方式能控制目标机上被调试程序的运行方式 通过调试器能查看和修改目标机上的内存、寄存器以及被调试程序中的变量等,嵌入式软件调试工具-GDB,GDB是GNU C自带的调试工具 运行程序,可以给程序加上所需的调试任何条件 在给定的
2、条件下让程序停止 在设置的断点处(断点可以是条件表达式) 检查程序停止时的运行状态 当程序被停住时,可以检查此时你的程序中所发生的事。 通过改变一些数据,可以更快地改正程序的错误 动态的改变程序的执行环境,C/C+程序调试前的准备工作,在编译程序时,添加调试信息到可执行文件中 使用编译器( cc/gcc/g+)的 -g 参数 $gcc -g hello.c -o hello,使用GDB进行调试,启动GDB,并装入被调试程序-两种方式 在命令行上键入 gdb 并按回车键 通过file 装入要调试的文件 在命令行上键入 gdb并带文件参数,再按回车键 $gdb 例 GDB并载入程序 gdb_tes
3、t,设置断点(breakpoint),列文件清单 list命令 (gdb) list line1,line2 使用break命令(可简写为b)设置断点 break line-number 使程序恰好在执行给定行之前停止 break function-name 使程序恰好在进入指定的函数之前停止 break line-or-function if condition 如果condition(条件)是真,程序到达指定行或函数时停止 (gdb) break 46 if testsize=100 break routine-name 在指定例程的入口处设置断点,断点的管理,显示当前gdb的断点信息:i
4、nfo break (gdb) info break Num Type Disp Enb Address What 1 breakpoint keep y 0 x000028bc in init_random at qsort2.c:155 2 breakpoint keep y 0 x0000291c in init_organ at qsort2.c:168 删除指定的某个断点 (gdb) delete breakpoint 1 禁止使用某个断点 (gdb) disable breakpoint 1 该命令将禁止断点 1,同时断点信息的 (Enb)域将变为 n 允许使用某个断点 (gdb)
5、 enable breakpoint 1 清除原文件中某一代码行上的所有断点 (gdb)clean number 注:number 为原文件的某个代码行的行号,运行调试,运行程序 (gdb) run 显示数据 利用print 命令可以检查各个变量的值。 (gdb) print p (p为变量名) whatis 命令可以显示某个变量的类型 (gdb) whatis p type = int *,单步执行与退出,单步执行 (gdb)next 不进入单步执行 (gdb)step 进入单步执行 (gdb)finish 如果已经进入了某函数,而想退出该函数返回到它的调用函数中,可使用命令 退出 (gdb
6、)quit,gdb 的常用命令(1),file FILE 装载指定的可执行文件进行调试。 help NAME 显示指定命令的帮助信息。 info break 显示当前断点清单,包括到达断点处的次数等。 info files 显示被调试文件的详细信息。 info func 显示所有的函数名称。 info local 显示当函数中的局部变量信息。 info prog 显示被调试程序的执行状态。 info var 显示所有的全局和静态变量名称。,gdb 的常用命令(2),break NUM 在指定的行上设置断点。 bt 显示所有的调用栈帧。该命令可用来显示函数的调用顺序。 clear 删除设置在特定
7、源文件、特定行上的断点。其用法为clear FILENAME:NUM continue 继续执行正在调试的程序。该命令用在程序由于处理信号或断点而 导致停止运行时。 display EXPR 每次程序停止后显示表达式的值。表达式由程序定义的变量组成。 kill 终止正被调试的程序。 list 显示源代码段。 make 在不退出 gdb 的情况下运行 make 工具。 next 在不单步执行进入其他函数的情况下,向前执行一行源代码。 print EXPR 显示表达式 EXPR 的值。,gdb 使用范例,清单 一个有错误的 C 源程序 mytest.c - 1include 2 3static c
8、har buff 256; 4static char* string; 5int main () 6 7printf (“Please input a string: ”); 8gets (string); 9 printf (nYour string is: %sn, string); 10 ,范例的编译运行,程序目的 是接受用户的输入,然后将用户的输入打印出来 编译运行$ gcc -o mytest -g mytest.c $ ./mytest Please input a string: asfd Segmentation fault (core dumped) 错误分析 使用了一个未经
9、过初始化的字符串地址 string,段错误!,错误定位-范例的调试,#(gdb)run,#gdb mytest,#(gdb)where,#(gdb)list,gets (string); printf (nYour string is: %sn, string); ,#(gdb)print string,string不合法,#(gdb)break 8,#(gdb)run,#(gdb)set string=“”,#(gdb)continue,正常结束,提纲,调试方法概述 GDB调试 利用GDB进行本地调试 利用GDB进行远程调试,远程调试带来的问题,涉及两方,如何通信? 调试器与被调试程序 被调
10、试程序产生异常 如何及时通知调试器 调试器如何控制、访问被调试程序 调试器如何识别有关被调试程序的多任务信息并控制某一特定任务 调试器如何处理某些与目标硬件平台相关的信息,嵌入式Linux的远程调试环境的搭建原理,调试器 运行于通用桌面操作系统的应用程序 被调试的程序 运行于基于特定硬件平台的嵌入式Linux(目标操作系统)上,插桩(stub),插桩(stub)方案 在目标操作系统和调试器内分别加入某些功能模块,二者互通信息来进行调试 解决远程调试的问题 调试器与被调试程序的通信 被调试程序产生异常及时通知调试器 调试器控制、访问被调试程序 调试器识别有关被调试程序的多任务信息并控制某一特定任
11、务 调试器处理与目标硬件平台相关的信息,远程调试示意图,使用GDB远程调试原理图,生成arm-linux-gdb,生成gdbserver,利用arm-linux-gcc 编译源文件,宿主机,目标机,运行arm-linux-gdb,运行gdbserver,gdbserver,编译好的可执行文件,利用GDB进行远程调试,编译宿主机上的GDB调试器,解压gdb-5.3.tar.gz 创建 makefile 文件 ./configure -target=arm-linux -prefix=/usr/local/arm-gdb v #make #make install 在 /usr/local/arm
12、-gdb/bin 中生成arm-linux-gdb,编译目标机上的stub程序,设置编译环境 export PATH=$PATH:/usr/local/arm-gdb/bin 生成makefile ./configure -target=arm-linux -host=arm-linux 编译用于目标机的stub程序 gdbserver make CC = /usr/local/xsbase-arm-linux-R1/bin/arm-linux-gcc编译 在gdb/gdbserver目录下将生成gdbserver,宿主机和目标板之间的通信连接准备,建立宿主机和目标板之间的TCP/IP连接 设
13、置XSBase 的IP地址是192.168.100.50 假设主机平台的 IP是192.168.100.216 利用arm-linux-gcc编译测试程序bubble.c文件 #arm-linux-gcc -g bubble.c -o test 下载test和gdbserver到XSBase目标板,建立gdb和gdbserver的连接,在XSBase目标板上运行gdbserver 拷贝test程序到主机平台上的/usr/local/arm-gdb/bin目录下,然后执行arm-linux-gdb #arm-linux-gdb,连接到xsbase开发板 如果连接成功的话,在XSBase上将出现下面的信息,内核调试,kgdb 是一个在Linux内核上提供完整的gdb调试器功能的补丁 通过串口线以钩子的形式挂入目标调试系统进行工作,而在远端运行gdb 使用kgdb时需要两个系统 一个运行调试器 一个运行待调试的内核 不同体系结构、不同内核版本使用的kgdb由不同的人员维护 使用时确保KERNEL_HACKING被选上
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 幼儿小班电梯安全课
- 塑料厂经理年度述职报告
- 危险化学品储存企业安全生产责任制度
- 安全生产规章制度培训责任制实施细则
- 月度生产计划编制管理规定
- 生活与健康课件
- 幼儿园值班管理制度模板
- 客运车辆安全警示教育
- 夏季安全出行指南
- 老年护理学(高起专)学习指南西交大考试题库及答案
- 2025河南新乡市卫滨区博涵小学招聘考试参考题库附答案解析
- 义齿佩戴清洗存放课件
- 2025北京市交通发展年度报告
- 信用卡部培训大纲
- 代建公司代建管理制度
- 煤生字第665号关于颁发《煤矿矿井机电设备完好标准》的通知
- 滚针美容治疗技术解析
- 2025黑龙江七台河辰能生物质发电有限公司招聘笔试参考题库附带答案详解
- 2024-2025学年北师大版物理八年级上册月考模拟试卷(1-2章)(含答案)
- 小区保安服务 投标方案(技术方案)
- 兰州市文职辅警招聘考试真题
评论
0/150
提交评论