replay: describe reverse debugging in docs/replay.txt
This patch updates the documentation and describes usage of the reverse debugging in QEMU+GDB. Signed-off-by: Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru> Reviewed-by: Alex Bennée <alex.bennee@linaro.org> -- v4 changes: - added an example of the command line for reverse debugging of the diskless machine Message-Id: <160174523509.12451.1409905901920738979.stgit@pasha-ThinkPad-X280> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
cda382594b
commit
9a608af3c0
|
@ -265,6 +265,16 @@ of the original disk image, use overlay files linked to the original images.
|
||||||
Therefore all new snapshots (including the starting one) will be saved in
|
Therefore all new snapshots (including the starting one) will be saved in
|
||||||
overlays and the original image remains unchanged.
|
overlays and the original image remains unchanged.
|
||||||
|
|
||||||
|
When you need to use snapshots with diskless virtual machine,
|
||||||
|
it must be started with 'orphan' qcow2 image. This image will be used
|
||||||
|
for storing VM snapshots. Here is the example of the command line for this:
|
||||||
|
|
||||||
|
qemu-system-i386 -icount shift=3,rr=replay,rrfile=record.bin,rrsnapshot=init \
|
||||||
|
-net none -drive file=empty.qcow2,if=none,id=rr
|
||||||
|
|
||||||
|
empty.qcow2 drive does not connected to any virtual block device and used
|
||||||
|
for VM snapshots only.
|
||||||
|
|
||||||
Network devices
|
Network devices
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
|
@ -294,6 +304,42 @@ for recording and replaying must contain identical number of ports in record
|
||||||
and replay modes, but their backends may differ.
|
and replay modes, but their backends may differ.
|
||||||
E.g., '-serial stdio' in record mode, and '-serial null' in replay mode.
|
E.g., '-serial stdio' in record mode, and '-serial null' in replay mode.
|
||||||
|
|
||||||
|
Reverse debugging
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
Reverse debugging allows "executing" the program in reverse direction.
|
||||||
|
GDB remote protocol supports "reverse step" and "reverse continue"
|
||||||
|
commands. The first one steps single instruction backwards in time,
|
||||||
|
and the second one finds the last breakpoint in the past.
|
||||||
|
|
||||||
|
Recorded executions may be used to enable reverse debugging. QEMU can't
|
||||||
|
execute the code in backwards direction, but can load a snapshot and
|
||||||
|
replay forward to find the desired position or breakpoint.
|
||||||
|
|
||||||
|
The following GDB commands are supported:
|
||||||
|
- reverse-stepi (or rsi) - step one instruction backwards
|
||||||
|
- reverse-continue (or rc) - find last breakpoint in the past
|
||||||
|
|
||||||
|
Reverse step loads the nearest snapshot and replays the execution until
|
||||||
|
the required instruction is met.
|
||||||
|
|
||||||
|
Reverse continue may include several passes of examining the execution
|
||||||
|
between the snapshots. Each of the passes include the following steps:
|
||||||
|
1. loading the snapshot
|
||||||
|
2. replaying to examine the breakpoints
|
||||||
|
3. if breakpoint or watchpoint was met
|
||||||
|
- loading the snaphot again
|
||||||
|
- replaying to the required breakpoint
|
||||||
|
4. else
|
||||||
|
- proceeding to the p.1 with the earlier snapshot
|
||||||
|
|
||||||
|
Therefore usage of the reverse debugging requires at least one snapshot
|
||||||
|
created in advance. This can be done by omitting 'snapshot' option
|
||||||
|
for the block drives and adding 'rrsnapshot' for both record and replay
|
||||||
|
command lines.
|
||||||
|
See the "Snapshotting" section to learn more about running record/replay
|
||||||
|
and creating the snapshot in these modes.
|
||||||
|
|
||||||
Replay log format
|
Replay log format
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue