3430110陈南博09计科A2实验报告五gdb远程调试实验.docx
- 文档编号:12484804
- 上传时间:2023-04-19
- 格式:DOCX
- 页数:13
- 大小:323.54KB
3430110陈南博09计科A2实验报告五gdb远程调试实验.docx
《3430110陈南博09计科A2实验报告五gdb远程调试实验.docx》由会员分享,可在线阅读,更多相关《3430110陈南博09计科A2实验报告五gdb远程调试实验.docx(13页珍藏版)》请在冰豆网上搜索。
3430110陈南博09计科A2实验报告五gdb远程调试实验
上海第二工业大学计算机科学与技术系
学生实验报告
课程名称
嵌入式操作系统B
实验类别
验证型
实验项目名称
GDB远程调试实验
班级
09计科A2
姓名
陈南博
学号
20113430110
实验时间
2012年5月9日
实验地点
15号楼507
指导教师
崔莉莉
组号
同组学生信息(请填写在下方)
班级
09计科A3
姓名
丁云龙
学号
094831523
一、实验目的和要求
1、掌握创建交叉编译环境的方法;
2、学习GDB本地调试方法,熟悉GDB的各项命令,熟练掌握利用GDB进行远程调试的过程。
二、实验内容和原理
实验内容:
1.创建交叉编译环境(利用ToolChain)。
2.利用GDB进行远程调试。
实验原理:
GDB功能一般来说,GDB主要帮助你完成下面四个方面的功能:
1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
2、可让被调试的程序在你所指定的调置的断点处停住。
(断点可以是条件表达式)
3、当程序被停住时,可以检查此时你的程序中所发生的事。
4、动态的改变你程序的执行环境。
GDB常用命令:
命 令
描 述
file
装入想要调试的可执行文件.
kill
终止正在调试的程序.
list
列出产生执行文件的源代码的一部分.
next
执行一行源代码但不进入函数内部.
step
执行一行源代码而且进入函数内部.
run
执行当前被调试的程序
quit
终止 gdb
watch
使你能监视一个变量的值而不管它何时被改变.
break
在代码里设置断点, 这将使程序执行到这里时被挂起.
make
使你能不退出 gdb 就可以重新产生可执行文件.
shell
使你能不离开 gdb 就执行 UNIXshell 命令.
远程调试原理图:
GDB远程调试示意图:
三、主要仪器设备
1、安装有Linux操作系统的微型电子计算机1台
2、XSBase270或XSBase255ARM教学实验开发平台1套
四、操作方法与实验步骤
1.安装ToolChain,需要在开发主机上创建目录,并将光盘内容拷贝到目录中。
在根目录创建了一个名为pxa255的目录,已经将光盘内容拷贝到了该目录中。
#cd/root/pxa255
#cdToolchain
#cphybus-arm-linux-R1.1.tar.gz/usr/local
#tarxvfzhybus-arm-linux-R1.1.tar.gz
移动到bin目录下使用ls命令查看,可以看到一些编译工具,这些工具将会在之后的交叉编译过程中使用到。
为了之后任何目录下面都能使用Toolchain,必须对路径进行设置,打开/root/.bash_profile文件来设置路径,使用vi编译器来修改.bash_profile文件。
#cd/root
#vi~/.bash_profile
用vi打开此文件并添加下列路径
PATH=$PATH:
/usr/local/hybus-arm-linux-R1.1/bin
退出并保存该文件,使用source命令来使新的路径起作用。
#souce~/.bash_profile
此时使用arm-linux命令式,Toolchain中的工具会被使用可查看arm-linux-gcc命令查看版本#arm-linux-gcc–v
2.Toolchain测试
建立一个简单名为”hello.c”的C程序进行验证。
通过arm-linux-gcc命令可以生产一个运行在ARM的目标文件hello.用file查看其类型
启动目标板在minicom中login中输入root.
利用zmodem下载hello到XSBase目标板。
在minicom窗口中按Ctrl+A然后按Z键出现minicom配置窗口、按s选择zmodem
你可以看到PC机平台目录。
从/root中下载hello,用ls查看目标板hello,文件。
运行该文件可以看到运行结果
3.编译GDB
GDB用arm体系的GCC编译,因为XSBase的XscalePXA255芯片是arm内核,toolchain必须在主机平台上重新安装,来编译于arm的gdb.
编译GDBserve
解压gdb-5.3.tar.gz
#cd/root/pxa255/gdb
#cpgdb-5.3.tar.gz/usr/local
#cd/usr/local
#tarxvzfgdb-5.3.tar.gz
运行cnfigure创建make文件,执行make
#cdgdb-5.3
#./configure–target=arm-linux–prefix=/usr/local/arm-gdb–v
#make
#makeinstall
GDB客户端编译
移动到GDB目录编译
#cd/usr/local/gdb-5.3
#exportPATH=#PATH:
/usr/local/arm-gdb/bin
#./configure–target=arm-linux–host=arm-linux
XSBase的客户端程序在gdb/gdbserver
#cdgdb/gdbserver
#makeCC=/usr/local/hybus-arm-linux-R1.1/bin/arm-linux-gcc
如果没有编译错误gdbserver将生成在gdb/gdbserver目录下,这个文件时gdb客户端程序,在XSBase下运行。
4.GDB调试
板子通过以太网进行调试,所以TCP/IP协议可用。
默认XSBase的ip是192.165.0.50
设置主机平台IP
5.TEST调试代码
创建一个test.c文件
运行test文件,查看结果
test文件没有达到预期效果所以需要用gdb调试程序
用arm-linux-gcc编译#arm-linux-gcc–gtest–otest
转移到xsbase上
下载test和gdbserver到XSBase,
利用zmodem来下载,前面已经说明过,此步省略。
执行test
有断错误明显不是我们希望得到的结果。
在XSBase板子上运行gdbserver。
从服务等待请求。
拷贝test程序到主机平台上的/usr/local/arm-gdb/bin目录下,然后执行arm-linux-gdb
连接到XSBase
连接成功的话,在XSBase上将出现下面信息。
6.调试
导入symbol文件
用list查看命令代码内容。
然后修改代码的过程在”五、实验数据记录和处理”中的2说明
退出GDB,修改错误,然后重新生成目标文件闯到目标机上运行,可以看出结果正确.
五、实验数据记录和处理
1.在编译GDB客户端程序时出现下面错误信息
……
……
Make:
”*”[linux-arm-low.o]错误1
解决这个错误,修改gdb/gdbserver/config.h文件
注释掉“#defineHAVE_SYS_REG_H1”
在运行make
#makeCC=/usr/local/hybus-arm-linux-R1.1/bin/arm-linux-gcc就可以了
2.修改test文件。
在第9行设置断点查找出错原因
执行代码
用step命令继续执行
XSBase输出变量j的值。
在下面的单步选中变量i和j的值
发现j=i/2-1是不真确应该修改为j=(double)i/2-1
查找其他bug,在strcpy(str,”hello,world”)设置一个断点
查看str变量值,然后单步运行pstr发现错误,修改13行前添加str=(char*)calloc(1,sizeof(char)).
六、实验结果与分析
作业1:
在实验报告中写出filehello命令执行后的显示结果,并比较与gcc命令产生的目标文件类型比较,说明二者有什么区别?
通过arm-linux-gcc命令生成的目标文件hello可以在PC机上运行吗?
写出原因。
Arm-linux-gcc的文件不能再PC机上运行,因为他没使用arm-linux内核,而目标板可以。
作业2:
如果要将实验三的”3.3使用预定义变量对多个.c文件编译”产生的运行结果运行在目标板上。
如何修改makefile文件,记录源程序,并将整个实验过程及运行结果记录在实验报告上。
Makefile:
七、实验心得与体会
本次实验,是利用gdb及toolchain对程序的远程修改,由上次实验的烧写,编写内核,到这次的修改程序,调试程序,是对xsbase的运用循序渐进的学习。
使我了解到了gcc和arm-linux-gcc的区别,还学会了makefile对arm-linux-gcc也能运用,巩固了以前的知识。
本次实验使我受益匪浅,为下次实验烧写文件系统做了良好的铺垫。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 3430110 陈南博 09 A2 实验 报告 gdb 远程 调试