24.1.2 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.
- status-async-output contains on-going status information about the
progress of a slow operation. It can be discarded. All status output is
prefixed by +.
- exec-async-output contains asynchronous state change on the target
(stopped, started, disappeared). All async output is prefixed by
*.
- notify-async-output contains supplementary information that the
client should handle (e.g., a new breakpoint information). All notify
output is prefixed by =.
- console-stream-output is output that should be displayed as is in the
console. It is the textual response to a CLI command. All the console
output is prefixed by ~.
- target-stream-output is the output produced by the target program.
All the target output is prefixed by @.
- log-stream-output is output text coming from GDB's internals, for
instance messages that should be displayed as part of an error log. All
the log output is prefixed by &.
- New gdb/mi commands should only output lists containing
values.
See gdb/mi Stream Records, for more
details about the various output records.