最近在写一个玩具操作系统,在编写过程中,经常需要进行代码调试。平常我们在Windows或者Linux下编写应用程序时,可以使用像VS,GDB等等这些调试工具进行调试,但是现在要调试的不是应用程序,而是操作系统本身。前文 使用Bochs调试操作系统代码介绍了如何使用Bochs模拟器来调试操作系统代码,本文接着介绍如何使用QEMU+GDB来调试操作系统代码。

使用QEMU+GDB的方式,不用像Bochs那样,需要自己重新编译源码,QEMU本身是带gdb stub的,所以只需要直接连接Qemu的GDB端口即可,相对来说要简单很多。

在笔者的实际开发中,Qemu与Bochs的定位不同,在调试Boot以及Loader这种16位代码时,使用Bochs进行汇编级调试;而一旦进入内核后,就使用Qemu+GDB来调试了,因为Qemu在速度上比Bochs快很多。

下面的命令是使用软盘镜像文件os.img来启动自制的操作系统并启用gdb调试端口1234:

1qemu-system-i386.exe -drive format=raw,index=0,if=floppy,file=os.img -s -S
  • -s相当于是-gdb tcp::1234,即启用GDB调试端口1234
  • -S在启动后中断CPU执行,需要使用c命令继续执行

执行命令后,QEMU会如下图所示暂停执行,等待GDB连接:

本文链接: https://blog.csdn.net/witton/article/details/126414742?spm=1001.2014.3001.5501

我们可以像前文 使用Bochs调试操作系统代码中介绍的一样,在Visual Studio 2022中使用GDB来可视化调试操作系统的内核:

与前文 使用Bochs调试操作系统代码一样,希望此文能帮助到喜欢研究、编写操作系统的读者,更希望有朝一日看到国人能够写出完全自主的操作系统并流行起来!哈哈!