Here is an example of code that runs as a monitor program on an Arduino. It handles some things like backspace etc entered by the user on the PC then parses the command line and executes one of the many functions.
This is a very large program, I have cut out some of the parts, hopefully enough to give you an idea.
typedef struct command {
char cmd[10];
void (*func) (void);
};
command commands[] = {
{"rd", Cmd_RD},
{"rdw", Cmd_RDW},
{"wr", Cmd_WR},
{"l", Cmd_L},
{"p", Cmd_P},
{"regs", Cmd_REGS},
{"io", Cmd_IO},
{"f", Cmd_F},
{"sp", Cmd_SP},
{"per", Cmd_PER},
{"watch", Cmd_WATCH},
{"rst", Cmd_RST},
{"ipc", Cmd_IPC},
{"set", Cmd_SET},
{"dig", Cmd_DIG},
{"an", Cmd_AN},
{"pin", Cmd_PIN},
{"pc", Cmd_PC},
{"info", Cmd_INFO},
{"/", Cmd_HELP}
};
...
void Cmd_WR () { // example of one of the commands
/////////////////////////////////////////////////////////
// write a value to target RAM
int addr = GetAddrParm(0);
byte val = GetValParm(1, HEX);
if (SetTargetByte (addr, val) != val)
Serial << "Write did not verify" << endl;
}
...
void loop() {
char c;
if (Serial.available() > 0) {
c = Serial.read();
if (ESC == c) {
while (Serial.available() < 2) {};
c = Serial.read();
c = Serial.read();
switch (c) {
case 'A': // up arrow
// copy the last command into the command buffer
// then echo it to the terminal and set the
// the buffer's index pointer to the end
memcpy(cmd_buffer, last_cmd, sizeof(last_cmd));
cmd_buffer_index = strlen (cmd_buffer);
Serial << cmd_buffer;
break;
}
} else {
c = tolower(c);
switch (c) {
case TAB: // retrieve and execute last command
memcpy(cmd_buffer, last_cmd, sizeof(cmd_buffer));
ProcessCommand ();
break;
case BACKSPACE: // delete last char
if (cmd_buffer_index > 0) {
cmd_buffer[--cmd_buffer_index] = NULLCHAR;
Serial << _BYTE(BACKSPACE) << SPACE << _BYTE(BACKSPACE);
}
break;
case LF:
ProcessCommand ();
Serial.read(); // remove any following CR
break;
case CR:
ProcessCommand ();
Serial.read(); // remove any following LF
break;
default:
cmd_buffer[cmd_buffer_index++] = c;
cmd_buffer[cmd_buffer_index] = NULLCHAR;
Serial.print (c);
}
}
}
}
plug into the usb port of the arduino and interrogate it.
Exactly what the program does, although it gets the data from a second Arduino that only runs a small handler. But you can read/write memory, registers, read/write pins etc.
I can post the entire thing if it helps, it's 2700 lines though 
Rob