bochs gdb 联合调试

来源:互联网 发布:js json null空值处理 编辑:程序博客网 时间:2024/05/16 12:24
系统终于还是出现了我无法短时间直接从代码看出来的错误,早就知道这是不可免去的。

我是ubuntu的系统,bochs必须自己编译方可支持与gdb的联合调试。

1.下载bochs.

         http://bochs.sourceforge.net/  下载最新版本。
2.安装依赖。

   
   1: $apt-get install build-essential           //编译工具链,这是必须的
   2: $apt-get install xorg-dev                  //图形
3.
     
   1: $tar xvf bochs-2.4.2.tar.gz
   2: $cd bochs-2.4.2
   3: $./configure --prefix=/opt/bochs/gdbstub --with-x11 --enable-gdb-stub  --enable-disasm --enable-pci --enable-pcidev --enable-plugins --enable-ne2000 --enable-pnic --disable-docbook        //prefix指定目录,自己随意指定即可,docbook在编译的时候会出错,我们把它去掉就是了
   4:    


4.   $sudo make
5.   $sudo make install


OK,完成了。试试。

   1: //bochsrc
   2:  
   3:   1.megs:32
   4:   2 romimage: file=/opt/bochs/gdbstub/share/bochs/BIOS-bochs-latest
   5:   3 vgaromimage:file=/opt/bochs/gdbstub/share/bochs/VGABIOS-lgpl-latest
   6:   4 floppya:1_44=a.img,status=inserted
   7:   5 ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
   8:   6 ata0-master: type=disk, path="80m.img", mode=flat, cylinders=162, heads=16,     spt=63
   9:   7 boot:a
  10:   8 log:out.txt
  11:   9 mouse:enabled=0
  12: 10 keyboard_mapping:enabled=1,map=/opt/bochs/gdbstub/share/bochs/keymaps/x11-pc-us.map
  13: 11 gdbstub: enabled=1, port=1234, text_base=0, data_base=0, bss_base=0
  14:  


其中11行是打开gdb联合调试。

把bochs做链接到/bin下就可以了
$bochs -q -f bochsrc

打开另一终端运行gdb
   1: >target remote localhost:1234


OK.


在调试内核的时候遇到了一个问题,就是gdb找不到symbol.最后才发现是自己一时疏忽,竟然在ld中用-s选项将symbol给清除了。

当然,在生成可执行内核时这是必须的,要不然内核会大好几倍。所以我的做法是在Makefile中修改,将ld的-s选项去掉,并在

生成内核的时候

   1: cp -fv kernel.bin kernel.bin.tmp           //复制一个带符号的副本
   2: strip kernel.bin.tmp                           //将副本去掉符号
   3: cp -fv kernel.bin.tmp /mnt/floppy/kernel.bin     //将副本当做可执行文件放入盘区
   4: rm -rf kernel.bin.tmp                               //删掉副本,只留下原来带符号的内核,以便gdb时用
原创粉丝点击