我使用 Gdb 来跟踪 Qemu 中管理程序操作系统的执行(断点、单步执行等),到目前为止它运行良好。
qemu-system-x86_64 -enable-kvm -display sdl -cpu host -serial my: stdio -m 8192 --bios ../../tool/boot/tianocore.bin -drive format = raw, file = var / run /hypervisor.img -machine q35 -s -S
gdb path/to/hypervisor
target remote: 1234
现在,我需要跟踪管理程序中来宾操作系统的执行情况,所有这些都由 Qemu 运行。它不起作用。但是我添加了与操作系统相关的调试符号文件,并且我还修改了指令的架构。
add-symbol-file ~ / Tinycore / vmlinux 0x100000
add-symbol-file bin / munich 0x18000
set architecture i386: x64_32 // because the guest OS is compiled in 32 bits
但是,当执行通过指令 vmresume、vmlauch 并在来宾操作系统中继续时,Gdb 会感到困惑,单步执行不再起作用并且断点最终位于不确定的地址。
有没有人知道我错过了什么?
还是真的不可能?
有没有另一种方法来实现这一目标?
我正在使用的虚拟机管理程序是Genode,来宾操作系统是 T inycore Linux。
- munich是一个 32 位的引导程序,用于引导 Tinycore Linux。
- hypervisor、vmlinux 和 munich 是用调试符号编译的二进制文件。