From patchwork Sun Jun 16 15:29:56 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Burgess X-Patchwork-Id: 33148 Received: (qmail 19437 invoked by alias); 16 Jun 2019 15:30:02 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 19404 invoked by uid 89); 16 Jun 2019 15:30:01 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-25.7 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.1 spammy= X-HELO: mail-wm1-f47.google.com Received: from mail-wm1-f47.google.com (HELO mail-wm1-f47.google.com) (209.85.128.47) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sun, 16 Jun 2019 15:30:00 +0000 Received: by mail-wm1-f47.google.com with SMTP id c6so6571114wml.0 for ; Sun, 16 Jun 2019 08:29:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=862Ro9kKTKi09jUE01+lnmu+eTONnNTi8TDQQYWPqOQ=; b=NdDLq3KqFuZDwSK6rJoFWNzItq/I0YK8PkPtl//8SHL36S7e4Eqn9GCLTzSMQVVFWV k9YJfQrGgBbKHeGsri+dH0z5ioOAxxixyns2ulnQ+jHKaNSh2JwKBAQv2+MGMVNcGeO6 IXp6o36vHJ34Y2N+0GkOfiPXqvse6TChnVcPGZSt1lOqXJQh2LHLvGbdLVpwwcthhO/v X48r0qo0NMFtHAOdFMVEhfBYj7Mz3+68Qz7WWFghSTXlzOg7McJPD3wWMppdKcbd/c9D XljxMmlxWSq/1hnKFaR3UgU97KKwrVtUDBypXjaRRB5hv1NOkxNJ+u8glC2XmkRi3+fD hBWg== Return-Path: Received: from localhost (host86-180-62-212.range86-180.btcentralplus.com. [86.180.62.212]) by smtp.gmail.com with ESMTPSA id h21sm6873683wmb.47.2019.06.16.08.29.57 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sun, 16 Jun 2019 08:29:57 -0700 (PDT) Date: Sun, 16 Jun 2019 16:29:56 +0100 From: Andrew Burgess To: Tom de Vries Cc: gdb-patches@sourceware.org Subject: Re: [PATCHv2] gdb/mi: New commands to catch C++ exceptions Message-ID: <20190616152956.GC23204@embecosm.com> References: <20190509000500.20536-1-andrew.burgess@embecosm.com> <20190511234646.4992-1-andrew.burgess@embecosm.com> <20190615223418.GA23204@embecosm.com> <638413ac-9669-6266-34e5-251678dd3162@suse.de> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <638413ac-9669-6266-34e5-251678dd3162@suse.de> X-Fortune: Computer Science is merely the post-Turing decline in formal systems theory. X-Editor: GNU Emacs [ http://www.gnu.org/software/emacs ] User-Agent: Mutt/1.9.2 (2017-12-15) X-IsSubscribed: yes * Tom de Vries [2019-06-16 15:14:06 +0200]: > On 16-06-19 00:34, Andrew Burgess wrote: > > * Andrew Burgess [2019-05-12 00:46:46 +0100]: > > > >> Eli, > >> > >> This iteration includes updated documentation that fixes almost all of > >> the issues you raised. The only thing I haven't done is collapse all > >> of the command sub-sections into a single sub-section. I looked > >> through most of the existing MI commands and they all seem to be one > >> command per sub-section, so I wasn't entirely sure how to layout a > >> merged entry, nor if a merged entry was inline with the style for MI > >> commands. > >> > >> --- > >> > >> I have also tweaked the code a little in this version, the changes > >> around how a catchpoint is reported when it is initially setup has > >> changed, the output is not more inline with other breakpoints. See > >> the changes in print_mention_exception_catchpoint, and the new > >> scoped_restore restore_breakpoint_reporting in > >> mi_cmd_catch_exception_event. Otherwise the code is unchanged. > >> > >> Thanks, > >> Andrew > >> > >> --- > >> > >> Adds some MI commands to catch C++ exceptions. The new commands are > >> -catch-throw, -catch-rethrow, and -catch-catch, these all correspond > >> to the CLI commands 'catch throw', 'catch rethrow', and 'catch catch'. > >> > >> Each MI command takes two optional arguments, '-t' has the effect of > >> calling 'tcatch' instead of 'catch', for example: > >> > >> (gdb) > >> -catch-throw -t > >> > >> Is the same as: > >> > >> (gdb) tcatch throw > >> > >> There is also a '-r REGEXP' argument that can supply a regexp to match > >> against the exception type, so: > >> > >> (gdb) > >> -catch-catch -r PATTERN > >> > >> Is the same as: > >> > >> (gdb) catch catch PATTERN > >> > >> The change in print_mention_exception_catchpoint might seem a little > >> strange; changing the output from using ui_out::field_int and > >> ui_out::text to using ui_out::message. > >> > >> The print_mention_exception_catchpoint is used as the 'print_mention' > >> method for the exception catchpoint breakpoint object. Most of the > >> other 'print_mention' methods (see breakpoint.c) use either > >> printf_filtered, of ui_out::message. Using field_int was causing an > >> unexpected field to be added to the MI output. Here's the output > >> without the change in print_mention_exception_catchpoint: > >> > >> (gdb) > >> -catch-throw > >> ^done,bkptno="1",bkpt={number="1",type="breakpoint",disp="keep", > >> enabled="y",addr="0x00000000004006c0", > >> what="exception throw",catch-type="throw", > >> thread-groups=["i1"],times="0"} > >> > >> Notice the breakpoint number appears in both the 'bkptno' field, and > >> the 'number' field within the 'bkpt' tuple. Here's the output with > >> the change in print_mention_exception_catchpoint: > >> > >> (gdb) > >> -catch-throw > >> ^done,bkpt={number="1",type="breakpoint",disp="keep", > >> enabled="y",addr="0x00000000004006c0", > >> what="exception throw",catch-type="throw", > >> thread-groups=["i1"],times="0"} > >> > >> gdb/ChangeLog: > >> > >> * NEWS: Mention new MI commands. > >> * break-catch-throw.c (enum exception_event_kind): Move to > >> breakpoint.h. > >> (print_mention_exception_catchpoint): Output text as a single > >> message. > >> (catch_exception_command_1): Rename to... > >> (catch_exception_event): ...this, make non-static, update header > >> command, and change some parameter types. > >> (catch_catch_command): Update for changes to > >> catch_exception_command_1. > >> (catch_throw_command): Likewise. > >> (catch_rethrow_command): Likewise. > >> * breakpoint.c (enum exception_event_kind): Delete. > >> * breakpoint.h (enum exception_event_kind): Moved here from > >> break-catch-throw.c. > >> (catch_exception_event): Declare. > >> * mi/mi-cmd-catch.c (mi_cmd_catch_exception_event): New function. > >> (mi_cmd_catch_throw): New function. > >> (mi_cmd_catch_rethrow): New function. > >> (mi_cmd_catch_catch): New function. > >> * mi/mi-cmds.c (mi_cmds): Add 'catch-throw', 'catch-rethrow', and > >> 'catch-catch' entries. > >> * mi/mi-cmds.h (mi_cmd_catch_throw): Declare. > >> (mi_cmd_catch_rethrow): Declare. > >> (mi_cmd_catch_catch): Declare. > >> > >> gdb/doc/ChangeLog: > >> > >> * gdb.texinfo (GDB/MI Catchpoint Commands): Add menu entry to new > >> node. > >> (C++ Exception GDB/MI Catchpoint Commands): New node to describe > >> new MI commands. > >> > >> gdb/testsuite/ChangeLog: > >> > >> * gdb.mi/mi-catch-cpp-exceptions.cc: New file. > >> * gdb.mi/mi-catch-cpp-exceptions.exp: New file. > >> * lib/mi-support.exp (mi_expect_stop): Handle 'exception-caught' > >> as a stop reason. > > > > I've now pushed this patch with the doc fixes that Eli suggested. > > > > I've filed PR24686 - "FAIL: gdb.mi/mi-catch-cpp-exceptions.exp: all with > invalid regexp: run until breakpoint in main (timeout)" Thanks for reporting this. I have pushed the patch below which I believe should change the FAIL you are seeing into a KFAIL. Let me know if this helps. Thanks, Andrew --- commit 93cb9841d68263174a600dc70af742a8e2eabfc6 Author: Andrew Burgess Date: Sun Jun 16 16:17:59 2019 +0100 gdb/testsuite: Improve detection of bug gdb/24541 In bug gdb/24686 a testsuite failure was reported, this failure was actually just another instance of bug gdb/24541, however, due to the non-deterministic nature of bug gdb/24541 the testsuite pattern that was intended to catch this bug failed. This commit adds a second pattern to help detect gdb/24541, which should change the FAIL reported in gdb/24686 into a KFAIL. gdb/testsuite/ChangeLog: PR gdb/24686 * gdb.mi/mi-catch-cpp-exceptions.exp: Add an extra pattern to improve detection of bug gdb/24541. diff --git a/gdb/testsuite/gdb.mi/mi-catch-cpp-exceptions.exp b/gdb/testsuite/gdb.mi/mi-catch-cpp-exceptions.exp index b5dfbe68c1a..fa5b11e3e58 100644 --- a/gdb/testsuite/gdb.mi/mi-catch-cpp-exceptions.exp +++ b/gdb/testsuite/gdb.mi/mi-catch-cpp-exceptions.exp @@ -141,6 +141,9 @@ with_test_prefix "all with invalid regexp" { -re "could not find minimal symbol for typeinfo address.*$mi_gdb_prompt$" { kfail "gdb/24541" "${testname}" } + -re "\\*stopped,bkptno=\"$decimal\",reason=\"breakpoint-hit\",disp=\"keep\".*func=\"__cxa_throw\".*$mi_gdb_prompt$" { + kfail "gdb/24541" "${testname}" + } -re "\\*stopped,reason=\"breakpoint-hit\".*func=\"main\".*line=\"${main_lineno}\".*$mi_gdb_prompt$" { pass "${testname}" }