gdb: GDB/MI General Design

 
 27.1 GDB/MI General Design
 ==========================
 
 Interaction of a GDB/MI frontend with GDB involves three parts--commands
 sent to GDB, responses to those commands and notifications.  Each
 command results in exactly one response, indicating either successful
 completion of the command, or an error.  For the commands that do not
 resume the target, the response contains the requested information.  For
 the commands that resume the target, the response only indicates whether
 the target was successfully resumed.  Notifications is the mechanism for
 reporting changes in the state of the target, or in GDB state, that
 cannot conveniently be associated with a command and reported as part of
 that command response.
 
    The important examples of notifications are:
 
    * Exec notifications.  These are used to report changes in target
      state--when a target is resumed, or stopped.  It would not be
      feasible to include this information in response of resuming
      commands, because one resume commands can result in multiple events
      in different threads.  Also, quite some time may pass before any
      event happens in the target, while a frontend needs to know whether
      the resuming command itself was successfully executed.
 
    * Console output, and status notifications.  Console output
      notifications are used to report output of CLI commands, as well as
      diagnostics for other commands.  Status notifications are used to
      report the progress of a long-running operation.  Naturally,
      including this information in command response would mean no output
      is produced until the command is finished, which is undesirable.
 
    * General notifications.  Commands may have various side effects on
      the GDB or target state beyond their official purpose.  For
      example, a command may change the selected thread.  Although such
      changes can be included in command response, using notification
      allows for more orthogonal frontend design.
 
    There's no guarantee that whenever an MI command reports an error,
 GDB or the target are in any specific state, and especially, the state
 is not reverted to the state before the MI command was processed.
 Therefore, whenever an MI command results in an error, we recommend that
 the frontend refreshes all the information shown in the user interface.
 

Menu