Began implementing the actual GDB interface itself.
commitbc0b2a4049ab5150b45494e074a4312eff4db053
authorstrange <kawk256@gmail.com>
Thu, 29 Oct 2009 03:17:24 +0000 (28 21:17 -0600)
committerstrange <kawk256@gmail.com>
Thu, 29 Oct 2009 04:03:43 +0000 (28 22:03 -0600)
tree84306273f1c47327a1c55dcdfcb166775243bf06
parentfb5f19872c0fd5cc111a0c353695143f2b681ca9
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.
src/CMakeLists.txt
src/interface/Aesalon.cpp
src/interface/GDBNotification.cpp [new file with mode: 0644]
src/interface/GDBNotification.h [new file with mode: 0644]
src/interface/GDBParser.cpp [new file with mode: 0644]
src/interface/GDBParser.h [new file with mode: 0644]
src/interface/Initializer.cpp
src/interface/Initializer.h
src/platform/ArgumentList.h
src/platform/BidirectionalPipe.cpp