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)