写点什么

qemu + vscode 图形化调试 linux kernel

作者:无人知晓
  • 2023-12-09
    广东
  • 本文字数:966 字

    阅读完需:约 3 分钟

一、背景

使用命令行连接 gdb 在调试时,虽然可以通过 tui enable 显示源码,但还是存在设置断点麻烦(需要对着源码设置),terminal 显示代码不方便,不利于我们学习;另外在 gdb 下 p 命令显示结构体内容时,看起来也是很别扭,可以利用 vscode+gdb-multiarch 调试 qemu 仿真的 arm64 linux 内核,这样查看源码,设置断点,查看变量信息也很快捷方便

二、依赖环境

vscode extensions 搜索安装 GDB Debug


增加 gdb config


json 文件中增加(主要是设置 elf, 以及 gdb 的路径,远程 gdb 连接的端口号)

{    // Use IntelliSense to learn about possible attributes.    // Hover to view descriptions of existing attributes.    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387    "version": "0.2.0",    "configurations": [        {            "type": "cppdbg",            "request": "launch",            "name": "kernel GDB",            "program": "${workspaceFolder}/vmlinux",            "cwd":"${workspaceFolder}",            "MIMode":"gdb",            "miDebuggerPath":"/usr/bin/gdb-multiarch",            "miDebuggerServerAddress": "localhost:1234",            "stopAtConnect": true,        },    ]}
复制代码

三、在 vscode 中启动调试

如果不知道如何 qemu 调试内核的可以参考我之前的文档

https://xie.infoq.cn/article/3415445f1c8831423a94c4bc2

https://xie.infoq.cn/article/6befd29e6d671f1527b3a03d6

这里有些差异,gdb 加载 vmlinux, remote target 设置的部分需要换成从 vscode 设置

第一步启动 qemu 并等待调试:

qemu-system-aarch64 \    -machine virt,virtualization=true,gic-version=3 \    -nographic \    -m size=1024M \    -cpu cortex-a72 \    -smp 2 \     -kernel Image \    -drive format=raw,file=rootfs.img \    -append "root=/dev/vda rw nokaslr" \    -s \    -S
复制代码

第二步 vscode 启动调试 Run->Start Debugging


第三步启动调试,在 init/main.c 中 start_kernel 设置断点,然后点击调试工具栏的 continue 即可触发到断点,可以开启单步调试了


第四步如果在执行过程中连接,也是点击 pause 按钮,这时内核会停止执行,然后在 vscode 中设置断点,continue 后触发断点 vscode 能正确显示断点位置及代码


发布于: 刚刚阅读数: 3
用户头像

无人知晓

关注

记录我的linux学习和总结 2023-07-31 加入

知乎帐号《无人知晓》同步更新:

评论

发布
暂无评论
qemu + vscode图形化调试linux kernel_Linux Kenel_无人知晓_InfoQ写作社区