注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

创思通信官网:www.csgsm.com

创思通信-引领物联网新时代 520ic.taobao.com

 
 
 

日志

 
 
 
 

嵌入式的 gdb 远程调试  

2010-09-22 21:23:42|  分类: 调试 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
1.下载gdb-6.6.tar.gz
ftp://sourceware.org/p /gdb/old-releases/
    
2. 解压到/opt目录下
#cd /opt
#tar xzvf /tmp/gdb-6.6.tar.gz

3. 建立配置文件、编译
gdb允许把编译配置和编译结果放到任意的目录,因此可以在gdb目录之外建立一个专门存放编译结果的目录。
#cd /opt
#mkdir -p arm-gdb/build
#cd arm-gdb/build
#/opt/gdb-6.6/configure --target=arm-linux-gn?i --prefix=/opt/arm-gdb
#make
#make install


编译完后可以在/opt/arm-gdb/bin目录下找到可执行的arm-linux-gn?i-gdb, arm-linux-gn?i-gdbtui, arm-linux--gn?i-run。
拷贝arm-linux--gn?i-gdb 到/usr/bin目录
#cd /opt/arm-gdb/bin/
#cp arm-linux-gdb-gn?i /usr/bin/


4. gdbserver的移植
gdbserver要用到gdb源码目录下的一些头文件,因此无法在gdb源码目录之外编译文件。
#cd /opt/gdb-6.6/gdb/gdbserver
#./configure --host=arm-linux-gn?i --target=arm-linux-gn?i --prefix=/opt/arm-gdb/gdbserver
#make
#make install

注意:此处target参数和host参数都要设置为arm-linux-gn?i,因为gdbserver是放在目标板上运行的。
编译后,可以在/opt/arm-gdb/gdbserver/bin目录下找到arm-linux-gn?i-gdbserver,下载该文件到目标板的/usr/bin目录并重命名为gdbserver。
同时要下载gdbserver需要的库文件libthread_db-x.x.so(在交叉编译器的安装目录的lib子目录下可以找到)到目录板的/usr/lib目录,
再建立两个符号链接libthread_db.so和libthread_db.so.1。
在目标板上执行
#cd \usr\lib
#ln –s libthread_db-x.x.so libthread_db.so
#ln –s libthread_db-x.x.so libthread_db.so.1

5. 使用gdbserver
在目标板上运行gdbserver
在目标板上执行
#./gdbserver 192.168.0.2:2345 hello
其中192.168.0.2为目标板的IP。2345为gdbserver打开的端口,可以自己设置。


# gdbserver 192.168.1.112:222 hello
Process hello created; pid = 708
Listening on port 222


6. 运行gdb客户端
root@jesse-desktop:~/test# arm-linux-gn?i-gdb hello
GNU gdb 6.6
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General P lic License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "--host=i686-pc-linux-gnu --target=arm-linux-gn?i"...
(gdb) target remote 192.168.1.112:222
Remote debugging using 192.168.1.112:222
warning: Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initializers
and track explicitly loaded dynamic code.
0x400007b0 in ?? ()
(gdb) b hello.c:6
Breakpoint 1 at 0x849c: file hello.c, line 6.
(gdb) c
Continuing.
warning: .dynamic section for "/lib/libc.so.6" is not at the expected address (wrong library or version mismatch?)
Error while mapping shared library sections:
/lib/ld-linux.so.3: No s h file or directory.

Breakpoint 1, main () at hello.c:6
6        printf("hello world for gdbserver test  \n");
(gdb) la



7. GDB的基本指令:
load:装入一个程序
symbol-file:装入符号库文件,可以是用-g参数编译的可执行文件。
f(ile):指定一个可执行文件进行调试,gdb将读取些文件的调试讯息,如f a.exe
l(ist):列程序出源文件
r(un) :装载完要调试的可执行文件后,可以用run命令运行可执行文件
b(reak):设置断点(break point),如b 25,则在源程序的第25行设置一个断点,当程序执行到第25行时,就会产生中断;也可以使用b funcname,funcname为函数的名称,
当程序调用些函数时,则产生中断
c(ontin):c命令可以另中断的程序继续执行,直到下一个中断点或程序结束
p(rint):输入某个变量的值,如程序定义了一个int aa的就是,p aa就会输出aa的当前值
n(ext):程序执行到断点时中断执行,可以用n指令进行单步执行
s(tep):程序执行到断点时中断执行,可以用s指令进行单步执行进某一函数
q(uit):退出GDB


编译可能出现的问题
1.
c1: warnings being treated as errors
/root/tools/gdb-6.6/bfd/elf32-arm.c: In function 'find_thumb_gl':
/root/tools/gdb-6.6/bfd/elf32-arm.c:2452: error: ignoring return val of 'asprintf', declared with attribute warn_unused_result
/root/tools/gdb-6.6/bfd/elf32-arm.c: In function 'find_arm_gl':
/root/tools/gdb-6.6/bfd/elf32-arm.c:2485: error: ignoring return val of 'asprintf', declared with attribute warn_unused_result


这个由于返回值没有别接收 导致编译中断 太严了 呵呵

It's a good practice to make "-Werror" a default option of your program.

"-Werror" will make all warnings into errors. That means you cannot get you program compiled with even warnings.



bfd/Makefile:185:WARN_CFLAGS = -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Werror
opcodes/Makefile:175:WARN_CFLAGS = -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Werror


2.

untu - configure error: No curses/termcap library found

his causes the termcap files to be installed under $HOME/install.  The
easiest way to make use of these for building gdb is to man lly copy
incl?/termcap.h to your toolchain incl? directory, and
lib/libtermcap.a to your toolchain lib directory.

or


s o apt-get install libncurses5-dev
  评论这张
 
阅读(3097)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018