欢迎来到天天文库
浏览记录
ID:41360551
大小:38.00 KB
页数:4页
时间:2019-08-22
《实验33 GDBDebugger调试工具使用new》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、实验3-3GDB/Debugger调试工具使用【实验目的】Ø掌握Bootloader的下载过程.Ø掌握Linux内核的下载过程.【实验步骤】第一步:在GDB工具的使用中,我们将结合一个简单的例子,解释这些常用指令的具体应用。这是一个冒泡排序算法的程序,这个例子的目的仅仅是演示说明,并非实际程序代码的调试。将下面的源程序存为bubble.c文件,并编译好。#include#defineMAX_RECORD_NUMBER10intrecord[MAX_RECORD_NUMBER]={12,76,48,62,94,17
2、,37,52,69,32};voidswap(int*x,int*y){inttemp;temp=*x;*x=*y;*y=temp;}intmain(){inti,j;for(i=0;ii;j--)if(record[j]3、intf("");return1;}第二步:编译源程序,如:gcc-g-obubblebubble.c。你能在当前子目录下得到一个编译好的文件bubble。我们下面将以这个程序为例子向大家演示上面的指令在实际中的应用。第三步:首先启动GDB,可以在启动的同时载入文件bubble。如:gdbbubble。也可以分两步进行,先启动GDB,执行gdb,进入GDB后,再执行filebubble。这时可以用list指令列出源程序,list的使用比较简单(要看完成全部的程序,需要多输入几次list,因为list每次显示的行数是10行),但4、其实在GDB中最不方便的就是看源程序,主要原因是因为GDB仅是一个文本方式的调试器,无法使用鼠标和光标键来翻阅源程序,在这方面ddd等窗口程序有巨大的优势。我们先来查看一下当前源程序的信息,如下:(gdb)infosourceCurrentsourcefileisbubble.cCompilationdirectoryis/root/sampleLocatedin/root/sample/bubble.cContains32lines.Sourcelanguageisc.CompiledwithDWARF2debuggingfor5、mat.Doesnotincludepreprocessormacroinfo. 我们可以知道程序名,目录,文件大小,语言等信息。第一步:设置断点,我们想在函数swap出设置一个断点:(gdb)brswapBreakpoint1at0x80483d6:filebubble.c,line11.br是break的简写。上面的一行是GDB告诉我们这个断点的信息,我们可以知道这个断点的断点号是1,地址是0x80483d6,它在文件bubble.c的11行。第二步:再在一个行号上设一个断点,(gdb)br23Breakpoint2at0x86、04844a:filebubble.c,line23.第三步:我们已经设了两个断点,许多时候你会想查看一下断点的信息和状态,因此你会用到你最常使用的info指令,infobr。(gdb)infobrNumTypeDispEnbAddressWhat1breakpointkeepy0x0804832einswapatbubble.c:112breakpointkeepy0x08048390inmainatbubble.c:23我用这条指令的大多数原因是想查看一下某个断点的断点号,就是第一列的数值。有时也会看一下断点的状态是enabl7、e还是disable。以上的两个断点都是y,也就是都处于enable状态。type列显示breakpoint,是因为infobr指令同时也会显示watch的信息,因此用type来识别是断点breakpoint还是检查点watch。第四步:如果你知道断点号,想删除断点很简单,例如想删除断点2,执行del2就行了。在程序中,断点2本来设在循环中,那样程序会频繁断下,这也许不是我们希望的。也许我们仅想在某个条件下让它断下,如想当j=5时。(gdb)del2(gdb)infobrNumTypeDispEnbAddressWhat1brea8、kpointkeepy0x0804832einswapatbubble.c:11(gdb)br23ifj==5Breakpoint3at0x8048390:filebubble.c,line23.(gdb)infobrNumTypeDispEnbA
3、intf("");return1;}第二步:编译源程序,如:gcc-g-obubblebubble.c。你能在当前子目录下得到一个编译好的文件bubble。我们下面将以这个程序为例子向大家演示上面的指令在实际中的应用。第三步:首先启动GDB,可以在启动的同时载入文件bubble。如:gdbbubble。也可以分两步进行,先启动GDB,执行gdb,进入GDB后,再执行filebubble。这时可以用list指令列出源程序,list的使用比较简单(要看完成全部的程序,需要多输入几次list,因为list每次显示的行数是10行),但
4、其实在GDB中最不方便的就是看源程序,主要原因是因为GDB仅是一个文本方式的调试器,无法使用鼠标和光标键来翻阅源程序,在这方面ddd等窗口程序有巨大的优势。我们先来查看一下当前源程序的信息,如下:(gdb)infosourceCurrentsourcefileisbubble.cCompilationdirectoryis/root/sampleLocatedin/root/sample/bubble.cContains32lines.Sourcelanguageisc.CompiledwithDWARF2debuggingfor
5、mat.Doesnotincludepreprocessormacroinfo. 我们可以知道程序名,目录,文件大小,语言等信息。第一步:设置断点,我们想在函数swap出设置一个断点:(gdb)brswapBreakpoint1at0x80483d6:filebubble.c,line11.br是break的简写。上面的一行是GDB告诉我们这个断点的信息,我们可以知道这个断点的断点号是1,地址是0x80483d6,它在文件bubble.c的11行。第二步:再在一个行号上设一个断点,(gdb)br23Breakpoint2at0x8
6、04844a:filebubble.c,line23.第三步:我们已经设了两个断点,许多时候你会想查看一下断点的信息和状态,因此你会用到你最常使用的info指令,infobr。(gdb)infobrNumTypeDispEnbAddressWhat1breakpointkeepy0x0804832einswapatbubble.c:112breakpointkeepy0x08048390inmainatbubble.c:23我用这条指令的大多数原因是想查看一下某个断点的断点号,就是第一列的数值。有时也会看一下断点的状态是enabl
7、e还是disable。以上的两个断点都是y,也就是都处于enable状态。type列显示breakpoint,是因为infobr指令同时也会显示watch的信息,因此用type来识别是断点breakpoint还是检查点watch。第四步:如果你知道断点号,想删除断点很简单,例如想删除断点2,执行del2就行了。在程序中,断点2本来设在循环中,那样程序会频繁断下,这也许不是我们希望的。也许我们仅想在某个条件下让它断下,如想当j=5时。(gdb)del2(gdb)infobrNumTypeDispEnbAddressWhat1brea
8、kpointkeepy0x0804832einswapatbubble.c:11(gdb)br23ifj==5Breakpoint3at0x8048390:filebubble.c,line23.(gdb)infobrNumTypeDispEnbA
此文档下载收益归作者所有