欢迎来到天天文库
浏览记录
ID:14849176
大小:57.50 KB
页数:24页
时间:2018-07-30
《gdb+gdbserver arm程序调试》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、GDB+GdbServerARM程序调试内容摘要远程调试环境由宿主机GDB和目标机调试stub共同构成,两者通过串口或TCP连接。使用GDB标准程串行协议协同工作,实现对目标机上的系统内核和上层应用的监控和调试功能。调试stub是嵌入式系统中的一段代码,作为宿主机GDB和目标机调试程序间的一个媒介而存在。就目前而言,嵌入式Linux系统中,主要有三种远程调试方法,分别适用于不同场合的调试工作:用ROMMonitor调试目标机程序、用KGDB调试系统内核和用gdbserver调试用户空间程序。这三种调试方法的
2、区别主要在于,目标机远程调试stub的存在形式的不同,而其设计思路和实现方法则是大致相同的。而我们最常用的是调试应用程序。就是采用gdb+gdbserver的方式进行调试。在很多情况下,用户需要对一个应用程序进行反复调试,特别是复杂的程序。采用GDB方法调试,由于嵌入式系统资源有限性,一般不能直接在目标系统上进行调试,通常采用gdb+gdbserver的方式进行调试。gdb的简单使用和gdb+gdbserver方式进行ARM程序gdb的简单使用GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。
3、或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。一般来说,GDB主要帮忙你完成下面四个方面的功能:1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)3、当程序被停住时,可以检查此时你的程序中所发生的事。4、动态的改变你程序的执行环境。从上面看来,GDB和一般的调
4、试工具没有什么两样,基本上也是完成这些功能,不过在细节上,你会发现GDB这个调试工具的强大,大家可能比较习惯了图形化的调试工具,但有时候,命令行的调试工具却有着图形化工具所不能完成的功能。让我们一一看来。一个调试示例——————源程序:tst.c1#include23intfunc(intn)4{5intsum=0,i;6for(i=0;i5、(i=1;i<=100;i++)19{20result+=i;21}2223printf("result[1-100]=%d",result);24printf("result[1-250]=%d",func(250));25}编译生成执行文件:(Linux下)hchen/test>cc-gtst.c-otst使用GDB调试:hchen/test>gdbtst<----------启动GDBGNUgdb5.1.1Copyright2002FreeSoftwareFoundation,Inc.GD6、Bisfreesoftware,coveredbytheGNUGeneralPublicLicense,andyouarewelcometochangeitand/ordistributecopiesofitundercertainconditions.Type"showcopying"toseetheconditions.ThereisabsolutelynowarrantyforGDB.Type"showwarranty"fordetails.ThisGDBwasconfiguredas"i386-su7、se-linux"...(gdb)l<--------------------l命令相当于list,从第一行开始例出原码。1#include23intfunc(intn)4{5intsum=0,i;6for(i=0;i8、esult+=i;(gdb)break16<--------------------设置断点,在源程序第16行处。Breakpoint1at0x8048496:filetst.c,line16.(gdb)breakfunc<--------------------设置断点,在函数func()入口处。Breakpoint2at0x8048456:filetst.c,line5.(gdb)infobreak<----
5、(i=1;i<=100;i++)19{20result+=i;21}2223printf("result[1-100]=%d",result);24printf("result[1-250]=%d",func(250));25}编译生成执行文件:(Linux下)hchen/test>cc-gtst.c-otst使用GDB调试:hchen/test>gdbtst<----------启动GDBGNUgdb5.1.1Copyright2002FreeSoftwareFoundation,Inc.GD
6、Bisfreesoftware,coveredbytheGNUGeneralPublicLicense,andyouarewelcometochangeitand/ordistributecopiesofitundercertainconditions.Type"showcopying"toseetheconditions.ThereisabsolutelynowarrantyforGDB.Type"showwarranty"fordetails.ThisGDBwasconfiguredas"i386-su
7、se-linux"...(gdb)l<--------------------l命令相当于list,从第一行开始例出原码。1#include23intfunc(intn)4{5intsum=0,i;6for(i=0;i8、esult+=i;(gdb)break16<--------------------设置断点,在源程序第16行处。Breakpoint1at0x8048496:filetst.c,line16.(gdb)breakfunc<--------------------设置断点,在函数func()入口处。Breakpoint2at0x8048456:filetst.c,line5.(gdb)infobreak<----
8、esult+=i;(gdb)break16<--------------------设置断点,在源程序第16行处。Breakpoint1at0x8048496:filetst.c,line16.(gdb)breakfunc<--------------------设置断点,在函数func()入口处。Breakpoint2at0x8048456:filetst.c,line5.(gdb)infobreak<----
此文档下载收益归作者所有