Began implementing the actual GDB interface itself.
Note that GDBParser is a FSM (finite-state-machine); the initial state is
GDB_STOPPED. When parse_line() is called for the first time, it will send the
string "run [arguments]\n" along to GDB, thus beginning the execution . . .
The most pressing issue at the moment, then, is how the pointer data will be
collected. The most obvious way is watchpoints, of course. However, ideally,
the execution will not need to be paused every single time the memory is
changed. However, that may be wishful thinking; as on some systems there is a
limit to how many hardware watchpoints can be set. To quote the gdb info page:
"If you set too many hardware watchpoints, GDB might be unable to insert all
of them when you resume the execution of your program." I take that to mean
there is a limit to the amount of watchpoints one can have.
I will, however, test this theory by setting a couple thousand watchpoints in
a gdb session. gdb will automatically remove watchpoints involving local
variables as soon as they go out of scope, luckily, which should help some.