当前位置: 首页 > news >正文

qemu + vscode图形化调试linux kernel

一、背景

使用命令行连接gdb 在调试时,虽然可以通过tui enable 显示源码,但还是存在设置断点麻烦(需要对着源码设置),terminal显示代码不方便,不利于我们学习;另外在gdb 下p命令显示结构体内容时,看起来也是很别扭,可以利用vscode+gdb-multiarch 调试qemu 仿真的arm64 linux 内核,这样查看源码,设置断点,查看变量信息也很快捷方便

二、依赖环境

vscode extensions 搜索安装GDB Debug

增加gdb config

json 文件中增加(主要是设置 elf, 以及gdb 的路径,远程gdb连接的端口号)

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "type": "cppdbg",
            "request": "launch",
            "name": "kernel GDB",
            "program": "${workspaceFolder}/vmlinux",
            "cwd":"${workspaceFolder}",
            "MIMode":"gdb",
            "miDebuggerPath":"/usr/bin/gdb-multiarch",
            "miDebuggerServerAddress": "localhost:1234",
            "stopAtConnect": true,
        },
    ]
}

三、在vscode中启动调试

如果不知道如何qemu 调试内核的可以参考我之前的文档

无人知晓:qemu搭建arm64 linux kernel调试环境

无人知晓:qemu单步调试arm64 linux kernel

这里有些差异,gdb 加载vmlinux, remote target设置的部分需要换成从vscode设置

第一步启动qemu并等待调试:

qemu-system-aarch64 \
    -machine virt,virtualization=true,gic-version=3 \
    -nographic \
    -m size=1024M \
    -cpu cortex-a72 \
    -smp 2 \ 
    -kernel Image \
    -drive format=raw,file=rootfs.img \
    -append "root=/dev/vda rw nokaslr" \
    -s \
    -S

第二步vscode启动调试 Run->Start Debugging

第三步启动调试,在init/main.c中start_kernel设置断点,然后点击调试工具栏的continue即可触发到断点,可以开启单步调试了

第四步如果在执行过程中连接,也是点击pause按钮,这时内核会停止执行,然后在vscode中设置断点,continue后触发断点vscode能正确显示断点位置及代码

相关文章:

  • openssl3.2/test/certs - 056 - all DNS-like CNs allowed by CA1, no SANs
  • 项目解决方案:市小区高清视频监控平台联网整合设计方案(上)
  • python flask request教程
  • JS-Window常见对象
  • 精要图示:园区金融数字化服务蓝图,以园区为支点推动信贷业务增长
  • Linux:简单聊聊线程调度
  • 百度搜索智能精选是什么东西、怎么加入?
  • Linux实验记录:使用RAID(独立冗余磁盘阵列)
  • PyInstaller 将 Python 程序生成可直接运行的程序
  • Emergent Abilities of Large Language Models 机翻mark
  • IDEA 构建开发环境
  • 《微信小程序开发从入门到实战》学习九十六
  • Vulnhub靶场DC-3
  • 深入了解Redis:选择适用于你的场景的持久化方案
  • Idea编写mapper.xml文件提示表名和字段
  • 微信小程序 图片自适应高度 宽度 完美适配原生或者uniapp
  • 《HelloGitHub》第 94 期
  • Chiplet,汽车“芯”风向
  • 一键拥有你的GPT4
  • openssl3.2 - 测试程序的学习 - test\aesgcmtest.c
  • 印称一名高级官员在巴基斯坦发动的袭击中死亡
  • 墨西哥宣布就“墨西哥湾”更名一事起诉谷歌
  • 中日有关部门就日本水产品输华问题进行第三次谈判,外交部回应
  • 洲际酒店:今年第一季度全球酒店平均客房收入同比增长3.3%
  • 无人机穿越大理千年古塔落券洞内,涉事“飞手”被行拘10日
  • 中消协点名新能源汽车行业:定金退款争议频发