debugging - 基于 qemu 的低级调试

标签 debugging embedded gdb arm qemu

我必须在 ARM 架构上测试一些低级代码。通常,在真实的板上进行实验是相当复杂的,所以我正在考虑 QEMU。

我想要得到的是某种调试信息,例如 printfs 或 gdb。我知道这对于 Linux 来说很简单,因为它实现了 QEMU Integrator 的设备驱动程序和 gdb 功能,但我不使用 Linux。我还怀疑从 Linux 内核源代码中提取这种功能会很复杂。

我正在从一些已经实现其中一项功能的简单操作系统中进行搜索。你有什么建议吗?

最佳答案

您不需要目标操作系统来调试 QEMU 内运行的代码——QEMU 已经为您做到了这一点。

具体来说,QEMU 支持从 GDB 进行远程调试——您可以使用适当的命令行选项运行 QEMU,它将导出一个 GDB 副本(在主机上运行)可以连接的接口(interface)。此时,您可以在 GDB 中调试该程序,就像在主机上运行它一样。

http://wiki.osdev.org/GDB似乎有更多的基本信息;可能不足以让您完全入门,但至少为您提供了基本概念以及一些在 QEMU 和 GDB 文档中查找的术语。跳过有关“实现 GDB stub ”的部分(该内容不适用于此处,因为 QEMU 已经有一个),并从“使用仿真器 stub ”部分开始。简而言之,您使用 -s 选项(在 localhost:1234 上导出 GDB 连接)和 -S 选项(等待 GDB“继续开始执行之前的命令),然后在主机上的 GDB 中输入 target remote :1234 而不是 run。当然,您还需要使用 ARM 版本的 GDB,而不是 native x86 版本。

(此外,如果您愿意付费购买商业解决方案,CodeSourcery 的 ARM 工具链具有 IDE 集成,可以自动设置所有这些,包括支持“printf”打印到调试器控制台。这适用于如果您有硬件调试器,也可以使用物理板。关于我作为 CodeSourcery 员工的常见免责声明适用 - 但我确实发现它非常易于使用。)

2012 年更新:CodeSourcery 的工具链现在称为 Mentor Graphics Sourcery CodeBench,但上述所有内容仍然适用。

关于debugging - 基于 qemu 的低级调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2611624/

相关文章:

javascript - 这是 chrome 中关于图像加载的错误吗?

java - Eclipse 热代码替换不起作用

c - #include 在嵌入的头文件中

c++ - 我如何找出 gdb 停止的原因

GDB:以编程方式删除观察点

java - JavaFX WebView 中的 Html/Javascript 调试

java - 实时监控Java进程内存

c - 使用8051 MCU在LCD上显示十六进制值

linux - ARM 交叉编译器找不到包含的标准库

python - 如何在 virtualenv 中调试 pyside 段错误?