VSCODE+GDB+QEMU调试内核
学习参考源地址:
https://www.bilibili.com/video/BV1Gd4y1C73i?vd_source=
ce21ea0b84392cbb9b276b62b29a6e17
一、前置条件
1、vscode可以ssh远程连接ubuntu,ubuntu上安装好qemu、kernle、initramfs等编译环境2
2、下载的kernel可以完成编译,生成vmlinux等文件
3、制作好initramfs或者rootfs
4、qemu可以正常加载编译好的kernek和initramfs(或initramfs)
二、配置VSCODE
执行下面命令,,生成compile_commands.json文件
root@zh-vm:/home/WorkSpace/linux-5.14/scripts/clang-tools# pwd
/home/WorkSpace/linux-5.14/scripts/clang-tools
root@zh-vm:/home/WorkSpace/linux-5.14/scripts/clang-tools# ls
gen_compile_commands.py run-clang-tools.py
root@zh-vm:/home/WorkSpace/linux-5.14/scripts/clang-tools# ./gen_compile_commands.py -d ../../
生成的文件如下:
配置launch.json
编辑:
{"version": "0.2.0","configurations": [{"name": "qemu-kernel-gdb","type": "cppdbg","request": "launch","miDebuggerServerAddress": "127.0.0.1:1234","program": "${workspaceFolder}/vmlinux","args": [],"stopAtEntry": false,"cwd": "${workspaceFolder}","environment": [],"externalConsole": false,"logging": {"engineLogging": false},"MIMode": "gdb"}]
}
添加如上命令后,左侧生成调试窗口:
三、添加断点尝试
分别在kernel_init、acpi_init、pbus_size_mem处添加断点:
添加后会在这里显示:
打qemu打开x86_64的kernel:
参考《Busybox编译、制作initramfs,并在QEMU中运行》帖子
执行vscode debug:
发现qemu中的kernel停在了acpi_init,同时可以看到执行堆栈
此时我们可以添加观察点,观察某些变量或者地址的值:
上面的几个调试按钮,分别含义是:
continue:跳转到下一个设置的断点
step over:继续向下执行,碰到函数不进入
step into:向下执行,碰到函数进入
step out:跳出这个函数
对应GDB的:c(continue)、n(next)、s(step)