0

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

帮助将不胜感激。

编辑:另外,我确实使用 -g 和 --gstabs+ 选项组装了引导加载程序。

4

1 回答 1

0

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

但是 gdb 也将完全愉快地让您进行汇编级调试;您可以忽略关于没有符号表的警告,并使用单步指令、disassemble-from-pc 和类似命令:

  • "disas $pc,+32" 从当前 PC 反汇编 32 个字节
  • 执行停止后显示命令打印,因此每次 gdb 获得控制时“disp /3i $pc”将打印接下来的 3 条指令
  • "stepi" 和 "nexti" 执行单指令 step/next("step" 和 "next" 是源代码单步,需要调试信息)
于 2018-08-13T11:17:51.497 回答