Debugging 使用QEMU调试自定义操作系统
我正在尝试编写一个简单的操作系统,我已经编写了一个引导加载程序,但现在我想调试它,所以我从使用VirtualBox切换到QEMU,因为我认为它有更好的调试。 问题是,在我将-s参数添加到QEMU命令并通过GDB成功连接之后,它表示符号表没有加载,应该使用“file”命令。 与我在互联网上看到的人所做的唯一不同之处在于,他们使用Debugging 使用QEMU调试自定义操作系统,debugging,gdb,qemu,libvirt,virsh,Debugging,Gdb,Qemu,Libvirt,Virsh,我正在尝试编写一个简单的操作系统,我已经编写了一个引导加载程序,但现在我想调试它,所以我从使用VirtualBox切换到QEMU,因为我认为它有更好的调试。 问题是,在我将-s参数添加到QEMU命令并通过GDB成功连接之后,它表示符号表没有加载,应该使用“file”命令。 与我在互联网上看到的人所做的唯一不同之处在于,他们使用GDB vmlinux启动GDB,但我不能这样做,因为我没有调试Linux内核。。。所以我认为问题在于我没有用可执行文件启动GDB,而是在我的操作系统映像上使用“file”
GDB vmlinux
启动GDB,但我不能这样做,因为我没有调试Linux内核。。。所以我认为问题在于我没有用可执行文件启动GDB,而是在我的操作系统映像上使用“file”命令,编译并链接的.out文件告诉我这是一个“DOS/MBR引导扇区”,所以我不能用它们中的任何一个启动GDB(我尝试过这样做,但GDB失败了)
我们将不胜感激
编辑:另外,我用-g和--gstabs+选项组装了引导加载程序。gdb需要一个文件,以便它可以为您提供符号调试信息。为此,您需要为它提供一个包含调试信息的文件,该文件的格式与您的操作系统在RAM中的位置相对应。“DOS/MBR引导扇区”文件是一个磁盘映像(BIOS会为您将其中的一部分加载到RAM中,然后它可能会自行完成加载代码) 但gdb也完全乐意让您进行汇编级调试;您可以忽略关于没有符号表的警告,使用单步指令、从pc反汇编和类似命令:
- “disas$pc,+32”从当前pc反汇编32字节
- display命令在执行停止后打印,因此每次gdb获得控制时,“disp/3i$pc”将打印接下来的3条指令
- “stepi”和“nexti”执行单个指令步骤/下一步(“步骤”和“下一步”是源代码行步骤,需要调试信息)