ubuntu下aarch64-linux-gnu(交叉编译) gdb/gdbserver(一)

ubuntu下aarch64-linux-gnu(交叉编译) gdb/gdbserver

gdb是一款开源的、强大的、跨平台的程序调试工具。主要用于在程序运行时对程序进行控制和检查,如设置断点、单步执行、查看变量值、修改内存数据等,从而帮助开发者定位和修复代码中的错误。

gdbserver则是GDB的一个辅助工具,主要用于调试嵌入式系统或者没有图形界面的目标系统上的程序。GDBServer在目标设备上运行,将目标程序的状态信息通过网络发送给宿主机上的GDB,使GDB能够像调试本地程序一样调试远程的目标程序。这样,开发人员就可以在宿主机上使用GDB的各种功能,而不需要在目标设备上安装和运行复杂的调试环境。

说明:本教程适用于ubuntu环境下交叉编译gdbserver,目标架构为aarch64小端。

一、准备阶段

根据需求,准备gdb源代码和aarch64-linux-gnu交叉编译工具链。

博主选择的gdb源代码以及aarch64-linux-gnu交叉编译工具链分别是,gdb8.3gcc-arm-8.3-2019.02-x86_64-aarch64-linux-gnu.tar.xz(aarch64小端)

gdb源代码地址: gdb源代码下载地址

在这里插入图片描述

gnu交叉编译工具链地址:交叉编译工具链下载地址

在这里插入图片描述

注意:在选择交叉编译工具链时,一定要明确目标架构大小端。

二、编译安装gdb
首先通过configure配置gdb编译选项,再进行编译和安装。

(一)、配置gdb编译选项

cd gdb8.3
./configure --target=aarch64-linux-gnu --prefix=/home/hhl/gdbserver
参数说明:
	--target 目标架构
	--prefix 自定义gdb编译安装路径

在这里插入图片描述

(二)、编译gdb

cd gdb8.3
make -j8
参数说明:
	--j8 并行编译(8

在这里插入图片描述

(三)、安装gdb

cd gdb8.3
make install

在这里插入图片描述
在这里插入图片描述

三、交叉编译gdbserver
(一)、配置gdbserver编译选项

由于gdbserver需要移植到目标环境中运行,为了避免环境的影响,因此采取静态编译的方式。

cd gdb8.3/gdb/gdbserver
LDFLAGS="-static" ./configure --target=aarch64-linux-gnu --host=aarch64-linux-gnu  --disable-shared --enable-static 
参数说明:
	LDFLAGS="-static"  静态编译
	--target 目标架构
	--prefix 自定义gdb编译安装路径
	--disable-shared --enable-static 可选参数,静态编译。

(二)、交叉编译gdbserver

使用绝对路径正确配置gcc和g++的路径。

make CC=/home/hhl/gcc-arm-8.3-2019.02-x86_64-aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc CXX=/home/hhl/gcc-arm-8.3-2019.02-x86_64-aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ -j8
参数说明:
	CC gcc路径
	cXX g++路径

在这里插入图片描述

交叉编译成功后,gdbservergdb8.3/gdb/gdbserver路径下

关于gdb远程调试,请参考博文二

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 13:28:02       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 13:28:02       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 13:28:02       57 阅读
  4. Python语言-面向对象

    2024-07-13 13:28:02       68 阅读

热门阅读

  1. 【Android】在渲染生效前提前测量View大小

    2024-07-13 13:28:02       21 阅读
  2. 基于节点嵌入的链接预测(暂时这样吧)

    2024-07-13 13:28:02       19 阅读
  3. C#中where的约束

    2024-07-13 13:28:02       21 阅读
  4. ABP框架中的ISoftDelete与软删除

    2024-07-13 13:28:02       24 阅读
  5. 三级_网络技术_13_局域网技术基础及应用

    2024-07-13 13:28:02       22 阅读
  6. 服务器数据出现丢失该怎样恢复?

    2024-07-13 13:28:02       16 阅读
  7. React中使用usePrevious的意义是什么,为啥要用它

    2024-07-13 13:28:02       18 阅读
  8. Spring:SpringBoot为什么可以使用Jar包启动

    2024-07-13 13:28:02       18 阅读
  9. ubuntu安装k8s+docker运行英伟达gpu cuda

    2024-07-13 13:28:02       22 阅读
  10. 使用Python绘制百分比堆积柱形图

    2024-07-13 13:28:02       21 阅读
  11. Memcached负载均衡:揭秘高效缓存分发策略

    2024-07-13 13:28:02       20 阅读
  12. Mybatis-SQL注入讲解及#预处理与$的区别

    2024-07-13 13:28:02       19 阅读