首页 > 解决方案 > 在 qemu 上运行 linux 内核时使用的 gdbserver 是什么?

问题描述

我是使用 gdb 进行内核调试的新手。几天前,我读到我们可以打开 KGDB,它是在内核中运行的 gdb 服务器。我们可以使用用于开发的主机上的 gdb 客户端连接到内核上的这个 gdbserver。

今天我遇到了一个不同的解决方案,我们在 qemu 的虚拟环境中运行内核。在那里我们没有打开 KGDB,我们仍然可以使用 gdb 客户端连接到 qemu。我认为“gdbstub”在这里充当 gdbserver,gdb 客户端连接到 QEMU 而不是内核。我的理解正确吗?这种设置有点类似于使用 JTAG 来控制 cpu 而不是内核。这个对吗?

标签: linuxgdbkernelqemugdbserver

解决方案


是的,这是正确的。QEMU 包含一个内置的 gdbstub,它允许您将调试器连接到它以进行“系统级”调试,这有点类似于真实硬件上的 JTAG 级调试器。这意味着您不需要客户代码中的任何支持来进行调试,并且您可以调试客户代码被破坏到其内置调试支持可能无法正常工作的情况;当然,它适用于没有自己的低级调试支持的客户操作系统。另一方面,这意味着调试存根不了解来宾操作系统,因此它无法向您提供有关来宾操作系统内部的任何信息,例如进程,并且无法提供诸如“调试此来宾操作系统”之类的操作系统感知调试操作仅限用户空间进程”。

客户 Linux KGDB 支持还是 QEMU 的 gdbstub 对您更有用将取决于您的特定情况和要求。


推荐阅读