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)

相关推荐
bosins9 小时前
WSL 迁移指南:如何将 Linux 环境完整复制到另一台电脑
linux·运维·服务器
企鹅的蚂蚁10 小时前
LubanCat RK3588 实时 Linux 开发(六):启用 gs_usb 驱动并完成 USB-CAN 收发
linux·rk3588·linux驱动·socketcan·gs_usb·usb-can
2601_9622998811 小时前
Linux执行Python脚本方法
linux·python·脚本·解释器·shebang
snow@li11 小时前
服务器运维:Linux命令速查手册(全景梳理)
linux·服务器·网络
handler0111 小时前
【Linux】线程与虚拟内存的底层世界
linux·运维·服务器·c++·线程·虚拟地址空间·共享内存
郝学胜-神的一滴11 小时前
C++11 工程级应用 09:告别无谓拷贝,解锁高性能移动语义
开发语言·数据结构·c++·vscode·软件工程·visual studio
新时代牛马11 小时前
实时 Linux:PREEMPT_RT、延迟来源与观测
linux·运维·服务器
微露清风12 小时前
# Linux 进程全景:从 PCB 到 O(1) 调度队列
linux·服务器
H_oRIZoN_12 小时前
Linux入门DAY38(手写 HTTP 客户端抓取天气 + 简易 HTTP 服务器实现元器件 Web 系统)
linux·linux应用编程
fangjianj12 小时前
windows环境反弹shell
linux·windows·web安全