实验XXGDB调试实验.docx
《实验XXGDB调试实验.docx》由会员分享,可在线阅读,更多相关《实验XXGDB调试实验.docx(17页珍藏版)》请在三一办公上搜索。
1、实验XX GDB调试实验【实验目的】1、熟悉GDB的各命令。2、学习 arm-linux-gdb 的使用。3、掌握嵌入式Linux的交叉调试的方法。【实验内容与步骤】1、GDB命令本节将结合一个简单的例子,向大家演示这些常用指令的具体应用。这是一个冒泡排序 算法的程序,这个例子的目的仅仅是演示,并不是实际调试。将下面的源程序存为bubble.c 文件,并编译好。include #define MAX_RECORD_NUMBER 10int recordMAX_RECORD_NUMBER=12,76,48,62,94,17,37,52,69,32;void swap(int * x , int
2、* y )int temp;temp = *x;*x = *y;*y = temp;int main()int i,j;for( i = 0 ; i i; j-)if( recordj recordj-1) swap(&recordj,&recordj-1);for( i = 0; i MAX_RECORD_NUMBER -1; i+)printf(%d ,recordi);Lprintf(n);return 1;记得在编译时用-g开关。口: gcc -g -o bubble bubble.c。你能在当前子目录下得到一个 编译好的文件bubble。我们下面将以这个程序为例子向大家演示上面的指令
3、在实际中的应 用。首先启动GDB,可以在启动的同时载入文件bubble,如:gdb bubble。也可以分两步进 行,先启动GDB,执行gdb,进入GDB后,再执行file bubble。这时可以用list指令列出源程序,list的使用比较简单,但其实在GDB中最不方便的就 是看源程序,主要原因是因为GDB仅是一个文本方式的调试器,无法让你用鼠标和光标键 来翻阅源程序,在这方面ddd等窗口程序有巨大的优势。我们先来查看一下当前源程序的信息,如下:(gdb) info sourceCurrent source file is bubble.cCompilation directory is /r
4、oot/sampleLocated in /root/sample/bubble.cContains 32 lines.Source language is c.Compiled with DWARF 2 debugging format.Does not include preprocessor macro info.我们可以知道程序名,目录,文件大小,语言等信息。下面我们来设置断点,我们想在函数swap出设置一个断点:(gdb) br swapBreakpoint 1 at 0x80483d6: file bubble.c, line 11.br是break的简写。上面的一行是GDB告诉我
5、们这个断点的信息,我们可以知道这个断点的断点号是1,地址是0x80483d6,它在文件bubble.c的11行。我们再在一个行号上设一个断点,(gdb) br 23Breakpoint 2 at 0x804844a: file bubble.c, line 23.我们已经设了两个断点,许多时候你会想查看一下断点的信息和状态,因此你会用到你(gdb) info br Num Type1 breakpoint2 breakpoint最常使用的info指令,info br。Disp Enb Address Whatkeep y 0x0804832e in swap at bubble.c:11kee
6、p y 0x08048390 in main at bubble.c:23用这条指令的大多数原因是想查看一下某个断点的断点号,就是第一列的数值。有时也 会看一下断点的状态是enable还是disable。以上的两个断点都是y,也就是都处于enable 状态。type列显示breakpoint,是因为info br指令同时也会显示watch的信息,因此用type 来识别是断点breakpoint还是检查点watch。如果你知道断点号,想删除断点很简单,例如想删除断点2,执行del 2就行了。在程序中,断点2本来设在循环中,那样程序会频繁断下,这也许不是我们希望的。也 许我们仅想在某个条件下让它断
7、下,如想当j=5时。(gdb) del 2(gdb) info br Num TypeDisp Enb Address What1 breakpointkeep y 0x0804832e in swap at bubble.c:11(gdb) br 23 if j=5Breakpoint 3 at 0x8048390: file bubble.c, line 23.(gdb) info br Num TypeDisp Enb Address What1 breakpointkeep y 0x0804832e in swap at bubble.c:113 breakpointkeep y 0x
8、08048390 in main at bubble.c:23stop only if j = 5注意现在的断点信息,虽然断点2被删除了,但新设的断点号没有使用2号,而是使用 了 3号。新设的断点是个条件断点,这从stop only if j = 5可以清楚的看出。现在1执行程序,输入run指令。(gdb) runStarting program: /root/sample/bubbleBreakpoint 1, swap (x=0x8049524, y=0x8049520) at bubble.c:1111 temp = *x;程序已经在断点1停了下来。当断点停下时,我们经常需要查看变量值。
9、如查看x值。(gdb) p x$1 = (int *) 0x8049524GDB告诉我们x是一个指向整数的指针,指针值是0x80495a4。如果想查看指针指向的 值。执行:(gdb) p *x$2 = 32(gdb) p *y$3 = 69然后,单步执行t(gdb) n12 *x = *y;查看变量temp值(gdb) p temp$4 = 32(gdb) n13 *y = temp;(gdb) p *x$5 = 69现在删除断点1(gdb) del 1继续执行(gdb) contContinuing.Breakpoint 3, main () at bubble.c:2323swap(&re
10、cordj,&recordj-1);程序在断点3停下,记得断点3是个条件断点。要验证很简单,查看一下变量的值是 不是5。(gdb) p j$6 = 5我们可以查看一下全局变量record的值,(gdb) p record$7 = 12, 76, 48, 62, 94, 17, 32, 37, 52, 69也可以查看一下变量record的地址,(gdb) p &record$8 = (int (*)10) 0x8049500知道地址时,也可以x指令查看内存值。(gdb) x/4uw 0x8049500 0x8049500 :12764862上面的指令查看4个4字节数,以整数方式显示。可以看到这与
11、reocrd值是相附的。(gdb) x/4bb record 0x8049500 :12000显示4个单字节数,以字节当时显示。上面的4个字节值正好是record数组第一个整 数值,因为整数是4字节,而且intel机器的数值是低字节在前。改变变量值也很简单,如果想将reocrd数组第一个值改为1,(gdb) set record0=1看一下值是否改变了。(gdb) p record$10 = 1, 76, 48, 62, 94, 17, 32, 37, 52, 69第一个值已经改成了 1。以上简单地介绍了一些常用的GDB指令,由于篇幅所限,无法涉及GDB所有指令及GDB 其它许多功能,应当自己
12、在实践中不断地学习。Linux系统中会有详细的GDB的资料,可以 用info gdb来查阅这些资料。2、利用GDB进行远程调试完成上面的基础实验之后,应该掌握了基本的GDB命令使用,接下来的这一小节我们 将利用GDB进行远程调试。GDB远程调试并不像在本机上调试一个可执行程序那么简单, 因为需要在两台机器的连接的基础上进行调试,为了使便于理解,我们选用了较为容易的搭 建一个主机PC端的gdb和目标机端的gdbserver方式来进行实验。2.1编译GDBGDB用ARM体系的GCC编译,因为XSBase开发板上的的Xscale PXA255芯片是ARM内 核。Toolchain必须在主机平台上重新
13、安装来编译用于ARM的GDB。2.1.1 编译 GDB Server,解压 gdb-5.3.tar.gz.root$super root# mkdir /HYPER255/temproot$super root# cp gdb-5.3.tar.gz /HYPER255/temproot$super temp# cd /HYPER255/temproot$super temp# tar xvzf gdb-5.3.tar.gz运行configure创建make文件,执行make。root$super temp# cd gdb-5.3root$super gdb-5.3# ./configure -
14、target=arm-linux -prefix=/usr/local/arm-gdb-v root$super gdb-5.3# make root$super gdb-5.3# make install配置选项:target :选择 arm-linux 因为 XSBase255 是基于 ARM。prefix :当你执行make install时选择安装路径如果编译没有任何错误,arm-linux-gdb将生成在/usr/local/arm-gdb/bin。 Arm-linux-gdb运行在主机平台上成为GDB服务器,用来远程调试XSBase255板子。2.1.2 GDB客户机端编译 首先进
15、入GDB目录编译root$super root# cd /HYPER255/temp/gdb-5.3root$super gdb-5.3# export PATH=$PATH:/usr/local/arm-gdb/binroot$super gdb-5.3# ./configure -target=arm-linux -host=arm-linuxtarget :选择 arm-linux 因为 Hyper255 是基于 ARM 的。host :选择 arm-linux 因为 Hyper255 是基于 ARM 的。 客户端程序在gdb/gdbserver目录下root$super gdb-5.3
16、# cd gdb/gdbserverroot$super gdbserver# make CC=/usr/local/hybus-arm-linux-R1/bin/arm-linux-gcc 如果你按上面的编译会出现下面的错误信息。linux-arm-low.c:26: sys/reg.h: No such file or directory解决这个错误,请修改gdb/gdbserver/config.h文件。#define HAVE_SYS_REG_H 1- /#define HAVE_SYS_REG_H 1按上述的注释“define HAVE_SYS_REG_H 1”句子。 再执行make
17、root$super gdbserver# make CC=/usr/local/hybus-arm-linux-R1/bin/arm-linux-gcc 如果没有编译错误gdbserver将生成在gdb/gdbserver目录下。这个文件是GDB 客户端程序,在xsbase开发板上运行。2.2 GDB调试GDB通过以太网对XSBase255板进行调试。因此,必须使主机平台和XSBase实验平台 之间的TCP/IP协议可用。首先,检查主机平台和XSBase255实验平台之间的通信。默认xsbase的IP地址是 192.168.100.50。在这节实验中,假设主机平台的IP是192.168.10
18、0.216。root$super gdbserver# ifconfig eth0 192.168.100.2162.2.1编写需调试代码源文件名:test.c#include int main()int i;double j;char *str = NULL ;for(i=0; i5; i+)j = i/2 + i;printf(j is %f n, j);strcpy(str,hello, world);printf(str is %s n, str);return 0;J这个程序代码是把变量i和变量i/2加到j中,然后拷贝字符串到指针变量str 并输出。下面的输出是希望得到的。j is
19、0.000000j is 1.500000j is 3.000000j is 4.500000j is 6.000000str is hello. world然而,它并没有得到上面的结果。用GDB调试程序。2.2.2 用 arm-linux-gcc 编译root$super temp#arm-linux-gcc -g test.c -o test2.2.3下载到目标平台下载test和gdbserver到XSBase255目标板。Zmodem和ftp都可以用来下载。例 如我们用zmodem来下载。按Ctrl+A然后再按Z键出现minicom配置窗口。mi把 4urn; ct-cfv?普州皿 nw
20、 flruKiDMiiWnmnd Snimt r vOxTHbnih ri iw5Dlu 1 ln 割rwry. .D Saikd. riIo a .Scixara Pa rarrn La r b . . . . P Giplu ra nfk/ri-Fr. .L send brak .PTerninal settings. T I ircWap on-Xof f. .I ijl!i rtol.RicCiVt JbUtfiAdil 1 LncJiMHlEhri|Up . “E“EE“EE“. rniLMlize Nbdrm tuh Nriri 1. kml Etha un/nff.M.札kClc
21、jir EerceiiCnil lv r-i Min I 虬-口 Sa i p4J. onirii irr3i. . . _J Mil jaJ. ra id 1 . . . . .X i i *i It rcse irQ iQirscr ify node . .1 Ih Ip icrtcni.Zitrtfl 1 Uii:k泪Sdla-s-E Fun-eLban arlinitr for1WiLLrn by Mqurl v-an Snuurfiibire Ittl-ltti Sarrr addi Lmni: by Jukka Lahiinm by Arn& tdo Ofnilihn de Mi
22、IdWTJCij按s键选择zmodem。图2可以看到主机平台的目录,从/HYPER255/temp/gdb/gdbserver中下载gdbserver。- L ,5-.L i 上-1 !- L- L ,5-.L i 上-1 !- LhET-fe Lin.-. KT/IP 3.9 Wr NZT-1.0JI?IIP. 1XFJI? : ru i gb| cdv ha ck i ih la Si t bufap i n. 4Uiyivi ICf: itaih ibiki l ctibT sgurpd * i: iah I uahJ. 4lJK bLU D#!1用同样的方法下载test,然后执行tes
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验XX GDB调试实验 实验 XX GDB 调试
链接地址:https://www.31ppt.com/p-5174952.html