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 | |
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.
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/break-catch-throw.c | 6 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/testsuite/gdb.cp/no-libstdcxx-probe.exp | 41 |
4 files changed, 56 insertions, 2 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index d4b1e53..f171031 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +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. + 2019-08-25 Simon Marchi <simon.marchi@efficios.com> * dwarf2read.c (dw2_debug_names_iterator::next): Rename local 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")) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index c41b498..3117fe7 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2019-08-26 Tom de Vries <tdevries@suse.de> + PR c++/24852 + * gdb.cp/no-libstdcxx-probe.exp: New test. + +2019-08-26 Tom de Vries <tdevries@suse.de> + * lib/gdb.exp (skip_libstdcxx_probe_tests_prompt): Return 1 if probe * tests need to be skipped. * gdb.cp/exceptprint.exp: Update call to skip_libstdcxx_probe_tests. diff --git a/gdb/testsuite/gdb.cp/no-libstdcxx-probe.exp b/gdb/testsuite/gdb.cp/no-libstdcxx-probe.exp new file mode 100644 index 0000000..79826ea --- /dev/null +++ b/gdb/testsuite/gdb.cp/no-libstdcxx-probe.exp @@ -0,0 +1,41 @@ +# Copyright 2019 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +standard_testfile exceptprint.cc + +if {[skip_cplus_tests]} { + return -1 +} + +if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug c++}]} { + return -1 +} + +if {![runto_main]} { + return -1 +} + +if { [skip_libstdcxx_probe_tests] == 0 } { + untested "Have libstdc++ stap probe" + return -1 +} + +gdb_test "catch throw" "Catchpoint $decimal \\(throw\\)" \ + "catch throw" + +gdb_test "continue" "Continuing.*Catchpoint $decimal.*" + +gdb_test "print \$_exception" \ + "did not find exception probe \\(does libstdcxx have SDT probes\\?\\).*" |