使用GDB和VSCode调试内核

使用GDB和VSCode调试内核 | DD'Notes使用GDB和VSCode调试内核背景上一篇,已经搭建好QEMU的内核调试环境:https://notes.z-dd.online/2024/03/06/%E5%9F%BA%E4%BA%8EQEMU%E7%9A%84%E5%86%85%E6%A0%B8%E8%B0%83%E8%AF%95%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/ 这篇主要在前面的基础上尝试用gdb来调icon-default.png?t=N7T8https://notes.z-dd.online/2024/03/07/%E4%BD%BF%E7%94%A8GDB%E5%92%8CVSCode%E8%B0%83%E8%AF%95%E5%86%85%E6%A0%B8/

使用GDB和VSCode调试内核

背景

上一篇,已经搭建好QEMU的内核调试环境:基于QEMU的内核调试环境搭建 | DD'Notes

这篇主要在前面的基础上尝试用gdb来调试内核,躺了不少坑。

安装GDB

这里安装支持多种硬件体系架构的GDB版本,也可直接使用系统自带的默认gdb。如架构不同,需使用交叉编译工具链中的gdb,后面有时间会更新不同架构下的调试。

sudo apt-get install -y gdb-multiarch	# 支持多种硬件体系架构的GDB版本

准备调试内核

在以前的基础上需修改一些内核配置才能调试:

  • 打开CONFIG_GDB_SCRIPTS:在内核主目录下生成gdb脚本文件vmlinux-gdb.py,该脚本实现了一些便于内核调试的命令,它们都以lx-开头,这个暂时先没用,后面再研究看看
  • 打开CONFIG_DEBUG_INFO:该选项用于在内核编译时开启-g标志,保证编译的内核带有调试信息,这个很重要!
  • 关闭CONFIG_DEBUG_INFO_REDUCED
  • 关闭CONFIG_RANDOMIZE_BASE:该选项用于关闭 KASLR,或者可以在内核启动参数中添加nokaslr,这个会导致地址随机化,从而无法调试,这个很重要!

运行qemu

这里只调试内核,就没有带根文件系统,也可以带上,这个看自己。

$ qemu-system-x86_64 -s -S  \
	-kernel ./bzImage \
    -hda /dev/zero \
	-append "root=/dev/zero console=ttyS0" \
	-nographic

说明:

  • -s 选项是 -gdb 的简写,会在本地的1234端口启动一个 GDB 服务
  • -S 代表暂停虚拟机,等待 GDB 执行 continue 指令

GDB命令行调试测试

。。。。。。

  • 14
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值