之前用gdb结合QEMU调试XV6,没怎么记录整理,这里总结一下:
///
环境
Win7+VBox+Ubuntu 14.04
source code 可以从下面地址拿到,如何编译上一节深入学习XV6系统(1)有讲到
git clone git://github.com/mit-pdos/xv6-public.git
如何debug xv6?
http://zoo.cs.yale.edu/classes/cs422/2011/lec/l2-hw
我是按照以上Yale的课程的方法: GDB+QEMU, 简单的step就是:
1)cd 到xv6代码目录,这里假定xv6已编译
2)make qemu-gdb
这时候QEMU启动但是XV6还木有跑起来QEMU在等待gdb的指示boot xv6。
注意红框里面的值是26000是TCP端口号
3)再开一个terminal, cd 到xv6代码目录: gdb kernel
4)这里比较关键了,gdb和qemu如何交互的具体原理上面Yale课程里面的链接有介绍, 简单的理解是gdb通过socket同qemu进行通讯。
如何建立socket连接使用gdb的命令
target remote localhost:26000
localhost是主机名, 26000是端口号,这些信息在2)的输出中可以找到
这样就建立了连接
打上断点:b exec,然后一路c(continue)下去, Xv6就跑起来了
一直等到$出现, 就说明xv6 ready了,可以敲命令调试了, 比如b fork, 然后xv6的界面输入ls
注意: yale链接里面的代码有可能编译不过,至少在我这里是,这样比较麻烦,所以用mit的链接的git repo比较安全
以上