--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2008-10-14 Hui Zhu + + * gdb.texinfo: Add documentation for process record and replay. + 2008-09-30 Michael Snyder * gdb.texinfo: Add documentation for reverse execution. --- a/gdb.texinfo +++ b/gdb.texinfo @@ -144,6 +144,7 @@ software in general. We will miss him. * Running:: Running programs under @value{GDBN} * Stopping:: Stopping and continuing * Reverse Execution:: Running programs backward +* Process record and replay:: Recording programs running message and replay it * Stack:: Examining the stack * Source:: Examining source files * Data:: Examining data @@ -4963,6 +4964,96 @@ This is the default. @end table +@node Process record and replay +@chapter Recording programs running message and replay it +@cindex process record and replay +@cindex recording programs running message and replay it + +In a architecture environment that supports process record and replay, +process record and replay target can record a log of the process execution, +and replay it with both forward and reverse execute commands. + +When this target is in use, if the next instruction to be executed is in the +execution log, @value{GDBN} will debug in replay mode so that all the +execution events are taken from the execution log. Otherwise, @value{GDBN} +will debug in record mode and record the execution log while executing +normally. + +If you are debugging in a architecture environment that supports +process record and replay, @value{GDBN} provides the following commands. + +@table @code +@kindex target record +@kindex record +@kindex rec +@item target record +This a standard command to start process record and replay target. +Process record and replay target can only debug a process that already +running. Therefore you need to first start the process @code{run}, +and then start the recording @code{record}. + +@kindex stoprecord +@kindex sr +@item stoprecord +Stop process record and replay target at once. When Process record and +replay target stops, all the execution log will be deleted and the inferior +will either be terminated, or remain in its final state. + +When you stop the process record and replay target in record mode (at the +end of the execution log), the inferior will be stopped at the next +instruction that would have been recorded. In other words, if you record +for a while and then stop recording, the inferior process will be left in +the same state as if you had never done any recording. + +On the other hand, if the process record and replay target is stopped while +in replay mode (that is, not at the end of the execution log but at some +earlier point), the inferior process will become "live" at that earlier state, +and it will then be possible to continue debugging the process "live" from +that state. + +When the inferior process exits, or @value{GDBN} detaches from it, process +record and replay target will automatically stop itself. + +@kindex set record-auto-delete +@item set record-auto-delete +@itemx set record-auto-delete 1 +Set the behavior when record instructions limit is reached. 1 mean that GDB +will auto delete the oldest record to make room for each new one. + +@item set record-auto-delete 0 +0 is the default value, meaning that @value{GDBN} will stop the inferior. + +@kindex show record-auto-delete +@item show record-auto-delete +Show the value of record-auto-delete. + +@kindex set record-insn-number-max @var{limit} +@item set record-insn-number-max @var{limit} +Set the limit of instructions to be recorded. Default value is 200000. +If set to 0, record instructions number limit function will disable. +In this case, if record instructions number is bigger than @var{limit}, +@value{GDBN} will auto delete the earliest recorded instruction to make room +for each new one. + +@kindex show record-insn-number-max +@item show record-insn-number-max +Show the value of recorded instructions limit. + +@kindex info record-insn-number +@item info record-insn-number +Show the current number of recorded instructions. + +@kindex delrecord +@kindex dr +@item delrecord +When record target running in replay mode ("in the past"), delete the +subsequent execution log and begin to record a new execution log starting +from the current address. This has much the same effect as "changing the past" +(see "Set values of variables", above); it means you will abandon the +previously recorded "future" and begin recording a new "future". +@end table + + @node Stack @chapter Examining the Stack