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)

相关推荐
叠叠乐40 分钟前
redmi k90 pro max 强解BL,刷海外rom, 并刷入sukisu ultra
linux
xiaoye-duck2 小时前
《Linux系统编程》Linux 进程间通信之管道基础解析:从匿名管道原理到基于管道的进程池实现
linux
z200509302 小时前
【Linux学习】Linux中的进程程序替换
linux·服务器·学习
bush42 小时前
嵌入式linux学习记录四
linux·运维·学习
lihao lihao3 小时前
软硬链接
linux·运维·服务器
YY&DS3 小时前
Qt 嵌入 CEF 在 Linux 下必须设置 `QT_XCB_GL_INTEGRATION=xcb_egl才能加载网页
linux·开发语言·qt
辰风沐阳3 小时前
ThinkPHP8.1 + think-swoole 4.1 使用指南(保姆级教程)
linux·后端·swoole
mounter6254 小时前
迈向硬件级无缝热升级:Linux 内核 VFIO 与 IOMMU 持久化技术的演进之路
linux·服务器·内存管理·kernel
晚风吹红霞4 小时前
Linux软件包管理器详解 —— yum与apt的使用及软件生态
linux·运维·服务器