KVM的情况

KVM的日志中有如下内容。


/var/log/libvirt/qemu/<客户端操作系统名>.log:libvirt的日志

/var/log/messages:主机操作系统的日志


在KVM中也和Xen一样可以使用virsh list命令确认客户端操作系统的状态。


virsh list

Id名称状态

13rhel6-4运行中

14rhel6-1运行中


在KVM中调试客户端操作系统时使用gdb就会非常简单。KVM中是经由qemu将gdb连接到客户端操作系统。在qemu启动选项中加上-s,就可以调试客户端操作系统。

在使用libvirt的情况下,有时也可以通过virsh edit来改写客户端操作系统的配置文件,以使用-s选项。但需要[1]意,一部分旧的libvirt是不支持这个XML的。另外,在系统中只能使用一个gdb来进行客户端操作系统调试。


virsh edit<domain名>


修改如下注7:


-<domain type='kvm'>

+<domain type='kvm'xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>

+<qemu:commandline>

+

<qemu:arg value='-s'/>

+</qemu:commandline>


LC_ALL=C PATH=/sbin:/usr/sbin:/bin:/usr/bin QEMU_AUDIO_DRV=none/u s r/l i b e x e c/q e m u-k v m-M r h e l 6. 0.0-e n a b l e-k v m-m 1 0 2 4-s m p 2,sockets=2,cores=1,threads=1-name test-uuid 031cda76-6500-7f53-6250-f44bec96a5a8-nodefconfig-nodefaults-chardev socket, id=monitor, path=/var/lib/libvirt/qemu/test.monitor, server, nowait-mon chardev=monitor, mode=control-rtc base=utc-boot c-drive file=/var/lib/libvirt/images/test.img, if=none, id=drive-virtio-disk0,boot=on, format=raw, cache=none-device virtio-blk-pci, bus=pci.0,addr=0x5,drive=drive-virtio-disk0,id=virtio-disk0-drive if=none, media=cdrom, id=drive-ide0-1-0,readonly=on, format=raw-device ide-dri ve, bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0-chardev pty, id=serial0-device isa-serial, chardev=serial0-usb-device usb-tablet, id=input0-vnc 127.0.0.1:3-vga cirrus-device AC97,id=sound0,bus=pci.0,addr=0x4-device virtio-balloon-pci, id=balloon0,bus=pci.0,addr=0x6-s

从其他终端启动gdb。使用target remote命令连接到127.0.0.1的1234号端口。连接后客户端操作系统就会进入停止状态。使用gdb的info register命令等可以确认寄存器的内容或内存状态等。


gdb—quiet/usr/lib/debug/lib/modules/2.6.32-71.el6.x86_64/vmlinux

Reading symbols from/usr/lib/debug/lib/modules/2.6.32-71.el6.x86_64/

vmlinux……done.

(gdb)target remote 127.0.0.1:1234

Remote debugging using 127.0.0.1:1234

native_safe_halt()at/usr/src/debug/kernel-2.6.32-71.el6/linux-2.6.32-71.


KVM的情况 - 图1

使用这个gdb功能,还可以使操作系统像应用程序一样单步运行。另外,还可以设置断点(break point),在任意地方停止客户端操作系统运行等,这是非常强大的调试功能。

KVM的情况 - 图2

KVM的情况 - 图3

KVM的情况 - 图4

在KVM上调试BIOS等情况必须在8086模式下,因此一定不能忘记使用下列命令更改模式。


(gdb)set arch i8086


也可以与Xen一样提取客户端操作系统的内存转储。在KVM的情况下使用virsh dump。由于virsh dump是最近才添加的功能,因此也有一些发布版尚不能使用。


virsh dump rhel6-1/tmp/test-dump


域rhel6-1转储到/tmp/test-dump。

转储文件的内容可以使用crash命令来查看。


crash/usr/lib/debug/lib/modules/2.6.32-71.el6.x86_64/vmlinux/tmp/test-dump


注意事项:crash-4.0-8.12中添加了能够分析使用virsh dump提取的内存转储文件的功能。然后进行了各种修改和改善。旧版的crash命令有时不能查看使用virsh dump提取的转储文件,建议尽量使用最新的crash命令。

[1]7:‘-’表示删除,‘+’表示添加。