VMWare Workstation 6.0调试Linux Kernel

本文介绍了一种使用GDB和VMWare进行Linux内核调试的方法。通过在主机上运行GDB并配置VMWare虚拟机,可以实现对Linux内核的单步调试。文中详细介绍了调试前的环境准备、设置步骤及具体调试过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

刚刚在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

三、调试: 
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, 进行调试:

  1. (gdb) file vmlinux   //vmlinux就是从GUEST拷贝过来的内核映像文件
  2. Reading symbols from /root/vmlinux...done.
  3. Using host libthread_db library "/lib/libthread_db.so.1".
  4. (gdb) target remote localhost:8832  //注意,如果你的GUEST Linux是64位的,这里的localhost:8832就改成localhost:8864
  5. Remote debugging using localhost:8832
  6. [New thread 1]
  7. 0x000f4299 in ?? ()
  8. warning: shared library handler failed to enable breakpoint

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值