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.