From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11225 invoked by alias); 9 Feb 2010 17:05:13 -0000 Received: (qmail 11211 invoked by uid 22791); 9 Feb 2010 17:05:12 -0000 X-SWARE-Spam-Status: No, hits=-6.5 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_HI,SPF_HELO_PASS,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 09 Feb 2010 17:05:02 +0000 Received: from int-mx04.intmail.prod.int.phx2.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.17]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id o19H50pU024831 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Tue, 9 Feb 2010 12:05:00 -0500 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx04.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id o19H50Ew015888; Tue, 9 Feb 2010 12:05:00 -0500 Received: from opsy.redhat.com (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id o19H4xGr020858; Tue, 9 Feb 2010 12:04:59 -0500 Received: by opsy.redhat.com (Postfix, from userid 500) id D663737824A; Tue, 9 Feb 2010 10:04:58 -0700 (MST) From: Tom Tromey To: gdb-patches@sourceware.org Subject: RFA: interactive command to enable parser debugging Reply-To: tromey@redhat.com Date: Tue, 09 Feb 2010 17:05:00 -0000 Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii 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 X-SW-Source: 2010-02/txt/msg00258.txt.bz2 I've been looking at a few possible parser bugs lately, and I wanted to be able to set "yydebug" interactively. This patch adds a "set debug parser" command that can be used to do this. This seems ok to me because we define YYDEBUG in c-exp.y. I did not modify the other parsers to respect this flag. I leave that to the relevant language maintainers. This needs a doc review. Let me know what you think. Barring objection I will commit it once the doc patch is satisfactory. Tom 2010-02-09 Tom Tromey * parser-defs.h (parser_debug): Declare. * parse.c (_initialize_parse): Install "debug parser" set/show command. (parser_debug): New global. (show_parserdebug): New function. * c-exp.y (c_parse): Set yydebug. 2010-02-09 Tom Tromey * gdb.texinfo (Debugging Output): Document set debug parser and show debug parser. diff --git a/gdb/c-exp.y b/gdb/c-exp.y index 459177a..095ec40 100644 --- a/gdb/c-exp.y +++ b/gdb/c-exp.y @@ -2555,6 +2555,9 @@ c_parse (void) gdb_assert (! macro_original_text); make_cleanup (scan_macro_cleanup, 0); + make_cleanup_restore_integer (&yydebug); + yydebug = parser_debug; + /* Initialize some state used by the lexer. */ last_was_structop = 0; saw_name_at_eof = 0; diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 2145f2b..c645fa2 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -18848,6 +18848,11 @@ is off. @item show debug overload Displays the current state of displaying @value{GDBN} C@t{++} overload debugging info. +@item show debug parser +Show the current state of expression parser debugging. +@item set debug parser +Turns on or off the display of expression parser debugging output. +The default is off. @cindex packets, reporting on stdout @cindex serial connections, debugging @cindex debug remote protocol diff --git a/gdb/parse.c b/gdb/parse.c index 1c73d75..d54053b 100644 --- a/gdb/parse.c +++ b/gdb/parse.c @@ -109,6 +109,18 @@ show_expressiondebug (struct ui_file *file, int from_tty, fprintf_filtered (file, _("Expression debugging is %s.\n"), value); } + +/* Non-zero if an expression parser should set yydebug. */ +int parser_debug; + +static void +show_parserdebug (struct ui_file *file, int from_tty, + struct cmd_list_element *c, const char *value) +{ + fprintf_filtered (file, _("Parser debugging is %s.\n"), value); +} + + static void free_funcalls (void *ignore); static int prefixify_expression (struct expression *); @@ -1388,4 +1400,12 @@ When non-zero, the internal representation of expressions will be printed."), NULL, show_expressiondebug, &setdebuglist, &showdebuglist); + add_setshow_boolean_cmd ("parser", class_maintenance, + &parser_debug, _("\ +Set parser debugging."), _("\ +Show parser debugging."), _("\ +When non-zero, expression parser tracing will be enabled."), + NULL, + show_parserdebug, + &setdebuglist, &showdebuglist); } diff --git a/gdb/parser-defs.h b/gdb/parser-defs.h index 6fcf7ae..c4eb1a0 100644 --- a/gdb/parser-defs.h +++ b/gdb/parser-defs.h @@ -29,6 +29,8 @@ struct block; +extern int parser_debug; + extern struct expression *expout; extern int expout_size; extern int expout_ptr;