3430110陈南博09计科A2实验报告五gdb远程调试实验Word文档格式.docx
《3430110陈南博09计科A2实验报告五gdb远程调试实验Word文档格式.docx》由会员分享,可在线阅读,更多相关《3430110陈南博09计科A2实验报告五gdb远程调试实验Word文档格式.docx(13页珍藏版)》请在冰点文库上搜索。
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
使你能不离开
就执行
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也能运用,巩固了以前的知识。
本次实验使我受益匪浅,为下次实验烧写文件系统做了良好的铺垫。