[pypy-commit] pypy reverse-debugger: Document the simplified model actually implemented

arigo pypy.commits at gmail.com
Fri Jun 10 04:54:36 EDT 2016


Author: Armin Rigo <arigo at tunes.org>
Branch: reverse-debugger
Changeset: r85064:32ee948070b4
Date: 2016-06-10 10:13 +0200
http://bitbucket.org/pypy/pypy/changeset/32ee948070b4/

Log:	Document the simplified model actually implemented

diff --git a/rpython/translator/revdb/rdb-src/revdb.c b/rpython/translator/revdb/rdb-src/revdb.c
--- a/rpython/translator/revdb/rdb-src/revdb.c
+++ b/rpython/translator/revdb/rdb-src/revdb.c
@@ -154,32 +154,21 @@
         ...
         [frozen process n]
 
-   When all frozen processes are made, the main process enters
-   interactive mode.  In interactive mode, the main process reads from
-   stdin a version number to go to.  It picks the correct frozen
-   process (the closest one that is before in time); let's say it is
-   process #p.  It sends the version number to it by writing to pipe
-   #p.  The corresponding frozen process wakes up, and forks again
-   into a debugging process.  The main and the frozen process then
-   block.
+   The main process's job, once reloading is finished, is only to
+   active debugging processes, one at a time.  To go to a specific
+   target time, it activates the right frozen process by sending
+   'target_time' over the corresponding pipe.  The frozen process
+   forks the debugging process, and the debugging process goes forward
+   until it reaches 'target_time'.
 
-   The debugging process first goes forward in time until it reaches
-   the right version number.  Then it interacts with the user (or a
-   pdb-like program outside) on stdin/stdout.  This goes on until an
-   "exit" command is received and the debugging process dies.  At that
-   point its parent (the frozen process) continues and signals its own
-   parent (the main process) by writing to a separate signalling pipe.
-   The main process then wakes up again, and the loop closes: it reads
-   on stdin the next version number that we're interested in, and asks
-   the right frozen process to make a debugging process again.
+   The debugging process is then interacting with the user on
+   stdin/stdout.
 
-   Note how we have, over time, several processes that read and
-   process stdin; it should work because they are strictly doing that
-   in sequence, never concurrently.  To avoid the case where stdin is
-   buffered inside one process but a different process should read it,
-   we write markers to stdout when such switches occur.  The outside
-   controlling program must wait until it sees these markers before
-   writing more data.
+   A few commands like 'go <target_time>' will cause the debugging
+   process to send the 'target_time' back over a signalling pipe to
+   the main process, and then finish.  The main process receives that
+   'target_time', and the loop closes: it activates the right frozen
+   process, which will go forward and re-enter interactive mode.
 */
 
 #define NUM_FROZEN_PROCESSES   30


More information about the pypy-commit mailing list