5分钟上手gdb远程调试

说明:
本文第一部分内容说明如何使用gdbserver,第二部分内容说明如何编译gdb和gdbserver。阅读本文前提是会使用gdb的基本命令,知道开发板如何挂载nfs。对嵌入式gdb远程调试感兴趣的可以加入QQ群 ,338400719,一起讨论。文章后面有编译好的海思(hisi)以及安霸(amba)平台的gdb工具提供给大家。
 
相关环境: 
1.主机Ubuntu12.04 32bit  
2. 交叉编译器:arm-hisiv100nptl-linux-
3.gdb版本: gdb-7.5.1
约定:
1.# 开头的代表shell命令
2.(gdb)开头的代表gdb中的命令


利用gdbserver调试开发板

假设目标调试程序名为demo,开发板ip 192.168.1.28 ,主机ip 192.168.1.26


1.利用交叉编译器编译出demo,编译时需要带-g选项加上调试信息。(不能strip,strip会删除程序中的调试信息)


2.将gdb、gdbserver、demo放到主机nfs共享目录,开发板挂载nfs


3.在开发板上运行

#./gdbserver 192.168.1.26:2345 demo

(命令格式 #./gdbserver 主机IP:端口号 程序)

情况正常一般出现下面的提示:

Process borad created; pid = 776

Listening on port 2345

Remote debugging from host 192.168.1.26


4.在主机上运行gdb,注意这个gdb要和gdbserver是同一个gdb版本编译出来的(这里gdb-7.5.1)

#./gdb demo-tui

(这里要指明需要调试的程序demo,否则主机上运行的gdb无法加载调试信息 会出现list等命令不能用等情况,-tui表示图像化界面gdb)

(gdb)target remote 192.168.1.28:2345

(命令格式target remote 开发板IP:端口号  端口号必须和板子上运行gdbserver时端口号一致)


接下来就和gdb本地调试一样。需要注意的是调试开发板上的程序,要让程序在gdb中运行起来必须使用continue或c, 不能用run或r。

注意事项:

1.程序运行如果需要加载动态库,在gdb调试时需要手动加载这些动态库。gbd使用用info share命令查看动态库加载情况

(gdb)info share

手动加载动态库指令:

(gdb) set solib-search-path + 需要加载的动态库路径。

如果每次都要加载相关库可以在~目录下新建一个.gdbinit文件,并将“set solib-search-path + 需要加载的动态库路径”写入其中,gdb每次启动会加载这个配置文件。


=================================================================================
下面介绍如何编译gdb和gdbserver,以海思 arm-hisiv100nptl-linux交叉编译器为例
编译gdb
1.下载gdb源码 编译gdb
下载源码包gdb-7.5.1.tar.bz2,解压到~/gdb/目录下
/usr/local/下创建arm-hisi100nptl目录

#./configure --target=arm-hisiv100nptl-linux --prefix=/usr/local/arm-hisi100nptl

./configure --target=arm-linux-gnueabihf --prefix=/usr/local/arm-linux-gnueabihf

(--target 配置gdb 的目标平台(注意target的arm-hisiv100nptl-linux 没有最后的”-“), --prefix 配置安装路径)

#make

编译成功后得到了gdb。


编译gdbserver

进入解压后的gdb源码包中 

cd ~/gdb/gdb-7.5.1/gdb/gdbserver/

#./configure --target=arm-hisiv100nptl-linux --host=arm-hisiv100nptl-linux
--target=arm-hisiv100nptl-linux 表示目标平台, --host 表示主机端运行的是arm-hisiv100nptl-linux )

#make CC=/opt/hisi-linux-nptl/arm-hisiv100-linux/target/bin/arm-hisiv100nptl-linux-gcc

(这里指定交叉编译器时要用绝对路径)

修改编译出的gdbserver权限 



编译注意事项

1.gdb跑在主机上所以用主机的gcc编译器编译,而gdbserver跑在开发板上所以要用交叉编译器编译


2.不要用strip处理编译得到的gdb和gdbserver

