Linux中国论坛's Archiver

lydr 发表于 2007-4-24 21:47

VMWare Workstation 6.0调试Linux Kernel,竟如此方便

刚刚在LKML上看到的。可以做到C源代码级别的内核单步调试,真是简单的无以复加了。  如果不存在LICENSE方面的考虑, 我觉得UML(User Mode Linux)已经可以抛弃了。


一、环境:

    1, 一台Linux机器, 用于运行gdb和VMWare Workstation 6.0, 我们称之为HOST机器。
    2, VMWare6.0中安装一个Linux系统, 我们称这个Linux系统为GUEST机器, 它运行被调试的内核。


二、设置:

    很简单,在你的HOST Linux中,往GUEST Linux的vmware配置文件(即后缀名为.vmx的文件)追加一个字符串。 在我的机器上是这样的:

    # echo "debugStub.listen.guest32=1" >> /root/vmware/FC4\ Linux/FC4\ Linux.vmx

注译, 如果你是的GUEST是在x86-64上运行的, 那么把上面这行的就是debugStub.listen.guest64=1



补充:vmware ws 6.0尚未正式发布, 请到这里下载:
[url=http://www.vmware.cn/Soft/793.html][color=#0000ff]http://www.vmware.cn/Soft/793.html[/color][/url]

lydr 发表于 2007-4-24 21:47

三、调试:
   




1, 把GUEST Linux上的内核映像文件(vmlinux)和内核源代码拷贝到HOST机器上。
  
    为了能够用gdb的list命令显示源代码, 看看GUEST机器上的/lib/modules/<kernel version>/source (以下简称source) 和/lib/modules/<kernel version>/build (以下简称build)这两个符号链接各自指向哪里(注:如果编译内核时没有用O=<your path>选项指定输出的路径,那么这两个符号链接就指向同一个路径,通常是/usr/src/linux-2.x.xx)。拷贝到HOST机器上相应的路径上。
    提醒: 编译内核之后build目录下会有很多临时文件, 有上G之大, 可以先把build目录下的vmlinux拷贝到HOST机器上, 然后进入source目录, 运行:
    make O=/lib/module/<kernel version>/build clean
    然后再把build和source拷贝到HOST机器上。



2, 启动安装在VMWare中的GUEST Linux。
   

3, 在HOST机器上运行gdb, 进行调试:

[url=http://linux.chinaunix.net/bbs/viewthread.php?tid=896214###][Copy to clipboard][/url]
CODE:
[font=Fixdays](gdb) file vmlinux   //vmlinux就是从GUEST拷贝过来的内核映像文件
Reading symbols from /root/vmlinux...done.
Using host libthread_db library "/lib/libthread_db.so.1".
(gdb) target remote localhost:8832  //注意,如果你的GUEST Linux是64位的,这里的localhost:8832就改成localhost:8864
Remote debugging using localhost:8832
[New thread 1]
0x000f4299 in ?? ()
warning: shared library handler failed to enable breakpoint[/font]

lydr 发表于 2007-4-24 21:48

[size=13px]作为例子,下面是几个调试动作:

3.1 设置断点:

(gdb) b do_IRQ

[[i] 本帖最后由 albcamus 于 2007-4-20 16:17 编辑 [/i]][/size]


[img]http://linux.chinaunix.net/bbs/images/attachicons/image.gif[/img][url=http://linux.chinaunix.net/bbs/member.php?action=credits&view=getattach]图片附件[/url]: [url=http://linux.chinaunix.net/bbs/attachment.php?aid=177332]ws6_kernel-1-breakpoint.jpg[/url] (2007-4-20 16:17, 135.99 K)

[img]http://linux.chinaunix.net/bbs/attachments/month_0704/20070420_c1ffa416691fc7c45d50CVF7lxR2lDU5.jpg[/img]

lydr 发表于 2007-4-24 21:48

[size=13px]3.2 Continue和Step单步调试:

可以看出, gdb运行一下step命令, GUEST Linux就往下执行一句;否则就停着

[[i] 本帖最后由 albcamus 于 2007-4-20 16:18 编辑 [/i]][/size]


[img]http://linux.chinaunix.net/bbs/images/attachicons/image.gif[/img][url=http://linux.chinaunix.net/bbs/member.php?action=credits&view=getattach]图片附件[/url]: [url=http://linux.chinaunix.net/bbs/attachment.php?aid=177333]ws6_kernel-2-continue-and-step.jpg[/url] (2007-4-20 16:18, 146.41 K)

[img]http://linux.chinaunix.net/bbs/attachments/month_0704/20070420_4b2877e76d3a346c05e02gVc1rEz5vSt.jpg[/img]

lydr 发表于 2007-4-24 21:48

[size=13px]3.3 清除断点,Continue

没有断点了, continue命令之后GUEST Linux就会正常的跑下去了。

[[i] 本帖最后由 albcamus 于 2007-4-20 16:19 编辑 [/i]][/size]


[img]http://linux.chinaunix.net/bbs/images/attachicons/image.gif[/img][url=http://linux.chinaunix.net/bbs/member.php?action=credits&view=getattach]图片附件[/url]: [url=http://linux.chinaunix.net/bbs/attachment.php?aid=177334]ws6_kernel-3-clear-and-continue.jpg[/url] (2007-4-20 16:19, 82.99 K)

[img]http://linux.chinaunix.net/bbs/attachments/month_0704/20070420_3fc90104399a5a0d9be6Yu9YQCqyPNwD.jpg[/img]

lydr 发表于 2007-4-24 21:48

[size=13px]3.4 gdb的quit命令



可见, 在gdb中quit了被调试程序, GUEST Linux就关机了。

[[i] 本帖最后由 albcamus 于 2007-4-20 16:19 编辑 [/i]][/size]


[img]http://linux.chinaunix.net/bbs/images/attachicons/image.gif[/img][url=http://linux.chinaunix.net/bbs/member.php?action=credits&view=getattach]图片附件[/url]: [url=http://linux.chinaunix.net/bbs/attachment.php?aid=177335]ws6_kernel-4-quit-the-debug.jpg[/url] (2007-4-20 16:19, 139.52 K)

[img]http://linux.chinaunix.net/bbs/attachments/month_0704/20070420_e555df0b81dab6867945CtTA6gXk1VSk.jpg[/img]

神奇小猪 发表于 2007-4-24 23:20

这你也玩服了哦~~~~~~~~~~

galf 发表于 2007-4-25 08:27

好东西,不错!我收藏了!

月光沼泽 发表于 2007-4-30 17:23

咱也来学学了.

现在还不会装LINUX呢.

好晕呀.

foolish_bird 发表于 2007-5-3 00:32

vm 6.0的都出来啦 ???  都没研究过啊 是正版的吗?

对了 有没有中文或者汉化版的呢 鄙人 E文有限 怕用不来啊

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.