使用GDB单步调试KVM内核

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

1) 可以实现单步调试。

2) 环境配置简单。


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

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

# virsh edit rhel7.3

         xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0' >
 
       
       
 

  ...

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


你可能感兴趣的:(linux)