Linux Kernel Debug 配置教程
本文记录了在基于 Qemu 的虚拟机中进行内核代码调试的完整流程。
1 编译安装调试版内核
内核编译的完整流程可参考Linux内核编译。
在开始编译之前,需要对.config
进行简单修改以关闭或打开特定的配置项。推荐使用make menuconfig
命令进行配置。其余的编译流程不变。
1.1 必须打开的配置
1 |
|
1.2 必须关闭的配置
下面的选项会导致打断点失败,一定要关闭。
1 |
|
2 启动内核并调试
2.1 内核启动
为了启动内核以及 GDB Server,需要在 Qemu 虚拟机的启动命令中加入两个新参数-s -S
。
1 |
|
-s
选项是 -gdb 的简写,会在本地的 1234 端口启动一个 GDB 服务。-S
代表暂停虚拟机,等待 GDB 执行 continue 指令。其余参数不变。
2.2 内核调试
2.2.1 VS Code 图形化界面调试
VS Code 调试功能配置可参考VS Code配置教程。
在.vscode/launch.json
文件中,需要将被调试的程序指定为vmlinux
,其他字段无需修改。
1 |
|
- 虚拟机开机阶段不能打断点,需要等内核加载完毕才可设置断点
- 如需调试内核模块代码,简单起见,需要将内核模块编译到内核中(而非单独的模块)
2.2.1 GDB 命令行界面调试
先加载符号表,然后连接到 Qemu 使用的远程调试端口。
1 |
|
Linux Kernel Debug 配置教程
https://zdawng.github.io/posts/c45bcc25/