From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 85361 invoked by alias); 26 Aug 2019 14:11:13 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 85353 invoked by uid 89); 26 Aug 2019 14:11:13 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-15.8 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_SHORT,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.1 spammy= X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 26 Aug 2019 14:11:11 +0000 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 63DC63082E55; Mon, 26 Aug 2019 14:11:10 +0000 (UTC) Received: from localhost (unused-10-15-17-196.yyz.redhat.com [10.15.17.196]) by smtp.corp.redhat.com (Postfix) with ESMTP id 349B4608AB; Mon, 26 Aug 2019 14:11:10 +0000 (UTC) From: Sergio Durigan Junior To: Tom de Vries Cc: gdb-patches@sourceware.org Subject: Re: [PATCH][gdb, c++] Improve error message when using libstdcxx without SDT probes References: <20190725210447.GA26123@delia> Date: Mon, 26 Aug 2019 14:11:00 -0000 In-Reply-To: <20190725210447.GA26123@delia> (Tom de Vries's message of "Thu, 25 Jul 2019 23:04:49 +0200") Message-ID: <87h86410g2.fsf@redhat.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.2 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-IsSubscribed: yes X-SW-Source: 2019-08/txt/msg00592.txt.bz2 On Thursday, July 25 2019, Tom de Vries wrote: > Hi, > > 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. > > OK for trunk? Thanks for the patch. > Thanks, > - Tom > > [gdb, c++] Improve error message when using libstdcxx without SDT probes > > gdb/ChangeLog: > > 2019-07-25 Tom de Vries > > PR c++/24852 > * break-catch-throw.c (fetch_probe_arguments): Improve error mesage > when pc_probe.prob == NULL. > > gdb/testsuite/ChangeLog: > > 2019-07-25 Tom de Vries > > PR c++/24852 > * gdb.cp/no-libstdcxx-probe.exp: New test. > > --- > gdb/break-catch-throw.c | 6 ++- > gdb/testsuite/gdb.cp/no-libstdcxx-probe.exp | 58 +++++++++++++++++++++++++++++ > 2 files changed, 62 insertions(+), 2 deletions(-) > > diff --git a/gdb/break-catch-throw.c b/gdb/break-catch-throw.c > index 0677a55ee5..2d91285312 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/gdb.cp/no-libstdcxx-probe.exp b/gdb/testsuite/gdb.cp/no-libstdcxx-probe.exp > new file mode 100644 > index 0000000000..4c1a706ae0 > --- /dev/null > +++ b/gdb/testsuite/gdb.cp/no-libstdcxx-probe.exp > @@ -0,0 +1,58 @@ > +# 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 . > + > +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 > +} > + > +set libstdcxx_probe_tests_supported [skip_libstdcxx_probe_tests] Not your fault, but this reversed logic (skip_libstdcxx_probe_tests returns 0 if the tests should be skipped) is kinda confusing. > + > +if { $libstdcxx_probe_tests_supported == 1 } { > + untested "Have libstdc++ stap probe" > + return -1 > +} > + > +proc do_continue_to_catchpoint {name} { > + global gdb_prompt > + > + gdb_test_multiple "continue" $name { > + -re "Continuing.*Catchpoint \[0-9\].*\r\n$gdb_prompt $" { You can use $decimal instead of \[0-9\] if you want. > + pass $name > + } > + } > +} > + > +proc do_exceptprint_tests {prefix output} { > + with_test_prefix $prefix { > + do_continue_to_catchpoint "continue to throw" > + gdb_test "print \$_exception" \ > + "did not find exception probe \\(does libstdcxx have SDT probes\\?\\).*" > + } > +} You don't seem to use $output here. > + > +gdb_test "catch throw" "Catchpoint \[0-9\]+ \\(throw\\)" \ > + "catch throw" $decimal if you want. > + > +do_exceptprint_tests string "$hex \"hi bob\"" The patch looks good to me. Thanks for doing this. -- Sergio GPG key ID: 237A 54B1 0287 28BF 00EF 31F4 D0EB 7628 65FC 5E36 Please send encrypted e-mail if possible http://sergiodj.net/