使用QEMU调试自定义OS

时间:2018-08-13 09:32:27

标签: debugging gdb qemu libvirt virsh

我试图编写一个简单的OS,我已经编写了一个引导程序,但是现在我想调试它,所以我从使用VirtualBox切换到QEMU,因为我看到它具有更好的调试功能。 问题是,在我将-s参数添加到QEMU命令并通过GDB成功连接后,它说未加载符号表,因此我应该使用“文件”命令。 与我在网上看到的人所做的唯一区别是,他们从gdb vmlinux开始了GDB,但是我不能这样做,因为我没有调试Linux内核...所以我想问题是我没有使用可执行文件启动GDB,而是在操作系统映像上使用“文件”命令以及已编译并链接的.out文件,它告诉我它是“ DOS / MBR引导扇区”,所以我不能用它们中的任何一个启动GDB(我还是尝试这样做,但是GDB失败了。)

我们将不胜感激。

编辑:而且,我确实用-g和--gstabs +选项组装了引导程序。

1 个答案:

答案 0 :(得分:0)

gdb需要一个文件,以便它可以为您提供符号调试信息。为此,您需要给它一个带有调试信息格式的文件,该信息与您的操作系统在RAM中的终止位置相对应。 “ DOS / MBR引导扇区”文件是一个磁盘映像(BIOS将为您将其中的一部分加载到RAM中,然后大概会完成代码本身的加载)。

但是gdb也会使您完全高兴地进行程序集级调试;您可以忽略有关没有符号表的警告,而使用单步指令,disassemble-from-pc和类似命令:

  • “ disas $ pc,+ 32”从当前PC分解32个字节
  • display命令在执行停止后打印,因此,每当gdb获得控制时,“ disp / 3i $ pc”将打印接下来的3条指令
  • “ stepi”和“ nexti”执行单指令step / next(“ step”和“ next”是源代码行的步进,并且需要调试信息)