Previous: Ada Exception GDB/MI Catchpoint Commands, Up: GDB/MI Catchpoint Commands

#### 27.9.3 C`++` Exception gdb/mi Catchpoints

The following gdb/mi commands can be used to create catchpoints that stop the execution when C`++` exceptions are being throw, rethrown, or caught.

#### The `-catch-throw` Command

##### Synopsis

          -catch-throw [ -t ] [ -r regexp]

Stop when the debuggee throws a C`++` exception. If regexp is given, then only exceptions whose type matches the regular expression will be caught.

If ``-t`' is given, then the catchpoint is enabled only for one stop, the catchpoint is automatically deleted after stopping once for the event.

##### gdb Command

The corresponding gdb commands are ``catch throw`' and ``tcatch throw`' (see Set Catchpoints).

##### Example

         -catch-throw -r exception_type
         ^done,bkpt={number="1",type="catchpoint",disp="keep",enabled="y",
           what="exception throw",catch-type="throw",
           thread-groups=["i1"],
           regexp="exception_type",times="0"}
         (gdb)
         -exec-run
         ^running
         (gdb)
         ~"\n"
         ~"Catchpoint 1 (exception thrown), 0x00007ffff7ae00ed
           in __cxa_throw () from /lib64/libstdc++.so.6\n"
         *stopped,bkptno="1",reason="breakpoint-hit",disp="keep",
           frame={addr="0x00007ffff7ae00ed",func="__cxa_throw",
           args=[],from="/lib64/libstdc++.so.6",arch="i386:x86-64"},
           thread-id="1",stopped-threads="all",core="6"
         (gdb)

#### The `-catch-rethrow` Command

##### Synopsis

          -catch-rethrow [ -t ] [ -r regexp]

Stop when a C`++` exception is re-thrown. If regexp is given, then only exceptions whose type matches the regular expression will be caught.

If ``-t`' is given, then the catchpoint is enabled only for one stop, the catchpoint is automatically deleted after the first event is caught.

##### gdb Command

The corresponding gdb commands are ``catch rethrow`' and ``tcatch rethrow`' (see Set Catchpoints).

##### Example

         -catch-rethrow -r exception_type
         ^done,bkpt={number="1",type="catchpoint",disp="keep",enabled="y",
           what="exception rethrow",catch-type="rethrow",
           thread-groups=["i1"],
           regexp="exception_type",times="0"}
         (gdb)
         -exec-run
         ^running
         (gdb)
         ~"\n"
         ~"Catchpoint 1 (exception rethrown), 0x00007ffff7ae00ed
           in __cxa_rethrow () from /lib64/libstdc++.so.6\n"
         *stopped,bkptno="1",reason="breakpoint-hit",disp="keep",
           frame={addr="0x00007ffff7ae00ed",func="__cxa_rethrow",
           args=[],from="/lib64/libstdc++.so.6",arch="i386:x86-64"},
           thread-id="1",stopped-threads="all",core="6"
         (gdb)

#### The `-catch-catch` Command

##### Synopsis

          -catch-catch [ -t ] [ -r regexp]

Stop when the debuggee catches a C`++` exception. If regexp is given, then only exceptions whose type matches the regular expression will be caught.

If ``-t`' is given, then the catchpoint is enabled only for one stop, the catchpoint is automatically deleted after the first event is caught.

##### gdb Command

The corresponding gdb commands are ``catch catch`' and ``tcatch catch`' (see Set Catchpoints).

##### Example

         -catch-catch -r exception_type
         ^done,bkpt={number="1",type="catchpoint",disp="keep",enabled="y",
           what="exception catch",catch-type="catch",
           thread-groups=["i1"],
           regexp="exception_type",times="0"}
         (gdb)
         -exec-run
         ^running
         (gdb)
         ~"\n"
         ~"Catchpoint 1 (exception caught), 0x00007ffff7ae00ed
           in __cxa_begin_catch () from /lib64/libstdc++.so.6\n"
         *stopped,bkptno="1",reason="breakpoint-hit",disp="keep",
           frame={addr="0x00007ffff7ae00ed",func="__cxa_begin_catch",
           args=[],from="/lib64/libstdc++.so.6",arch="i386:x86-64"},
           thread-id="1",stopped-threads="all",core="6"
         (gdb)