> From: Ciro Santilli [mailto:ciro.santi...@gmail.com] > On Wed, May 23, 2018 at 2:28 PM, Pavel Dovgalyuk <dovga...@ispras.ru> wrote: > >> From: Ciro Santilli [mailto:ciro.santi...@gmail.com] > >> On Wed, May 23, 2018 at 7:49 AM, 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. > >> > > >> > Running the execution in replay mode allows using GDB reverse debugging > >> > commands: > >> > - reverse-stepi (or rsi): Steps one instruction to the past. > >> > QEMU loads on of the prior snapshots and proceeds to the desired > >> > instruction forward. When that step is reaches, execution stops. > >> > - reverse-continue (or rc): Runs execution "backwards". > >> > QEMU tries to find breakpoint or watchpoint by loaded prior snapshot > >> > and replaying the execution. Then QEMU loads snapshots again and > >> > replays to the latest breakpoint. When there are no breakpoints in > >> > the examined section of the execution, QEMU finds one more snapshot > >> > and tries again. After the first snapshot is processed, execution > >> > stops at this snapshot. > >> > > >> > The set of patches include the following modifications: > >> > - gdbstub update for reverse debugging support > >> > - functions that automatically perform reverse step and reverse > >> > continue operations > >> > - hmp/qmp commands for manipulating the replay process > >> > - improvement of the snapshotting for saving the execution step > >> > in the snapshot parameters > >> > - other record/replay fixes > >> > > >> > The patches are available in the repository: > >> > https://github.com/ispras/qemu/tree/rr-180428 > >> > > >> > >> This branch appears to contain one month old commits, is it the correct > >> one? > > > > Right. > > There were no significant changes except the fix which was already queued > > by Paolo. > > As soon as it is upstreamed, I'll update the branch. > > > > OK. > > At the current branch 6b23df0d0ca0e5e999cd12af2b18b2a95faeb421 still > observe the same behaviour as mentioned at: > https://lists.gnu.org/archive/html/qemu-devel/2018-04/msg04669.html > > If I try to savevm during the debug replay to speedup up reverse > execution, QEMU hangs.
This behavior was fixes by a separate patch of PS/2 controller. Here is the branch including it: https://github.com/ispras/qemu/tree/rr-180524 > Have you managed to reproduce that? Or is this not an intended use > case, i.e. only savevm during record is supported? Yes, I reproduced and fixed it. savevm should work correctly during both record and replay. > Am I correct to understand that being able to do savevms in the middle > of a long execution is the critical feature that this adds? Otherwise > we are essentially replaying from the initial snapshot every time, so > we might as well just restart a new replay, is that true? We can start replay from any of the snapshots creating during the record and replay. Pavel Dovgalyuk