Re: Best approach for supporting snapshots for QEMU's gdbstub?
Luis Machado via Gdb <[email protected]> Mon, 17 May 2021 13:49:20 -0300
| Newsgroups | gmane.comp.gdb.devel,gmane.comp.gdb.general,gmane.comp.emulators.qemu |
|---|---|
| Message-ID | <[email protected]> |
Hi, On 5/14/21 1:06 PM, Alex Bennée wrote: > Hi, > > I've been playing around with QEMU's reverse debugging support which > I have working with Pavel's latest patches for supporting virtio with > record/replay. Once you get the right command line it works well enough > although currently each step backwards requires replaying the entire > execution history until you get to the right point. > > QEMU can quite easily snapshot the entire VM state so I was looking to > see what the best way to integrate this would be. As far as I can tell > there are two interfaces gdb supports: bookmarks and checkpoints. > > As far as I can tell bookmarks where added as part of GDB's reverse > debugging support but attempting to use them from the gdbstub reports: > > (gdb) bookmark > You can't do that when your target is `remote' > > so I guess that would need an extension to the stub protocol to support? > Right. We don't support reverse step/next/continue for remote targets. I think this would be the most appropriate way to implement this feature in GDB. But it is not trivial. > The other option I found was checkpoints which seem to predate support > for reverse debugging. However: > > (gdb) checkpoint > checkpoint: can't find fork function in inferior. > > I couldn't tell what feature needs to be negotiated but I suspect it's > something like fork-events if the checkpoint mechanism is designed for > user space with a fork/freeze approach. Checkpoints are an old mechanism for saving a snapshot from a process, but they don't support threaded inferiors and they need to be able to call fork. > > We could of course just add a custom monitor command like the > qemu.sstep= command which could be used manually. However that would be > a QEMU gdbstub specific approach. That would be an easy and quick way to allow GDB to control things in QEMU, but I wouldn't say it is the best. Monitor commands are basically a bypass of the RSP where GDB sends/receives commands to/from the remote target. > > The other thing would be to be more intelligent on QEMU's side and save > snapshots each time we hit an event, for example each time we hit a > given breakpoint. However I do worry that might lead to snapshots > growing quite quickly. GDB would need to be aware of such snapshots for them to be useful. Otherwise GDB wouldn't be able to use them to restore state. > > Any thoughts/suggestions? >