Here a possible minimal interface:

Start() start the program in debug mode
Stop() stops it
StepOver() execute the next instruction, eventually returning new current file/linenum
StepInto() jumps in current function, eventually returning new current file/linenum
SetBreakpoint (file, linenum) set a breakpoint
Evaluate(expression) :string
GetStackTrace() obtain the stack trace, as an array of something like [procedure, file, line].
Status() return the current status, running, paused, stopped

Each of this method basically sends a single command to gdb, and eventually capture the command output.
This should not be that hard to do.

The IDE should interface with it and display obtained data. Also, it should deal with locating file/linenum when requested (ie after a step operation, or at a breakpoint stop).