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)

相关推荐
碎梦归途1 小时前
思科网络设备配置命令大全,涵盖从交换机到路由器的核心配置命令
linux·运维·服务器·网络·网络协议·路由器·交换机
小天源2 小时前
nginx在centos7上热升级步骤
linux·服务器·nginx
AZ996ZA2 小时前
自学linux第十八天:【Linux运维实战】系统性能优化与安全加固精要
linux·运维·安全·性能优化
大虾别跑2 小时前
OpenClaw已上线:我的电脑开始自己打工了
linux·ai·openclaw
weixin_437044643 小时前
Netbox批量添加设备——堆叠设备
linux·网络·python
hhy_smile3 小时前
Ubuntu24.04 环境配置自动脚本
linux·ubuntu·自动化·bash
宴之敖者、4 小时前
Linux——\r,\n和缓冲区
linux·运维·服务器
LuDvei4 小时前
LINUX错误提示函数
linux·运维·服务器
未来可期LJ4 小时前
【Linux 系统】进程间的通信方式
linux·服务器
Abona4 小时前
C语言嵌入式全栈Demo
linux·c语言·面试