diff options
author | Tom de Vries <tdevries@suse.de> | 2019-08-26 19:24:59 +0200 |
---|---|---|
committer | Tom de Vries <tdevries@suse.de> | 2019-08-26 19:24:59 +0200 |
commit | 5c31b35808e467d39d05ffa95428e22bb10fd72d (patch) | |
tree | ec11fcba057c299a14f9711cca8ac5748497561c /gdb/break-catch-throw.c | |
parent | b694989f508a83dd7c1f5d0d08716439d312e1cb (diff) | |
download | gdb-5c31b35808e467d39d05ffa95428e22bb10fd72d.zip gdb-5c31b35808e467d39d05ffa95428e22bb10fd72d.tar.gz gdb-5c31b35808e467d39d05ffa95428e22bb10fd72d.tar.bz2 |
[gdb, c++] Improve error message when using libstdcxx without SDT probes
When using catch catch/rethrow/catch, a libstdcxx with SDT probes is required
for both the regexp argument, and the convenience variable $_exception (
https://sourceware.org/gdb/current/onlinedocs/gdb/Set-Catchpoints.html ).
Currently, when using these features with a libstdcxx without SDT probes, we
get the cryptic error message:
...
not stopped at a C++ exception catchpoint
...
Improve this by instead emitting the more helpful:
...
did not find exception probe (does libstdcxx have SDT probes?)
...
Tested on x86_64-linux.
gdb/ChangeLog:
2019-08-26 Tom de Vries <tdevries@suse.de>
PR c++/24852
* break-catch-throw.c (fetch_probe_arguments): Improve error mesage
when pc_probe.prob == NULL.
gdb/testsuite/ChangeLog:
2019-08-26 Tom de Vries <tdevries@suse.de>
PR c++/24852
* gdb.cp/no-libstdcxx-probe.exp: New test.
Diffstat (limited to 'gdb/break-catch-throw.c')
-rw-r--r-- | gdb/break-catch-throw.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/gdb/break-catch-throw.c b/gdb/break-catch-throw.c index 0677a55..2d91285 100644 --- a/gdb/break-catch-throw.c +++ b/gdb/break-catch-throw.c @@ -106,8 +106,10 @@ fetch_probe_arguments (struct value **arg0, struct value **arg1) unsigned n_args; pc_probe = find_probe_by_pc (pc); - if (pc_probe.prob == NULL - || pc_probe.prob->get_provider () != "libstdcxx" + if (pc_probe.prob == NULL) + error (_("did not find exception probe (does libstdcxx have SDT probes?)")); + + if (pc_probe.prob->get_provider () != "libstdcxx" || (pc_probe.prob->get_name () != "catch" && pc_probe.prob->get_name () != "throw" && pc_probe.prob->get_name () != "rethrow")) |