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)

相关推荐
理智的煎蛋10 小时前
MySQL高可用架构:MHA
linux·数据库·mysql·架构·可用性测试
zz-zjx10 小时前
进程与线程详解, IPC通信与RPC通信对比,Linux前台与后台作业
linux·网络协议·rpc
大筒木老辈子12 小时前
Linux笔记---计算机网络概述
linux·笔记·计算机网络
keep__go13 小时前
postgresql9.2.4 跨版本升级14.6
linux·运维·数据库·postgresql
深思慎考13 小时前
LinuxC++项目开发日志——高并发内存池(1-定长内存池)
linux·c++
川石课堂软件测试14 小时前
Oracle 数据库如何查询列
linux·数据库·sql·功能测试·oracle·grafana·prometheus
蔗理苦14 小时前
2025-09-04 HTML1——环境配置与简介
css·vscode·html
光电的一只菜鸡16 小时前
ubuntu之坑(十九)——VMware虚拟机扩容磁盘
linux·数据库·ubuntu
岚天start16 小时前
网络计算工具ipcalc详解
linux·运维·网络·网关·广播地址·掩码·ipcalc
deeper_wind17 小时前
Jenkins主机中安装ansible部署lnmp论坛(小白的”升级打怪“成长之路)
linux·ansible·jenkins