VSCode gdb 调试 qemu u-boot 的方法

这篇具有很好参考价值的文章主要介绍了VSCode gdb 调试 qemu u-boot 的方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

  • 最近使用 VS Code GDB 调试 qemu,有了一点收获,u-boot 编译后生成了一个 elf 文件:u-boot,是否也可以调试一下?

  • 为何需要 VS Code GDB 调试,直接 gdb 调试不就可以了吗?答案就是:VS Code 可以界面调试,命令行调试会枯燥很多

环境

  • 使用 qemu,就是不需要板子

  • win10 64位 VMware Workstation Pro 16

  • ubuntu 20.04

  • qemu (虚拟ARM开发板),qemu arm64 平台

  • u-boot : u-boot-2023.04

  • gcc 交叉编译工具链:gcc version 12.2.1 20230401

目标

  • 基于 qemu,VS Code GDB,界面调试 u-boot,了解 u-boot 的启动流程

  • qemu:不需要硬件电路板支持,当前一些启动初始化流程可能与实际电路板存在差异,所以目标就是摸清楚 u-boot 的启动流程,重在搞清楚 u-boot 启动与初始化流程。

  • VS Code,这里重在界面调试,类似于 eclipse 那样的,可以源码调试

  • GDB:是一个强大的调试工具

编译 u-boot

  • 配置文件:configs/qemu_arm64_defconfig

  • 生成配置:make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- qemu_arm64_defconfig

  • 【备注】:当前 u-boot-2023.04 ARM 与 ARM64 没有分开,所以 ARCH=arm,而不是 ARCH=arm64

  • 开始编译: make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu-

  • 生成的产物: u-boot.bin:二进制文件, u-boot: elf 可执行文件,默认包含 debug 信息

配置 VS Code gdb

  • 当前 是 Win10 下 VS Code 通过 SSH 连接 VM虚拟机中的 ubuntu,如果本地是 ubuntu 系统,应该就不需要 SSH 远程连接

  • VS Code 安装 gdb 调试插件

VSCode gdb 调试 qemu u-boot 的方法

  • 【备注】gdb 这个插件,好像不需要,确认下左边栏 是否有个 DEBUG 调试按钮吧,好像是 VS Code 自带的。

  • 配置 VS Code 调试:点击 【设置】的按钮,会提示选择某个调试器,这里随便选择一个,然后就会出现一个 .vscode/launch.json 文件

  • 修改 launch.json 文件内容如下

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "uboot-debug",
            "type": "cppdbg",
            "request": "launch",
            "miDebuggerServerAddress": "127.0.0.1:1234",
            "miDebuggerPath": "/home/zhangsz/linux/tools/gcc-linaro-12.2.1-2023.04-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gdb",
            "program": "${workspaceFolder}/u-boot",
            "args": [],
            "stopAtEntry": true,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "logging": {
                "engineLogging": false
            },
            "MIMode": "gdb",
        }
    ]
}
  • 注意点一:"miDebuggerPath": "/home/zhangsz/linux/tools/gcc-linaro-12.2.1-2023.04-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gdb",,这里设置 gcc gdb 的执行路径,全路径即可,这里的 gdb,来自 gcc version 12.2.1 20230401 交叉编译工具链

  • 注意点二:"program": "${workspaceFolder}/u-boot",,这里选择 u-boot,也就是 ELF 文件,而不是 u-boot.bin 二进制文件

  • 注意点三:"stopAtEntry": true,,这里选择 所有 的 执行 入口函数,都有断点停下来,否则可能 u-boot 无法调试

qemu 启动与调试脚本

  • qemu 启动脚本:qemu.sh,可以确认 u-boot 是否可以正常启动
#!/bin/bash
qemu-system-aarch64 -machine virt \
        -nographic \
        -m 512M \
        -cpu cortex-a57 \
        -kernel u-boot \
  • qemu 调试调试脚本,qemu-debug.sh,执行此脚本,可以进入 qemu 调试
#!/bin/bash
qemu-system-aarch64 -machine virt \
        -nographic \
        -m 512M \
        -cpu cortex-a57 \
        -kernel u-boot \
        -s -S

调试方法

  • 执行 qemu-debug.sh,此时会卡住,也就是 qemu 处于【冻结】状态

  • 点击 调试图标的 【运行】按钮:

VSCode gdb 调试 qemu u-boot 的方法

  • 进入调试界面:

VSCode gdb 调试 qemu u-boot 的方法

  • 此时可以加断点进行调试,可以单步【F11】或者 【F10】进行调试

VSCode gdb 调试 qemu u-boot 的方法

  • 如此, VS Code gdb 源码调试 u-boot 的环境搭建成功了

备注

  • 好像 u-boot 有一段 重定位的操作,经过重定位后, VS Code gdb 就无法正常加人断点了,也就是没有了调试符号与信息,这部分后续再梳理一下。

  • 当前的 VS Code gdb 界面源码调试 u-boot,可以从 reset 开始,单步【F11】配合【F10】与 手动断点,了解 u-boot 的第一阶段的启动流程,感觉对熟悉 u-boot 启动流程 还是有点用处。

小结

  • VS Code GDB 调试功能,感觉有点像专业的 Visual Studio 的感觉了,嵌入式软件可以调试,这本身就是一件好事,利于熟悉代码执行流程、问题定位等。

  • 调试过程中,有寄存器、局部变量、断点、【监视】watch 等窗口,可以观察程序执行的当前状态,很有用,至少比 gdb【命令行】调试起来舒服与高效文章来源地址https://www.toymoban.com/news/detail-512171.html

