使用 QEMU 调试自定义 OS
Debugging a custom OS with QEMU
我正在尝试写一个简单的 OS,我已经写了一个引导加载程序,但现在我想调试它,所以我从使用 VirtualBox 切换到 QEMU,因为我看到它有更好的调试。
问题是,在我将 -s 参数添加到 QEMU 命令并通过 GDB 成功连接后,它说符号 table 未加载,我应该使用 "file" 命令。
我所做的与我在 Internet 上看到的人所做的唯一不同是,他们使用 gdb vmlinux
启动 GDB,但我不能那样做,因为我没有调试 Linux 内核。 . 所以我认为问题是我没有使用 executable 启动 GDB,而是在我的 OS 图像上使用 "file" 命令,以及编译和链接的 .out 文件, 告诉我它是 "DOS/MBR boot sector",所以我无法用它们中的任何一个启动 GDB(无论如何我都尝试这样做,但 GDB 失败了)。
不胜感激。
编辑:另外,我使用 -g 和 --gstabs+ 选项 assemble 引导加载程序。
gdb 想要一个文件,以便它可以为您提供符号调试信息。为此,您需要为其提供一个格式为调试信息的文件,该文件对应于您的 OS 在 RAM 中的最终位置。 "DOS/MBR boot sector" 文件是一个磁盘映像(BIOS 会为您将其中的一部分加载到 RAM 中,然后它可能会自行完成加载代码)。
但 gdb 也将非常乐意让您进行汇编级调试;你可以忽略关于没有符号 table 的警告,并使用单步指令、disassemble-from-pc 和类似的命令:
- "disas $pc,+32"从当前PC反汇编32字节
- 显示命令在执行停止后打印,所以 "disp /3i $pc" 每次 gdb 获得控制权时都会打印接下来的 3 条指令
- "stepi" 和 "nexti" 执行单指令 step/next("step" 和 "next" 是源代码行步进并且需要调试信息)
我正在尝试写一个简单的 OS,我已经写了一个引导加载程序,但现在我想调试它,所以我从使用 VirtualBox 切换到 QEMU,因为我看到它有更好的调试。
问题是,在我将 -s 参数添加到 QEMU 命令并通过 GDB 成功连接后,它说符号 table 未加载,我应该使用 "file" 命令。
我所做的与我在 Internet 上看到的人所做的唯一不同是,他们使用 gdb vmlinux
启动 GDB,但我不能那样做,因为我没有调试 Linux 内核。 . 所以我认为问题是我没有使用 executable 启动 GDB,而是在我的 OS 图像上使用 "file" 命令,以及编译和链接的 .out 文件, 告诉我它是 "DOS/MBR boot sector",所以我无法用它们中的任何一个启动 GDB(无论如何我都尝试这样做,但 GDB 失败了)。
不胜感激。
编辑:另外,我使用 -g 和 --gstabs+ 选项 assemble 引导加载程序。
gdb 想要一个文件,以便它可以为您提供符号调试信息。为此,您需要为其提供一个格式为调试信息的文件,该文件对应于您的 OS 在 RAM 中的最终位置。 "DOS/MBR boot sector" 文件是一个磁盘映像(BIOS 会为您将其中的一部分加载到 RAM 中,然后它可能会自行完成加载代码)。
但 gdb 也将非常乐意让您进行汇编级调试;你可以忽略关于没有符号 table 的警告,并使用单步指令、disassemble-from-pc 和类似的命令:
- "disas $pc,+32"从当前PC反汇编32字节
- 显示命令在执行停止后打印,所以 "disp /3i $pc" 每次 gdb 获得控制权时都会打印接下来的 3 条指令
- "stepi" 和 "nexti" 执行单指令 step/next("step" 和 "next" 是源代码行步进并且需要调试信息)