gdb: GDB/MI Simple Examples
27.6 Simple Examples of GDB/MI Interaction
==========================================
This subsection presents several simple examples of interaction using
the GDB/MI interface. In these examples, '->' means that the following
line is passed to GDB/MI as input, while '<-' means the output received
from GDB/MI.
Note the line breaks shown in the examples are here only for
readability, they don't appear in the real output.
Setting a Breakpoint
--------------------
Setting a breakpoint generates synchronous output which contains
detailed information of the breakpoint.
-> -break-insert main
<- ^done,bkpt={number="1",type="breakpoint",disp="keep",
enabled="y",addr="0x08048564",func="main",file="myprog.c",
fullname="/home/nickrob/myprog.c",line="68",thread-groups=["i1"],
times="0"}
<- (gdb)
Program Execution
-----------------
Program execution generates asynchronous records and MI gives the reason
that execution stopped.
-> -exec-run
<- ^running
<- (gdb)
<- *stopped,reason="breakpoint-hit",disp="keep",bkptno="1",thread-id="0",
frame={addr="0x08048564",func="main",
args=[{name="argc",value="1"},{name="argv",value="0xbfc4d4d4"}],
file="myprog.c",fullname="/home/nickrob/myprog.c",line="68",
arch="i386:x86_64"}
<- (gdb)
-> -exec-continue
<- ^running
<- (gdb)
<- *stopped,reason="exited-normally"
<- (gdb)
Quitting GDB
------------
Quitting GDB just prints the result class '^exit'.
-> (gdb)
<- -gdb-exit
<- ^exit
Please note that '^exit' is printed immediately, but it might take
some time for GDB to actually exit. During that time, GDB performs
necessary cleanups, including killing programs being debugged or
disconnecting from debug hardware, so the frontend should wait till GDB
exits and should only forcibly kill GDB if it fails to exit in
reasonable time.
A Bad Command
-------------
Here's what happens if you pass a non-existent command:
-> -rubbish
<- ^error,msg="Undefined MI command: rubbish"
<- (gdb)