到了这里,关于VSCode gdb 调试 qemu u-boot 的方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 终端/Vscode + GDB调试C++程序

    CMakeLists中需要设置编译类型为Debug 下载gdb调试器 在终端使用gdb调试程序 然后进入(gdb)命令行 (gdb) set args … : 设置程序运行输入的参数 (gdb) break file_path:row_number : 设置断点位置 (gdb) run : 启动调试 (gdb) next : 下一步(不进入函数) (gdb) step : 下一步(进入函数) (gdb) continue : 继

    2024年02月04日
    浏览(18)
  • VSCode +gdb+gdbserver远程调试arm开发板

    VSCode +gdb+gdbserver远程调试arm开发板

    从ARM官网下载gcc-arm编译器, 编译器中自带gdb和gdbserver,可以省去自己编译 。 注:gdb是电脑端程序,gdbserver是arm开发板程序 arm官网链接:Arm GNU Toolchain Downloads – Arm Developer 下载arm-gcc版本10.3在开发板上运行提示lib版本错误,所以下载了版本10.2 也可以直接把编译器文件夹下的

    2024年02月07日
    浏览(14)
  • 详细讲解移植u-boot.2022.10版本移植到开发板基本方法

    详细讲解移植u-boot.2022.10版本移植到开发板基本方法

     大家好,我是ST​。​ 今天给大家讲一讲如何将u-boot.2022.10版本移植到imx6ull开发板上。 环境 选项 内容 编译主机 UbuntuLTS 18.04 目标板 ATK I.MX6ULL(512MB DDR3 + 8GB EMMC) u-boot版本 2022.10 交叉编译工具链 gcc-linaro-7.5.0-2019.12-i686_arm-linux-gnueabihf 一、u-boot编译环境准备 1.u-boot源码包下载

    2024年02月11日
    浏览(11)
  • F1C200S/F1C100S修改U-BOOT调试串口为UART1(PD3,PD4)

    F1C200S/F1C100S修改U-BOOT调试串口为UART1(PD3,PD4)

    此处用的uboot是荔枝派nano的 可以从荔枝派的仓库拉取 修改好的在这 查看串口挂载总线 查看数据手册 根据总线图可以看出串口是挂载在APB总线上面的 找到总线时钟设置部分 使能UART1控制器时钟 原本以为要改这,但是后来发现不需要修改。。。 设置GPIO引脚复用功能 直接pd

    2024年02月14日
    浏览(7)
  • VSCode 默认在DEBUG CONSOLE调试无法输入输出 gdb调试 解决方案 及Windows上C/C++环境配置

    VSCode 默认在DEBUG CONSOLE调试无法输入输出 gdb调试 解决方案 及Windows上C/C++环境配置

            从零重新安装的VSCode,无设置和其他插件,Win10系统,MinGW g++及gdb在环境变量中,发现VSCode调试C/C++程序时永远启用DEBUG CONSOLE而不是集成终端TERMINAL:         TERMINAL中只有launch.json中提供的参数启动debug的只读内容,无法进行输入输出,而cout输出的内容在DEBU

    2024年03月20日
    浏览(9)
  • 【linux】“gdb“调试方法与技巧

    【linux】“gdb“调试方法与技巧

    🎉博客主页:小智_x0___0x_ 🎉欢迎关注:👍点赞🙌收藏✍️留言 🎉系列专栏:Linux入门到精通 🎉代码仓库:小智的代码仓库 gdb是一款开源的、功能强大的调试器,它可以用于调试多种编程语言,如C、C++、汇编语言等。gdb可以帮助开发者在程序运行时进行调试,并找到程序

    2024年02月16日
    浏览(15)
  • arm开发板 GDB远程调试方法

    1.在linux下开发,免不了使用gdb调试,但是linux下开发嵌入式,都是跑在ARM板子上的,网上有很多GDB的基础教程,但是能在ARM开发板用的时候,会有各种问题。 比如:*.cpp: No such file or directory.这是因为用gcc编译的时候,代码还是在本地,并没有在arm平台上来。 所以说还是有必

    2024年02月12日
    浏览(9)
  • Linux环境下gdb调试方法与演示

    Linux环境下gdb调试方法与演示

    个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【Linux专栏】🎈 本专栏旨在分享学习Linux的一点学习心得,欢迎大家在评论区讨论💌 演示环境: centos7 如果还未安装gdb的话,输入下面命令进行安装即可: 首先,gd

    2024年02月07日
    浏览(11)
  • arm环境使用GDB调试

    arm环境使用GDB调试

            调试设备代码的时候,经常碰到程序异常或者功能对不上,以前这种时候就是加打印消息,然后重新编译把程序放进去跑,通过打印消息来判断代码出问题的点在哪里,但是有的时候可能需要反复加多次才能定位到问题点,而使用gdb调试就可以很快找到问题,非常

    2024年01月25日
    浏览(9)
  • 使用gdb调试Python进程

    有时我们会想调试一个正在运行的Python进程,或者一个Python进程的coredump。例如现在遇到一个mod_wsgi的进程僵死了,不接受请求,想看看究竟是运行到哪行Python代码呢?这时就需要祭出gdb了。 主要是三步: 1)确保你的gdb版本=7 2)安装python-debuginfo包(如:python-debuginfo-2.6.6-2

    2024年02月12日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包