gdb交叉环境下调试

一、交叉环境gdb介绍

在pc端,用gdb可以很方便的调试程序,如果在板端调试程序该怎么办呢?有两种方法:

  1、下载gdb源码交叉编译,把编译好的可执行程序gdb复制到板端,这样在板端就可以像PC端那样调试程序。

  2、在PC端用厂家提供的arm-pc-gdb,例如海思平台的环境有官方提供的aarch64-himix100-linux-gdb,xilinx平台的环境有aarch64-xilinx-linux-gdb。在板端用gdbserver。

我们通常会使用第二种方法。原因如下:  

  1、通常嵌入式设备是没有源码的,(把源码传输过去?不可取,而且有时候设备是在客户手中),直接使用arm-gdb调试程序时可能只能看到源码文件名和行数,不能直接或不能实时的查看源码,通过arm-gdbserver转发到有源码的的PC端,调试更加方便。

  2、通常嵌入式设备的存储空间都是有限的或需要控制成本尽量减少非必须非用户功能的使用, 所以嵌入式设备不会过多移植相关工具,毕竟嵌入式设备是要满足用户需求,而不是搭建完备的调试环境。arm-gdbserver体积比arm-gdb小的多,且在PC端调试,相关的调试工具更加齐全。

  3、在pc端可以搭配使用IDE进行可视化,使得调试更加直观方便有效。比如在PC端使用gdb+vscode,可以直接在指定源码行下断点,直接调试,可以实时查看当前内存变量、寄存器,堆栈等信息,是arm-gdb无法比拟的。

arm-pc-gdb + gdbserver的调试原理是:

  应用程序交叉编译后再在开发板上运行,然后在PC机上对开发板上得应用程序进行调试,PC机运行arm-pc-gdb ,开发板上运行gdbserver。在应用程序调试的时候,pc机上的gdb向开发板上的gdbserver发出命令,而开发板上的gdbserver就会向应用程序发出信号,使应用程序停下来或者完成其他一些工作。

二、交叉编译gdb(以xilinx zynqmp平台为例)

  1、下载gdb源码,源码版本与aarch64-xilinx-linux-gdb的版本一致,可用aarch64-xilinx-linux-gdb --version 命令查看,我的是8.3.1。源码下载连接是:https://ftp.gnu.org/gnu/gdb/

  2、解压下载的压缩包,进入gdb源码目录,gnu的开源软件编译流程都是 ./configure  make  make install  的流程

  3、配置工程,配置工程前首先要source 一下 petalinux 的环境变量

./configure --host=aarch64-xilinx-linux  --prefix="/home/yyfage/YY/open_source/gdbserver_bulid_xilix-8.3.1"

  --host:指明交叉编译的平台

  --prefix:安装目录,执行后面执行 make install后可执行文件和库文件会安装到这个目录

  更多的编译参数可执行./configure --help

        4、工程配置好后会生成一个Makefile文件,可执行make命令编译工程

  5、执行make install 命令安装,安装完成后会在--prefix目录下生成可执行文件、库文件、头文件等

  6、把--prefix/bin/gdb和--prefix/bin/gdbserver文件拷贝到板端的/user/bin 目录下即可。

  如果不想编译整个gdb,只想要编译gdbserver,可以进入gdb-8.3.1/dgb/gdbserver目录,执行一样配置和编译命令。编译安装完成后,把--prefix/bin/gdbserver 拷贝到板端度/user/bin 目录下

 

三、aarch64-xilinx-linux-gdb + gdbserver调试 

  1、交叉编译程序,aarch64-xilinx-linux-gcc main.c -o main (要加--sysroot参数)

  2、将编译好的程序main 拷贝到板端

  3、在板端运行 gdbserver 192.168.2.35:223344 ./main    //192.168.2.35是板端ip,223344是指定的端口,可任意填

    

 

  4、在pc端运行 aarch64-xilinx-linux-gdb ./main 进入gdb

  

  5、在pc输入 target remote 192.168.2.35:223344 连接到板端的gdbserver  //192.168.2.35为板端ip,223344端口号与板端gdbserver设置的端口号一致

  6、在pc端的gdb运行调试命令调试程序,注意交叉环境下的调试命令没有run 只有continue。程序的执行结果会在板端打印出来

  

  

  

 

posted @ 2023-03-24 22:52  YYFaGe  阅读(292)  评论(0编辑  收藏  举报