MIT6.S081-2020-gdb环境

yuanheci 2023年09月07日 165次浏览

====>gdb基础命令


riscv64-unknown-elf-gdbgdb-multiarch 都是用于调试多种架构的 GDB 变体。它们的主要区别在于目标架构和使用方式。

  1. riscv64-unknown-elf-gdb:
    • 这是 RISC-V 架构的特定 GDB 变体。它被用于调试 RISC-V 架构的程序,特别是使用 RISC-V 指令集的嵌入式系统或裸机程序。
    • riscv64-unknown-elf 部分表示目标架构为 RISC-V 64 位,gdb 部分表示它是 GNU Debugger 的一个版本。
  2. gdb-multiarch:
    • 这是一个通用的 GDB 变体,设计用于支持多种架构的调试。它可以用于调试多种不同的架构,而不仅仅是 RISC-V。
    • multiarch 表示它支持多种不同的架构,而不是专门针对某个特定的架构。

现在更为主流的是使用gdb-multiarch


  该xv6版本使用gdb-multiarch会导致无法跟踪ecall进入kernel。因此需要使用riscv64-unknown-elf-gdb,且该gdb在安装riscv64 toolchain时默认没有安装,需要自己下载源码编译安装。

在此记录一下安装时的一些坑:
Linux环境:Ubuntu20.04

# 安装相关依赖
sudo apt-get install libncurses5-dev python2 python2-dev texinfo libreadline-dev
# 从清华大学开源镜像站下载gdb源码(约23MB)
wget https://mirrors.tuna.tsinghua.edu.cn/gnu/gdb/gdb-13.1.tar.xz
# 解压gdb源码压缩包
tar -xvf gdb-13.1.tar.xz
# 进入gdb源码目录
cd gdb-13.1
mkdir build && cd build
# 配置编译选项,这里只编译riscv64-unknown-elf一个目标文件
../configure --prefix=/usr/local --target=riscv64-unknown-elf --enable-tui=yes
# 在上面一行编译配置选项中,很多其他的文章会配置一个python选项
# 但我在尝试中发现配置了python选项后后面的编译过程会报错,不添加python选项则没有问题

# 开始编译,这里编译可能消耗较长时间,具体时长取决于机器性能
make -j$(nproc)
# 编译完成后进行安装
sudo make install

  完成上面的编译安装步骤后,在命令行执行riscv64-unknown-elf-gdb -v检查是否安装完成(若正确输出版本信息则说明已经完成安装)。

出现问题make -j$(nproc)后编译报错:

configure: error: GMP is missing or unusable make[1]: *** [Makefile:11803: configure-gdb] Error 1

解决方法
确保安装了libgmp-dev
执行sudo apt-get install libgmp-dev后成功编译。

最终gdb调试成功跟踪ecall进入kernel
image-1694067371300