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)

相关推荐
wdfk_prog9 小时前
[Linux]学习笔记系列 -- [drivers][input]input
linux·笔记·学习
盟接之桥9 小时前
盟接之桥说制造:引流品 × 利润品,全球电商平台高效产品组合策略(供讨论)
大数据·linux·服务器·网络·人工智能·制造
忆~遂愿10 小时前
ops-cv 算子库深度解析:面向视觉任务的硬件优化与数据布局(NCHW/NHWC)策略
java·大数据·linux·人工智能
湘-枫叶情缘10 小时前
1990:种下那棵不落叶的树-第6集 圆明园的对话
linux·系统架构
Fcy64811 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满11 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠11 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
Gary Studio11 小时前
rk芯片驱动编写
linux·学习
mango_mangojuice11 小时前
Linux学习笔记(make/Makefile)1.23
java·linux·前端·笔记·学习
Harvey90311 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s