Debugging with GDB Manual The GNU Source-Level Debugger (769148-001, March 2014)
Pragmatics:
• We want easy access to the existing CLI syntax (for debugging).
• We want it to be easy to spot a MI operation.
GDB/MI Output syntax
The output from GDB/MI consists of zero or more out-of-band records followed, optionally, by a
single result record. This result record is for the most recent command. The sequence of output
records is terminated by '(gdb)'.
If an input command was prefixed with a token then the corresponding output for that command
will also be prefixed by that same token.
output
→
( out-of-band-record )* [ result-record ]
"(gdb)" nl
result-record → [ token ] "^" result-class ( "," result )*
nl
out-of-band-record
→
async-record | stream-record
async-record → exec-async-output | status-async-output |
notify-async-output
exec-async-output → [ token ] "*" async-output
status-async-output → [ token ] "+" async-output
notify-async-output → [ token ] "=" async-output
async-output → async-class ( "," result )* nl
result-class → "done" | "running" | "connected" | "error"
| "exit"
async-class → "stopped" | others (where others will be added
depending on the needs―this is still in development).
result → variable "=" value
variable → string
value → const | tuple | list
const → c-string
tuple → "{}" | "{" result ( "," result )* "}"
list → "[]" | "[" value ( "," value )* "]" | "["
result ( "," result )* "]"
stream-record → console-stream-output | target-stream-output
| log-stream-output
console-stream-output → "~" c-string
target-stream-output → "@" c-string
log-stream-output → "&" c-string
nl → CR | CR-LF
token → any sequence of digits.
Notes:
• All output sequences end in a single line containing a period.
• The token is from the corresponding request. If an execution command is interrupted by the
'-exec-interrupt' command, the token associated with the '*stopped' message is the
one of the original execution command, not the one of the interrupt command.
234 The GDB/MI Interface