背景
在编写项目的时候需要用qemu来跑,大部分是正常的,但偶现一些bug,需要用gdb来调,但不能每次都用qemu跑,直到跑出来想要调的bug再调,费时费力。所以希望能有快照功能,在出现bug的时候直接保存现场,以后需要调的时候直接读取快照即可。
解决方案
使用qemu monitor的savevm功能保存快照,配合gdb进行调试。
使用qemu-img生成qcow2镜像
要想保存快照,读取快照,首先需要一个镜像来支持它们,这里使用qemu的qcow2镜像。
qemu-img create -f qcow2 test.qcow2 32M
test.qcow2为自己想要设置的镜像名字,后面可以加上希望的size,我这里设置的32M。
(平常出现的Error: No block device can accept snapshots问题就是没有镜像导致的)
qemu命令更新
在原有的qemu命令基础上,加上-drive if=none,format=qcow2,file=test.qcow2
即可。
保存快照
出现bug或是希望保存快照的时候,ctrl+a c调出qemu monitor,使用savevm snapshot1
即可保存快照,snapshot1为你希望保存的快照名称。
在qemu monitor中使用info snapshots
可以查看当前所有快照信息。
读取快照
在加上-drive的qemu命令基础上,使用-loadvm snapshot1
选项来加载快照。
继续完成工作
以我为例,加载完快照继续使用-s -S配合gdb调试即可。