【一文秒懂】Linux远程调试工具——gdbserver

【一文秒懂】Linux远程调试工具——gdbserver #

1、介绍 #

对于开发者来说,调试必不可少。

对于开发PC软件,通常系统已经继承了调试工具(比如Linux系统的GDB),或者IDE直接支持对程序的调试。

而对于开发嵌入式软件来说调试的手段比较有限,很多开发者仅有的调试手段依然是最原始的打印(我也是其中之一)。

当然除了打印调试之外还有通过gdb+gdbserver来调试,gdbserver在目标系统中运行,gdb则在宿主机上运行。

简而言之,gdbserver 是一个程序,它允许宿主机可以通过网络,远程调试目标板。

2、如何使用 #

2.1 编译器准备 #

这里就不再详细讲解编译器的安装什么的了,网上一大把!

#直接安装
sudo apt-get install gcc-arm-linux-gnueabihf			

#源码安装
$ tar zxvf gdb-7.12.tar.gz 
$ cd gdb-7.12/
$ ./configure --target=arm-linux --prefix=$PWD/__install
$ make
$ make install

编译完成后,最终会生成gdbserver 的可执行程序,这个就是我们要使用的工具。

2.2 目标机准备 #

  1. 我们将gdb_server可执行程序放置目标板上。
  2. 再将我们要调试的程序放置目标板上,如helloworld
  3. 使用gdb_server进行调试,使用方法如下:

img

gdbserver 192.168.xx.xx:1234 ./helloworld

192.168.xx.xx:IP地址信息

1234:自定义端口号

./helloworld:运行要仿真的程序

此时gdbserver监听端口号1234,并等待客户端连接。

2.3 宿主机准备 #

  1. 在宿主机(Ubuntu)上,使用gdb调试
  2. 远程连接目标机
  3. 运行程序
 $ gdb
 (gdb) target remote 192.168.xx.xx:1234
 Remote debugging using :1234
 c		#运行

target remote:远程连接到指定IP的端口

c:全速运行

3、gdb_server详解 #

gdbserver <comm> <program> [<args> ...]

comm:通信方式选择,可以是USBTCP等多种方式

program:要调试的程序

gdbserver --attach <comm> <pid>

pid:是当前正在运行的进程的进程 ID。

 

4、其他 #

网上较为详细总结:https://blog.csdn.net/m0_43406494/article/details/124815879

宿主机Ubuntu上有时会使用到如下指令

set solib-search-path external-toolchain/arm-linux-gnueabihf/libc/lib/:设置动态库查找路径

generate-core-file:生成core-dump文件

欢迎关注【嵌入式艺术】,董哥原创!
img