说明

  • gdb是C/C++编程中常用的调试工具,在嵌入式平台也是一样,但是大部分嵌入式设备内存空间都不充裕,运行gdb程序比较吃力,在嵌入式平台常采用GDB + GDB Server的方式。
  • GDB + GDB Server方式是C/S结构,通过网络进行调试,以减少设备端的内存占用。

环境搭建

  • 平台:
SOC: ssc323
交叉编译链:arm-buildroot-linux-uclibcgnueabihf

gdb移植

  1. GDB源码下载
地址:http://www.gnu.org/software/gdb/download/
* 个人测试使用的版本是:gdb-9.1
  1. GDB编译
mkdir gdbBuild
cd gdbBuild
../gdb-9.1/configure --target=arm-buildroot-linux-uclibcgnueabihf --prefix=/home/xxx/ssc323/gdbBuild/install -v
make
make install
  • gdb-9.1不能在gdb源码目录进行编译,会提示错误,需要在源码目录外新建目录作为编译目录。
  1. GDB Server编译
mkdir gdbServerBuild
cd gdbServerBuild
../gdb-9.1/gdb/gdbserver/configure --target=arm-buildroot-linux-uclibcgnueabihf --host=arm-buildroot-linux-uclibcgnueabihf --prefix=/home/xxx/ssc323/gdbBuild/install -v
make
make install
  • 注意:GDB Server和GDB的编译目录不要为同一个,不然编译时会出错。
  1. 目标文件
bin
include
lib
share
* bin目录下主要文件
arm-buildroot-linux-uclibcgnueabihf-gdbserver
arm-buildroot-linux-uclibcgnueabihf-gdb

使用

  1. 测试程序
  • 编译设备程序时候,需要在编译命令中加上-g或-ggdb选项,同时注意不要使用strip命令来strip编译好的设备端程序。
  1. 设备端
  • 可以通过strip减小gdbserver文件的大小,将gdbserver程序和测试程序拷贝至设备内,执行以下命令:
./xxx-gdbserver 192.168.22.100:2345 demo
./xxx-gdbserver *:2345 demo
* 192.168.22.100 是PC端ip地址,可以使用通配符*代替,表示接受所有ip的连接
* 2345 是gdbserver的服务端口
* demo 是测试程序
  1. PC端
  • 确保PC和设备在同一个局域网内,执行以下命令:
./xxx-gdb 
(gdb) target remote 192.168.22.101:2345
(gdb) c
* target remote 192.168.22.101:2345 表示连接远程gdbserver服务器,ip地址为192.168.22.101,端口号为2345
* c 表示运行程序
  • 连上远程gdbserver后即可使用gdb其它调试命令。

注意

  • gdb安装目录有多个文件,如果移动或者只拷贝单个文件xxx-gdb,运行可能会出现异常,例如:
* 每执行一条命令,gdb都会输出
Python Exception <type 'exceptions.NameError'> Installation error: gdb.execute_unwinders function is missing:
  • 解决办法:整体移动或拷贝gdb的安装目录,或者将gdb安装到默认的/usr目录下。
Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