The following gdb/mi commands can be used to create catchpoints that stop the execution when C++ exceptions are being throw, rethrown, or caught.
-catch-throw Command-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.
The corresponding gdb commands are `catch throw' and `tcatch throw' (see Set Catchpoints).
-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)
-catch-rethrow Command-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.
The corresponding gdb commands are `catch rethrow' and `tcatch rethrow' (see Set Catchpoints).
-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)
-catch-catch Command-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.
The corresponding gdb commands are `catch catch' and `tcatch catch' (see Set Catchpoints).
-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)