使用GDB单步调试KVM内核

调试内核的方法有很多。 但是通过gdb    和KVM调试有以下几个好处。

1) 可以实现单步调试。

2) 环境配置简单。


1. RHEL7.3上实现KVM内核调试。

1) 在domain行,追加xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0' 。并追加<qemu:commandline>标签,该标签将会允许启动qemu时,向qemu传送GDB相关option。 当然也可以同时配置多个tcp port来调试多个KVM内核。修改后退出virsh,不需要重启libvirt服务。

# virsh edit rhel7.3

  <domain type='kvm'
       xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0' >
  <qemu:commandline>
        <qemu:arg value='-gdb'/>
        <qemu:arg value='tcp::1235'/>
  </qemu:commandline>
  ...

2) 重启启动虚拟机。
# virsh start rhel7.3


3) 通过netstat查看是否正在监控1235端口,如果如下输出,说明配置成功。

# netstat -tapn  | grep 1235
tcp        0      0 0.0.0.0:1235            0.0.0.0:*               LISTEN      22413/qemu-kvm

4) 虚拟机将会需要加载一些参数“kgdboc=ttyS0,115200”  用于支持KGDB调试。通过grubby命令完成。

# grubby --update-kernel=ALL --args="console=ttyS0,115200 kgdboc=ttyS0,115200

5) 在虚拟机上安装debuginfo的包。

# debuginfo-install --downloadonly kernel-3.10.0-327.el7

# rpm -ivh  kernel-debuginfo-3.10.0-514.el7.x86_64.rpm

# rpm -ivh kernel-debuginfo-common-x86_64-3.10.0-514.el7.x86_64.rpm

6) 在host上创建用于调试的目录。并解压虚拟机内核对应的debug rpm包。

# mkdir /home/wulm/kvm_debug

# cd /home/wulm/kvm_debug

# rpm2cpio kernel-debuginfo-3.10.0-514.el7.x86_64.rpm | cpio -idmv

# rpm2cpio kernel-debuginfo-common-x86_64-3.10.0-514.el7.x86_64.rpm | cpio -idmv

7) 接下来就可以用gdb进行调试了,当然要提前安装好gdb。

# gdb -tui usr/lib/debug/lib/modules/3.10.0-514.el7.x86_64/vmlinux

 (gdb) target remote 127.0.0.1:1235   (这时候虚拟机已经被中断)

 (gdb)c                                                (虚拟机可以运行了)


reference

- https://access.redhat.com/blogs/766093/posts/2690881


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值