[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v7 13/14] replay: create temporary snapshot at debugger connectio
From: |
Pavel Dovgalyuk |
Subject: |
[PATCH v7 13/14] replay: create temporary snapshot at debugger connection |
Date: |
Sat, 03 Oct 2020 20:14:01 +0300 |
User-agent: |
StGit/0.17.1-dirty |
When record/replay does not uses overlays for storing the snapshots,
user is not capable of issuing reverse debugging commands.
This patch adds creation of the VM snapshot on the temporary
overlay image, when the debugger connects to QEMU.
Therefore the execution can be rewind to the moment
of the debugger connection while debugging the virtual machine.
Signed-off-by: Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
--
v6:
- dropped unused error processing (suggested by Philippe Mathieu-Daudé)
---
gdbstub.c | 1 +
include/sysemu/replay.h | 2 ++
replay/replay-debugging.c | 14 ++++++++++++++
3 files changed, 17 insertions(+)
diff --git a/gdbstub.c b/gdbstub.c
index ac92273018..f19f98ab1a 100644
--- a/gdbstub.c
+++ b/gdbstub.c
@@ -3321,6 +3321,7 @@ static void gdb_chr_event(void *opaque, QEMUChrEvent
event)
s->g_cpu = s->c_cpu;
vm_stop(RUN_STATE_PAUSED);
+ replay_gdb_attached();
gdb_has_xml = false;
break;
default:
diff --git a/include/sysemu/replay.h b/include/sysemu/replay.h
index b6cac175c4..2aa34b8919 100644
--- a/include/sysemu/replay.h
+++ b/include/sysemu/replay.h
@@ -94,6 +94,8 @@ bool replay_reverse_continue(void);
bool replay_running_debug(void);
/* Called in reverse debugging mode to collect breakpoint information */
void replay_breakpoint(void);
+/* Called when gdb is attached to gdbstub */
+void replay_gdb_attached(void);
/* Processing the instructions */
diff --git a/replay/replay-debugging.c b/replay/replay-debugging.c
index 30ca38e5dd..ee9e86daa9 100644
--- a/replay/replay-debugging.c
+++ b/replay/replay-debugging.c
@@ -318,3 +318,17 @@ void replay_breakpoint(void)
assert(replay_mode == REPLAY_MODE_PLAY);
replay_last_breakpoint = replay_get_current_icount();
}
+
+void replay_gdb_attached(void)
+{
+ /*
+ * Create VM snapshot on temporary overlay to allow reverse
+ * debugging even if snapshots were not enabled.
+ */
+ if (replay_mode == REPLAY_MODE_PLAY
+ && !replay_snapshot) {
+ if (save_snapshot("start_debugging", NULL) != 0) {
+ /* Can't create the snapshot. Continue conventional debugging. */
+ }
+ }
+}
- [PATCH v7 03/14] qcow2: introduce icount field for snapshots, (continued)
- [PATCH v7 03/14] qcow2: introduce icount field for snapshots, Pavel Dovgalyuk, 2020/10/03
- [PATCH v7 04/14] migration: introduce icount field for snapshots, Pavel Dovgalyuk, 2020/10/03
- [PATCH v7 05/14] qapi: introduce replay.json for record/replay-related stuff, Pavel Dovgalyuk, 2020/10/03
- [PATCH v7 06/14] replay: introduce info hmp/qmp command, Pavel Dovgalyuk, 2020/10/03
- [PATCH v7 07/14] replay: introduce breakpoint at the specified step, Pavel Dovgalyuk, 2020/10/03
- [PATCH v7 08/14] replay: implement replay-seek command, Pavel Dovgalyuk, 2020/10/03
- [PATCH v7 09/14] replay: flush rr queue before loading the vmstate, Pavel Dovgalyuk, 2020/10/03
- [PATCH v7 10/14] gdbstub: add reverse step support in replay mode, Pavel Dovgalyuk, 2020/10/03
- [PATCH v7 11/14] gdbstub: add reverse continue support in replay mode, Pavel Dovgalyuk, 2020/10/03
- [PATCH v7 12/14] replay: describe reverse debugging in docs/replay.txt, Pavel Dovgalyuk, 2020/10/03
- [PATCH v7 13/14] replay: create temporary snapshot at debugger connection,
Pavel Dovgalyuk <=
- [PATCH v7 14/14] tests/acceptance: add reverse debugging test, Pavel Dovgalyuk, 2020/10/03
- Re: [PATCH v7 00/14] Reverse debugging, no-reply, 2020/10/03
- Re: [PATCH v7 00/14] Reverse debugging, Paolo Bonzini, 2020/10/05