文章目录
1.背景介绍
GDB 全称“GNU symbolic debugger”,诞生于 GNU 计划(同时诞生的还有 GCC、Emacs 等),是 Linux 下常用的程序调试器。发展至今,GDB 已经迭代了诸多个版本,当下的 GDB 支持调试多种编程语言编写的程序,包括 C、C++、Go、Objective-C、OpenCL、Ada 等。实际场景中,GDB 更常用来调试 C 和 C++ 程序。
在嵌入式的调试中,避免不了使用gdb进行调试,但是往往目标平台不是x86的,多为arm平台,因此我们需要自己来交叉编译gdb的源码。
环境配置:
实体机:win7
虚拟机:Linux ubuntu 4.15.0-142-generic
使用gdb源码:gdb-8.2.tar.gz
下载地址为:https://ftp.gnu.org/gnu/gdb/
arm的交叉编译链为:arm-gnu-toolchain-11.3.rel1-x86_64-aarch64-none-linux-gnu
下载地址为:https://developer.arm.com/downloads/-/gnu-rm
2.安装ARM64交叉编译链
2.1 下载交叉编译链
从arm官网下载对应的arm的交叉编译链,arm-gnu-toolchain-11.3.rel1-x86_64-aarch64-none-linux-gnu.tar.xz
解压压缩文件xz -dk arm-gnu-toolchain-11.3.rel1-x86_64-aarch64-none-linux-gnu.tar.xz
2.2 增加环境变量
vim /etc/environment
在PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:"中加入“/linuxshare/arm-gnu-toolchain-11.3.rel1-x86_64-aarch64-none-linux-gnu/bin:”
后面这个是自己环境的交叉编译链的路径;然后reboot即可
2.3 验证arm编译链
此时的arm编译链就可以在任何路径使用了。任意路径输入aarch64然后使用Tab补齐即可出现如下的选择,则说明交叉编译链安装完成。
3.编译gdb源码
3.1 下载gdb源码
gdb的下载比较简单,在对应的官网就可以下载到,https://ftp.gnu.org/gnu/gdb/
在此我们选择gdb-8.2.tar.gz
3.2 源码解压
解压压缩文件 tar -zxvf gdb-8.2.tar.gz
1.修改gdb/Makefile.in 里面的-static增加静态编译选项
2.新建build目录,进入build目录
…/configure --prefix=$PWD --host=aarch64-none-linux-gnu LD=aarch64-none-linux-gnu-ld CC=aarch64-none-linux-gnu-gcc CXX=aarch64-none-linux-gnu-g++
然后会生成对应的Makefile文件
make编译或者 make -j4多线程编译,这里我选择的-j4多线程编译,这个依据环境的核选择。然后会在build生成gdb目录,这个里面会生成gdb的ELF可执行文件,这一步编译的过程比较慢,耐心等待即可。
3.3 生成gdb的可执行文件
root@ubuntu:/#file gdb
gdb: ELF 64-bit LSB executable, ARM aarch64, version 1 (GNU/Linux), statically linked, for GNU/Linux 3.7.0, not stripped
可以看见生成的gdb是ARM64平台的,且为静态编译。此时便可以在对应的平台进行调试代码了。
原始生成的可以通过strip去掉调试信息,可以减少文件的大小:
aarch64-none-linux-gnu-strip -g gdb