On Sat, Apr 28, 2018 at 9:12 AM, Pavel Dovgalyuk <dovga...@ispras.ru> wrote: >> From: Ciro Santilli [mailto:ciro.santi...@gmail.com] >> On Thu, Apr 26, 2018 at 1:34 PM, Pavel Dovgalyuk <dovga...@ispras.ru> wrote: >> >> From: Ciro Santilli [mailto:ciro.santi...@gmail.com] >> >> On Wed, Apr 25, 2018 at 1:45 PM, Pavel Dovgalyuk >> >> <pavel.dovga...@ispras.ru> wrote: >> >> > GDB remote protocol supports reverse debugging of the targets. >> >> > It includes 'reverse step' and 'reverse continue' operations. >> >> > The first one finds the previous step of the execution, >> >> > and the second one is intended to stop at the last breakpoint that >> >> > would happen when the program is executed normally. >> >> > >> >> > Reverse debugging is possible in the replay mode, when at least >> >> > one snapshot was created at the record or replay phase. >> >> > QEMU can use these snapshots for travelling back in time with GDB. >> >> > >> >> >> >> Hi Pavel, >> >> >> >> 1) >> >> >> >> Can you provide more details on how to run the reverse debugging? In >> >> particular how to take the checkpoint? >> > >> > There is some information in docs/replay.txt, but I guess, that I can give >> > some more. >> > >> >> >> >> My test setup is described in detail at: >> >> https://github.com/cirosantilli/qemu-test/tree/8127452e5685ed233dc7357a1fe34b7a2d173480 >> >> command "x86_64/reverse-debug". >> >> >> >> Here are the actual commands: >> >> >> >> #!/usr/bin/env bash >> >> set -eu >> >> dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/.." >> >> cmd="\ >> >> time \ >> >> ./x86_64-softmmu/qemu-system-x86_64 \ >> >> -M pc \ >> >> -append 'root=/dev/sda console=ttyS0 nokaslr printk.time=y - >> >> lkmc_eval=\"/rand_check.out;/sbin/ifup -a;wget -S >> >> google.com;/poweroff.out;\"' \ >> >> -kernel '${dir}/out/x86_64/buildroot/images/bzImage' \ >> >> -nographic \ >> >> -serial mon:stdio \ >> >> -monitor telnet::45454,server,nowait \ >> >> \ >> >> -drive >> >> file='${dir}/out/x86_64/buildroot/images/rootfs.ext2.qcow2,if=none,id=img- >> >> direct,format=qcow2,snapshot' >> > >> > The main thing for reverse debugging is snapshotting. >> > Therefore you should have an image that does not use temporary overlay >> > file (snapshot >> option). >> > I'm using the following command line for record: >> > >> > rm ./images/xp.ovl >> > # create overlay to avoid modifying the original image >> > ./bin/qemu-img create -f qcow2 -b xp.qcow2 ./images/xp.ovl >> > ./bin/qemu-system-i386 \ >> > # This is workaround for XP. I wonder is it needed for the current version >> > or not. >> > -global apic-common.vapic=off \ >> > # using newly created overlay instead of the original image >> > # rrsnapshot creates the snapshot at the start >> > -icount shift=7,rr=record,rrfile=xp.replay,rrsnapshot=init -drive >> file=./images/xp.ovl,if=none,id=img-direct \ >> > -drive driver=blkreplay,if=none,image=img-direct,id=img-replay -device >> > ide-hd,drive=img- >> replay -net none -m 256M -monitor stdio >> > >> > While recording I can create some snapshots with savevm. >> > Command line for replaying differs only in "rr" option. rrsnapshot there >> > loads the initial >> snapshot. >> > Any of the previously created snapshots may be specified. >> > You can also create new snapshots while replaying. >> > >> >> How is the snapshot to be used chosen? Does this patch make it try to >> smartly use the snapshot that is closest to the target break? > > Yes, it selects the closest snapshot. > >> Does rrsnapshot select which snapshot will be used, or just creates a >> snapshot at the start or record? > > rrsnapshot creates a snapshot at record and loads it at start. > It is required, because the disk image is modified by the execution, > when 'snapshot' option is omitted. > >> I have modified my commands to remove snapshot from -drive, and add >> rrsnapshot=init to -icount and the following works: >> >> b start_kernel >> n >> n >> n >> b >> n >> n >> rc > > Great! > >> However, if after the "b start_kernel" I make a new snapshot on telnet >> with "savevm a" to try and make the restore faster, then >> reverse-continue fails. > > That's strange. What did it say? >
Nothing, it just stayed on the same line. >> Also, if I do "loadvm a" after "savevm a" while the debugger is >> attached at start_kernel, the monitor just hangs. Is there a way to >> restore snapshots while debugging of replay is going on? > > Never tried to do this. > I'll check this out. > > > Pavel Dovgalyuk >