| #include <stdio.h> |
| #include <stdlib.h> |
| #include <string.h> |
| |
| #include "MIList.h" |
| #include "MIString.h" |
| #include "MISession.h" |
| #include "MIError.h" |
| #include "MIResultRecord.h" |
| #include "MIBreakpoint.h" |
| |
| void |
| cmd_callback(MIResultRecord *rr, void *sess) |
| { |
| MIString *str = MIResultRecordToString(rr); |
| printf("res> %s\n", MIStringToCString(str)); |
| MIStringFree(str); |
| } |
| |
| void |
| console_callback(char *str) |
| { |
| printf("cons> %s\n", str); |
| } |
| |
| void |
| log_callback(char *str) |
| { |
| printf("log> %s\n", str); |
| } |
| |
| void |
| sendcmd_wait(MISession *sess, MICommand *cmd) |
| { |
| MISessionSendCommand(sess, cmd); |
| do { |
| MISessionProgress(sess); |
| } while (!MICommandCompleted(cmd)); |
| } |
| |
| int main(int argc, char *argv[]) |
| { |
| MISession *sess; |
| MICommand *cmd; |
| MIList *bpts; |
| MIBreakpoint *bpt; |
| |
| sess = MISessionNew(); |
| MISessionSetDebug(1); |
| if (MISessionStartLocal(sess, "test_mi") < 0) { |
| fprintf(stderr, "%s", MIGetErrorStr()); |
| return 1; |
| } |
| |
| MISessionRegisterConsoleCallback(sess, console_callback); |
| MISessionRegisterLogCallback(sess, log_callback); |
| |
| printf("help command\n"); |
| cmd = MICommandNew("help", MIResultRecordDONE); |
| MICommandRegisterCallback(cmd, cmd_callback, sess); |
| sendcmd_wait(sess, cmd); |
| if (!MICommandResultOK(cmd)) |
| fprintf(stderr, "command failed\n"); |
| MICommandFree(cmd); |
| printf("set command\n"); |
| cmd = MIGDBSet("confirm", "off"); |
| MICommandRegisterCallback(cmd, cmd_callback, sess); |
| sendcmd_wait(sess, cmd); |
| if (!MICommandResultOK(cmd)) |
| fprintf(stderr, "command failed\n"); |
| MICommandFree(cmd); |
| printf("break command\n"); |
| cmd = MIBreakInsert(0, 0, NULL, 0, "4", 0); |
| MICommandRegisterCallback(cmd, cmd_callback, sess); |
| sendcmd_wait(sess, cmd); |
| if (!MICommandResultOK(cmd)) |
| fprintf(stderr, "command failed\n"); |
| bpts = MIBreakpointGetBreakInsertInfo(cmd); |
| if (bpts != NULL) |
| for (MIListSet(bpts); (bpt = (MIBreakpoint *)MIListGet(bpts)) != NULL; ) |
| printf("bpt id = %d\n", bpt->number); |
| MICommandFree(cmd); |
| printf("quit command\n"); |
| cmd = MIGDBExit(); |
| MICommandRegisterCallback(cmd, cmd_callback, sess); |
| sendcmd_wait(sess, cmd); |
| if (!MICommandResultOK(cmd)) |
| fprintf(stderr, "command failed\n"); |
| MICommandFree(cmd); |
| |
| return 0; |
| } |