- 学习路线
- RT-Thread 简介
- RT-Thread Nano
- RT-Thread Smart
- RT-Thread Studio
- 快速上手
- 内核
- Env 工具
- 设备和驱动
- 组件
- 软件包
- 物联网
- 工具
- MicroPython用户手册
- 应用开发
- RT-Thread 版本选择
- 开发环境搭建
- 固件尺寸优化
- 在RT-Thread潘多拉开发板上实现电源管理
- 网络协议栈驱动移植
- 在STM32F429上应用网络功能
- 在STM32F429上应用文件系统
- 在潘多拉上使用 SFUD 操作 Flash
- FreeModbus 应用笔记
- 应用AT组件连接ESP8266模块
- 多线程非阻塞网络编程
- 使用QEMU运行动态模块组件
- CmBacktrace应用
- 在 STM32L4 上应用 littlefs 文件系统
- STM32通用Bootloader
- wireshark抓取tls数据包
- 在 STM32 上应用 C++
- STM32 上使用 PWM
- STM32 上使用 USB Host 读写 U 盘
- QEMU 网络视频教程
- Demo 示例
- 其他
- 传感器驱动开发指南
- 软件包开发
- 向RT-Thread贡献代码
- 内核视频教程
- Env 视频教程
- rw007 SPI WiFi 模块使用
- wireshark抓取tls数据包
- Keil MDK 安装
- Rtthread dir
- 支持的传感器列表
- 支持的 Touch 列表
- Builtin functions and exceptions
- Cmath
- Gc
- Math
- Sys
- Uarray
- Ubinascii
- Ucollections
- Uerrno
- Uhashlib
- Uheapq
- Uio
- Ujson
- Uos
- Ure
- Uselect
- Usocket
- ussl – SSL/TLS 模块
- Ustruct
- Utime
- Uzlib
- thread
- micropython – 内部功能访问与控制模块
- Rtthread
- Machine
- Pin
- I2C
- SPI
- UART
- LCD
- RTC
- PWM
- ADC
- WDT
- Timer
- Network
- Wlan
- 传感器驱动框架介绍
- Preparations
2.QEMU调试
提示
本文的目的和背景
VS Code(全称 Visual Studio Code)是一个轻量且强大的代码编辑器,支持 Windows,OS X 和 Linux。内置 JavaScript、TypeScript 和 Node.js 支持,而且拥有丰富的插件生态系统,可通过安装插件来支持 C++、C#、Python、PHP 等其他语言。
本文主要介绍在 Windows 平台使用 VS Code 调试 qemu-vexpress-a9 BSP 工程。
准备工作
- 下载、安装 VS Code:官网下载
运行和调试 RT-Thread
步骤一 打开 VS Code 项目工程
在 Env 控制台进入 qemu-vexpress-a9 BSP 根目录,然后输入命令 code .
(注意:code 后面有一个点)打开 VS Code,表示使用 VS Code 打开当前目录。
注意事项
code 是命令,点 '.' 是参数表示当前目录,中间由空格隔开
VS Code 打开后会自动打开 qemu-vexpress-a9 BSP 文件夹,如下图所示。
步骤二 安装调试插件
在 VS Code Extensions 里下载并安装支持 C/C++ 的调试插件:
安装好后确认插件为以下状态,如果不是则点击重新加载:
步骤三 编译 RT-Thread
点击 VS Code “查看 -> 终端” 打开 VS Code 内部终端,在终端里输入命令 scons
即可编译工程,终端会打印出编译信息。
编译完成后输入 .\qemu.bat
命令就可以运行工程。终端会输出 RT-Thread 启动 logo 信息,QEMU 也运行了起来。
注意事项
- 调试 BSP 工程前需要先编译工程生成 rtthread.elf 文件。
- 可以使用
scons --target=vsc -s
命令更新 VS Code 需要用到的 C/C++ 头文件搜索路径信息。不是每次都需要更新,只有在使用了 menuconfig 重新配置了 RT-Thread 或更改了 rtconfig.h 头文件时才需要。
步骤四 修改 qemu-dbg.bat 文件
开始调试前需要编辑 qemu-vexpress-a9
目录下的 qemu-dbg.bat
文件,在 qemu-system-arm 前加入 start :
@echo off
if exist sd.bin goto run
qemu-img create -f raw sd.bin 64M
:run
start qemu-system-arm -M vexpress-a9 -kernel rtthread.elf -serial stdio -sd sd.bin -S -s
步骤五 调试工程
如下图所示,在 VS Code 里点击调试菜单(小虫子图标),调试平台选择 Windows,然后按 F5 就可以开启 QEMU 调试模式,断点停留在 main 函数。VS Code 调试选项如下图所示:
QEMU 也运行了起来,如下图所示。
在 VS Code 里可以使用 GDB 命令,需要在最前面加上 -exec
。 例如 -exec info registers
命令可以查看寄存器的内容:
其他一些主要命令介绍如下所示:
查看内存地址内容:x/<n/f/u> <addr>
,各个参数说明如下所示:
- n 是一个正整数,表示需要显示的内存单元的个数,也就是说从当前地址向后显示几个内存单元的内容,一个内存单元的大小由后面的 u 定义
- f 表示显示的格式,参见下面。如果地址所指的是字符串,那么格式可以是 s。其他格式如下表所示:
参数 | 描述 |
---|---|
x | 按十六进制格式显示变量 |
d | 按十进制格式显示变量 |
u | 按十六进制格式显示无符号整型 |
o | 按八进制格式显示变量 |
t | 按二进制格式显示变量 |
a | 按十六进制格式显示变量 |
c | 按字符格式显示变量 |
f | 按浮点数格式显示变量 |
- u 表示从当前地址往后请求的字节数,如果不指定的话,GDB 默认是 4 个 bytes。u 参数可以用下面的字符来代替,b 表示单字节,h 表示双字节,w 表示四字 节,g 表示八字节。当我们指定了字节长度后,GDB 会从指内存定的内存地址开始,读写指定字节,并把其当作一个值取出来。
- addr 表示一个内存地址。
注意事项
严格区分 n 和 u 的关系,n 表示单元个数,u 表示每个单元的大小。
示例: x/3uh 0x54320
表示从内存地址 0x54320 读取内容,h 表示以双字节为一个单位,3 表示输出三个单位,u 表示按十六进制显示。
查看当前程序栈的内容: x/10x $sp--> 打印 stack 的前 10 个元素 查看当前程序栈的信息: info frame----list general info about the frame 查看当前程序栈的参数: info args---lists arguments to the function 查看当前程序栈的局部变量: info locals---list variables stored in the frame 查看当前寄存器的值:info registers(不包括浮点寄存器) info all-registers(包括浮点寄存器) 查看当前栈帧中的异常处理器:info catch(exception handlers)
提示
输入命令时可以只输入每个命令的第一个字母。例如:info registers
可以只输入 i r
。
注意事项
- 如果在 VS Code 目录中额外添加了文件夹,会导致调试不能够启动。
- 每次开始调试都需要使用 Env 工具在 BSP 根目录使用
code .
命令打开 VS Code 才能正常调试工程。
参考资料
常见问题
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论