gdb+qemu联合调试linux-4.15

说明

以前使用过eclipse调试过内核,最近又想用gdb调试内核,还是比较习惯使用命令操作,但是在搭建调试内核的gdbqemu过程中,遇到一个问题,想了很多办法,最后直接感觉到官方下载最新的gdbqemu源码安装,以为调试内核设置断点不成功是因为使用apt安装的gdb和qemu比较旧,安装新的gdb和qemu后,还是断点没起作用,折腾了还几天,终于找到原因了。下面是作者的环境:

  • ubuntu16.04
  • GNU gdb (GDB) 8.1.50.20180125-git
  • QEMU emulator version 2.11.0
  • linux-4.15

但是根据最后的原因,调试最新的内核可以使用apt安装的gdb和qemu

内核配置

  • 配置调试信息
    与其他相关配置内核环境的教程一样,需要配置调试信息到vmlinux:
    gdb+qemu联合调试linux-4.15
    [*] Compile the kernel with debug info(选中这个)
  • 取消KASLR
    如下截图所示:
    gdb+qemu联合调试linux-4.15
    取消选项:
    [ ] Randomize the address of the kernel image (KASLR)
  • 说明
    为什么取消这个KASLR,不了解其他人在使用gdb+qemu调试最新的内核时,是否遇到在设置的断点处,在qemu运行的系统不会暂停,直接运行到挂接文件系统,测试了很多办法,最后在
    https://unix.stackexchange.com/questions/396013/hardware-breakpoint-in-gdb-qemu-missing-start-kernel
    给了我提示,然后取消这个选项后,果然设置断点成功。
  • 主要问题
    在gdb里边设置断点后,断点不起作用,qemu里运行的系统没有在相应的断点处stop,直接运行到挂接文件系统。