如何使用QEMUn和GDB调试内核

问题描述:

我想知道如何使用QEMU和gdb调试Linux内核。我在我的虚拟机中编译了新的内核linux-3.18.6。我的VM环境是centos,内核版本是3.10.0-327.el7.x86_64。我使用命令“qemu-system-x86_64 -kernel /usr/src/linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S”来运行新的内核。然后,我使用另一个shell窗口运行“gdb ./vmlinux”,一切都很好,直到现在。但是,当我继续输入“目标远程本地主机:1234”。它打印一些奇怪的消息。像这样如何使用QEMUn和GDB调试内核

(gdb) target remote localhost:1234 

Remote debugging using localhost:1234 

Remote 'g' packet reply is too long: 

00000000000000000000000000000000000000000000000063060000000000000000000000000000 
00000000000000000000000000000000000000000000000000000000000000000000000000000000 
00000000000000000000000000000000000000000000000000000000000000000000000000000000 
0000000000000000f0ff0000000000000200000000f0000000000000000000000000000000000000 
00000000000000000000000000000000000000000000000000000000000000000000000000000000 
00000000000000000000000000000000000000000000000000000000000000000000000000000000 
000000007f0300000000000000000000000000000000000000000000000000000000000000000000 
00000000000000000000000000000000000000000000000000000000000000000000000000000000 
00000000000000000000000000000000000000000000000000000000000000000000000000000000 
00000000000000000000000000000000000000000000000000000000000000000000000000000000 
00000000000000000000000000000000000000000000000000000000000000000000000000000000 
00000000000000000000000000000000000000000000000000000000000000000000000000000000 
00000000000000000000000000000000000000000000000000000000000000000000000000000000 
000000000000000000000000801f0000 

(gdb) c 

The program is not being run. 

然后,当我键入'c'。它会显示“程序没有运行”。我好几天一直困惑于这个问题。任何人都可以帮助我解决它并让程序运行。非常感谢。

+0

这个问题有类似的错误报告:https://sourceware.org/bugzilla/show_bug.cgi?id = 13984。您可以尝试应用附加到错误报告的修补程序并重新构建gdb。 – ks1322

+0

非常感谢。这个对我有用 ! – Jerry

这是gdb bug 13984。有一个patch附加到它可以解决这个错误。