linux - 在 qemu 上运行 linux 内核时使用的 gdbserver 是什么?
问题描述
我是使用 gdb 进行内核调试的新手。几天前,我读到我们可以打开 KGDB,它是在内核中运行的 gdb 服务器。我们可以使用用于开发的主机上的 gdb 客户端连接到内核上的这个 gdbserver。
今天我遇到了一个不同的解决方案,我们在 qemu 的虚拟环境中运行内核。在那里我们没有打开 KGDB,我们仍然可以使用 gdb 客户端连接到 qemu。我认为“gdbstub”在这里充当 gdbserver,gdb 客户端连接到 QEMU 而不是内核。我的理解正确吗?这种设置有点类似于使用 JTAG 来控制 cpu 而不是内核。这个对吗?
解决方案
是的,这是正确的。QEMU 包含一个内置的 gdbstub,它允许您将调试器连接到它以进行“系统级”调试,这有点类似于真实硬件上的 JTAG 级调试器。这意味着您不需要客户代码中的任何支持来进行调试,并且您可以调试客户代码被破坏到其内置调试支持可能无法正常工作的情况;当然,它适用于没有自己的低级调试支持的客户操作系统。另一方面,这意味着调试存根不了解来宾操作系统,因此它无法向您提供有关来宾操作系统内部的任何信息,例如进程,并且无法提供诸如“调试此来宾操作系统”之类的操作系统感知调试操作仅限用户空间进程”。
客户 Linux KGDB 支持还是 QEMU 的 gdbstub 对您更有用将取决于您的特定情况和要求。
推荐阅读
- python - 将screencap输出原始解码为jpg
- python - 通过引用另一个数据框(带日期)填充一列
- android - 为什么我只在片段中显示我的用户列表,当我更改片段并返回时,它不会显示用户列表
- java - @NonNull 在使用 @NoArgsConstructor 时会出错吗?
- spring-batch - Spring批处理如何配置Partitioner以及跳过限制和跳过异常
- c# - 转换为通用日期格式
- python - 使用电机驱动程序的 MongoDB 慢查询
- python - 提取名称或将文本拆分为列
- typescript - TypeError:Test_1.Instance 不是构造函数
- python - ROS - 编写一个简单的服务和客户端(Python),将 octomap 保存为 .bt(旋律,ubuntu 18)