QEMU/使用 QEMU 调试
外观
< QEMU
QEMU 提供了一种舒适的方式进行系统范围的调试;此环境特别适合于调试操作系统内核和固件。
实际上,您可以连接任何支持 GDB 远程协议的调试器。但是,在以下示例中,我们将使用 GNU 调试器。
使用 -S
命令行开关启动 QEMU 可以阻止 CPU 启动。这为调试器连接提供了时间,并允许从一开始就进行调试,甚至包括早期的平台固件。
要开始执行,您必须通过调试器或监视器控制台向 QEMU 发送“continue”命令。
-gdb {device}
命令行开关允许您指定 QEMU 在指定设备中等待连接。
它可以接受 serial, socket, udp, tcp, stdio
等。例如,-gdb tcp::9000
用于监听端口 9000,然后您可以在 GDB 中使用 target remote localhost:9000
连接到它。
-s
开关是 -gdb tcp::1234
的简写。
可以从 GDB 内部启动 QEMU;您可以方便地将所需命令保存到一个文件,并让 GDB 加载该脚本。
例如,假设您有一个非常简单的自定义 MBR,它在 0x7E00 处的保护模式下加载内核,您可以使用类似以下内容调试两者
add-symbol-file stage0.elf 0x7c00
add-symbol-file stage1.elf 0x7e00
target remote | qemu -S -gdb stdio -m 16 -boot c -hda drive0.img
然后,您可以像这样启动它:gdb -x script.gdb
通过脚本编写和设置断点,可以实现更复杂的设置,同时考虑到运行时重新定位。这在调试引导代码时很常见,引导代码在加载下一阶段之前会重新定位自身(例如,标准 MBR)。