(我遇到的情况是strip处理后的gdbserver运行不了,并提示-sh: ./gdbserver: not found


3.编译gdbserver时出现了linux-x86-low.c error: sys/reg.h: No such file or directory情况,解决方法如下:

a.找到config.h里的HAVE_SYS_REG_H这个宏定义,把它注释掉.

b.把linux-x86-low.c的头文件#include注释掉.

c.交叉编译器要指明具体路径

d.make之前先make clean一下.


参考资料:
gdb+gdbserver 方式进行ARM 板上程序调试
http://blog.csdn.net/hejianhua/article/details/7312979


我们很快将会在github和gitosc上开源一套音视频采集和编解码方案,支持的平台有Linux,Windows,海思(hisi),安霸(Amba)。敬请期待。
关于我们
http://www.graceport.cn/
gitosc:
http://git.oschina.net/GracePort


资源下载:

安霸(amba)
linaro-multilib-2014.06-gcc4.9
http://download.csdn.net/detail/graceporttek/9541868
./arm-linux-gnueabihf-gcc -v
Using built-in specs.
COLLECT_GCC=./arm-linux-gnueabihf-gcc
COLLECT_LTO_WRAPPER=/usr/local/linaro-multilib-2014.06-gcc4.9/bin/../libexec/gcc/arm-linux-gnueabihf/4.9.1/lto-wrapper
Target: arm-linux-gnueabihf
Configured with: /development/crosstools-ng/cortexA9/.build/src/gcc-linaro-4.9-2014.06-1/configure --build=i686-build_pc-linux-gnu --host=i686-build_pc-linux-gnu --target=arm-linux-gnueabihf --prefix=/development/crosstools-ng/cortexA9/linaro-multilib-2014.06-gcc4.9 --with-sysroot=/development/crosstools-ng/cortexA9/linaro-multilib-2014.06-gcc4.9/arm-linux-gnueabihf/libc --enable-languages=c,c++ --with-arch=armv7-a --with-tune=cortex-a9 --with-fpu=vfpv3 --with-float=hard --with-pkgversion='crosstool-NG - Ambarella Linaro Multilib GCC [CortexA9 & ARMv6k] 2014.06' --with-bugurl=https://bugs.launchpad.net/gcc-linaro --enable-__cxa_atexit --enable-libmudflap --enable-libgomp --enable-libssp --disable-libquadmath --disable-libquadmath-support --with-gmp=/development/crosstools-ng/cortexA9/.build/arm-linux-gnueabihf/buildtools --with-mpfr=/development/crosstools-ng/cortexA9/.build/arm-linux-gnueabihf/buildtools --with-mpc=/development/crosstools-ng/cortexA9/.build/arm-linux-gnueabihf/buildtools --with-isl=/development/crosstools-ng/cortexA9/.build/arm-linux-gnueabihf/buildtools --with-cloog=/development/crosstools-ng/cortexA9/.build/arm-linux-gnueabihf/buildtools --with-libelf=/development/crosstools-ng/cortexA9/.build/arm-linux-gnueabihf/buildtools --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++ -lm' --enable-threads=posix --disable-libstdcxx-pch --enable-linker-build-id --enable-gold --enable-multilib --with-local-prefix=/development/crosstools-ng/cortexA9/linaro-multilib-2014.06-gcc4.9/arm-linux-gnueabihf/libc --enable-c99 --enable-long-long --with-mode=thumb
Thread model: posix
gcc version 4.9.1 20140625 (prerelease) (crosstool-NG - Ambarella Linaro Multilib GCC [CortexA9 & ARMv6k] 2014.06)


海思 hisiv100nptl
http://download.csdn.net/detail/graceporttek/9541871
./arm-hisiv100nptl-linux-gcc -v
Using built-in specs.
Target: arm-hisiv100-linux-uclibcgnueabi
Configured with: ../gcc-4.4-2010q1/configure --host=i486-linux-gnu --build=i486-linux-gnu --target=arm-hisiv100-linux-uclibcgnueabi --prefix=/home/sying/uclibc_h3/hisiv100_finalnptl_src/hisiv100_src/install/arm-hisiv100-linux --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --with-arch=armv5te --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --enable-shared --enable-lto --enable-symvers=gnu --enable-__cxa_atexit --disable-nls --enable-extra-hisi-multilibs --with-sysroot=/home/sying/uclibc_h3/hisiv100_finalnptl_src/hisiv100_src/install/arm-hisiv100-linux/target --with-build-sysroot=/home/sying/uclibc_h3/hisiv100_finalnptl_src/hisiv100_src/install/arm-hisiv100-linux/target --with-gmp=/home/sying/uclibc_h3/hisiv100_finalnptl_src/hisiv100_src/install/host_lib --with-mpfr=/home/sying/uclibc_h3/hisiv100_finalnptl_src/hisiv100_src/install/host_lib --with-ppl=/home/sying/uclibc_h3/hisiv100_finalnptl_src/hisiv100_src/install/host_lib --with-cloog=/home/sying/uclibc_h3/hisiv100_finalnptl_src/hisiv100_src/install/host_lib --with-libelf=/home/sying/uclibc_h3/hisiv100_finalnptl_src/hisiv100_src/install/host_lib --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bstatic -lm' --enable-libgomp --enable-poison-system-directories --with-libelf=/home/sying/uclibc_h3/hisiv100_finalnptl_src/hisiv100_src/install/host_lib --with-pkgversion='Hisilicon_v100(gcc4.4-290+uclibc_0.9.32.1+eabi+linuxpthread)' --with-bugurl=http://www.hisilicon.com/cn/service/claim.html
Thread model: posix
gcc version 4.4.1 (Hisilicon_v100(gcc4.4-290+uclibc_0.9.32.1+eabi+linuxpthread)) 


你可能感兴趣的:(嵌入式)