vscode qemu riscv gdb
时间: 2025-02-18 19:18:41 浏览: 72
### 配置 VSCode 使用 QEMU 和 GDB 调试 RISC-V 程序
#### 安装必要的工具链和软件包
为了能够在 Visual Studio Code (VSCode) 中调试 RISC-V 程序,需要先安装一些基础组件。这包括但不限于 RISC-V 工具链、QEMU 模拟器以及 GDB 调试器。
确保已正确安装 `riscv64-unknown-elf-gcc` 编译器套件用于编译目标程序,并且也已经安装了支持 RISC-V 架构的版本的 QEMU[^1]。
#### 设置 VSCode 开发环境
在 VSCode 中进行有效的 C/C++ 项目开发及调试前,需完成如下几项工作:
##### 插件安装
通过扩展市场下载并安装由 Microsoft 提供的官方 **C/C++** 扩展插件,该插件提供了 IntelliSense 功能以及其他有助于编写高质量代码的功能特性[^4]。
##### 创建 launch.json 文件
创建 `.vscode/launch.json` 文件来定义启动配置文件,以便能够顺利连接到远程调试会话。下面是一个适用于 RISC-V 的基本模板:
```json
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/my_program.x", // 替换成实际路径
"miDebuggerPath": "/path/to/riscv64-unknown-elf-gdb", // 替换为真实的GDB路径
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing"
}
],
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"preLaunchTask": "Build Program",
"targetArchitecture": "riscv64",
"serverLaunchTimeout": 30000, // 增加超时时间以适应较慢网络条件下的仿真加载过程
"pipeTransport": {
"pipeProgram": "qemu-system-riscv64",
"pipeArgs": ["-nographic", "-machine", "virt", "-bios", "", "-device", "loader,file=${workspaceFolder}/build/my_program.bin"],
"debuggerPath": "/usr/bin/gdb-multiarch" // 如果使用的是多架构版GDB则指定此参数;否则忽略它
},
"logging": {"trace":true,"traceResponse":true}
}
]
}
```
请注意调整上述 JSON 片段中的具体字段值以匹配个人项目的实际情况,特别是 `program`, `miDebuggerPath` 及其他涉及本地文件系统的部分。
#### 运行与调试
当一切准备就绪之后,在终端窗口执行命令启动 QEMU 并监听特定端口等待来自 GDB 的连接请求:
```bash
qemu-system-riscv64 -nographic -machine virt \
-bios /path/to/opensbi/firmware/fw_payload.bin \
-device loader,file=/path/to/kernel Image,-t=kernel8.img \
-append 'rootwait console=ttyS0 rw' \
-netdev user,id=mynet0 -device virtio-net-device,netdev=mynet0 \
-drive file=rootfs.ext4,if=none,format=raw,id=mydrive \
-device virtio-blk-device,drive=mydrive,bus=virtio-s` 参数指示开启 GDB stub,默认情况下会在 TCP 端口 1234 上提供服务;而 `-S` 则会让虚拟机暂停直到收到继续指令为止。接着回到 VSCode 内部按下 F5 或者点击绿色播放按钮触发断点命中从而进入交互式的调试模式[^3]。
阅读全文
相关推荐


















