From: Pedro Alves <pedro@codesourcery.com>
To: gdb-patches@sourceware.org
Cc: Michael Snyder <msnyder@vmware.com>, Eli Zaretskii <eliz@gnu.org>,
"tromey@redhat.com" <tromey@redhat.com>,
"guillaume.leconte@gmail.com" <guillaume.leconte@gmail.com>
Subject: [patch+docs] make 'disable|enable display' also accept ranges (Re: [patch] delete a range of display numbers)
Date: Mon, 14 Mar 2011 21:24:00 -0000 [thread overview]
Message-ID: <201103142116.14409.pedro@codesourcery.com> (raw)
In-Reply-To: <201102181756.52921.pedro@codesourcery.com>
I finally took a bit to come back to this:
On Friday 18 February 2011 17:52:02, Pedro Alves wrote:
> "disable display" and "enable display" should get the
> same treatment to accept ranges.
... and that's what the code patch does.
The docs patch tweaks the commands' ("undisplay" too)
docs to mention what they now accept. Does it look okay?
Pedro Alves
2011-03-14 Pedro Alves <pedro@codesourcery.com>
gdb/
* printcmd.c (ALL_DISPLAYS_SAFE): New.
(map_display_numbers): New.
(do_delete_display): New.
(undisplay_command): Use map_display_numbers.
(do_enable_disable_display): New.
(enable_disable_display_command): New function.
(enable_display): Delete.
(enable_display_command): New.
(disable_display_command): Reimplement.
(_initialize_printcmd): Adjust "enable display" command to use
`enable_display_command' as callback.
gdb/doc/
* gdb.texinfo (Auto Display) <undisplay, enable display, disable
display>: Explain that the commands accept number ranges.
---
gdb/doc/gdb.texinfo | 16 ++++-
gdb/printcmd.c | 150 +++++++++++++++++++++++++++-------------------------
2 files changed, 94 insertions(+), 72 deletions(-)
Index: src/gdb/printcmd.c
===================================================================
--- src.orig/gdb/printcmd.c 2011-03-14 12:40:01.000000000 +0000
+++ src/gdb/printcmd.c 2011-03-14 21:12:20.148353561 +0000
@@ -168,11 +168,18 @@ static struct display *display_chain;
static int display_number;
-/* Walk the following statement or block through all displays. */
+/* Walk the following statement or block through all displays.
+ ALL_DISPLAYS_SAFE does so even if the statement deletes the current
+ display. */
#define ALL_DISPLAYS(B) \
for (B = display_chain; B; B = B->next)
+#define ALL_DISPLAYS_SAFE(B,TMP) \
+ for (B = display_chain; \
+ B ? (TMP = B->next, 1): 0; \
+ B = TMP)
+
/* Prototypes for exported functions. */
void output_command (char *, int);
@@ -1583,24 +1590,24 @@ delete_display (struct display *display)
free_display (display);
}
-/* Delete some values from the auto-display chain.
- Specify the element numbers. */
+/* Call FUNCTION on each of the displays whose numbers are given in
+ ARGS. DATA is passed unmodified to FUNCTION. */
static void
-undisplay_command (char *args, int from_tty)
+map_display_numbers (char *args,
+ void (*function) (struct display *,
+ void *),
+ void *data)
{
- int num;
struct get_number_or_range_state state;
+ struct display *b, *tmp;
+ int num;
- if (args == 0)
- {
- if (query (_("Delete all auto-display expressions? ")))
- clear_displays ();
- dont_repeat ();
- return;
- }
+ if (args == NULL)
+ error_no_arg (_("one or more display numbers"));
init_number_or_range (&state, args);
+
while (!state.finished)
{
char *p = state.string;
@@ -1610,17 +1617,44 @@ undisplay_command (char *args, int from_
warning (_("bad display number at or near '%s'"), p);
else
{
- struct display *d;
+ struct display *d, *tmp;
- ALL_DISPLAYS (d)
+ ALL_DISPLAYS_SAFE (d, tmp)
if (d->number == num)
break;
if (d == NULL)
printf_unfiltered (_("No display number %d.\n"), num);
else
- delete_display (d);
+ function (d, data);
}
}
+}
+
+/* Callback for map_display_numbers, that deletes a display. */
+
+static void
+do_delete_display (struct display *d, void *data)
+{
+ delete_display (d);
+}
+
+/* "undisplay" command. */
+
+static void
+undisplay_command (char *args, int from_tty)
+{
+ int num;
+ struct get_number_or_range_state state;
+
+ if (args == NULL)
+ {
+ if (query (_("Delete all auto-display expressions? ")))
+ clear_displays ();
+ dont_repeat ();
+ return;
+ }
+
+ map_display_numbers (args, do_delete_display, NULL);
dont_repeat ();
}
@@ -1823,71 +1857,47 @@ Num Enb Expression\n"));
}
}
+/* Callback fo map_display_numbers, that enables or disable the passed
+ in display D. */
+
static void
-enable_display (char *args, int from_tty)
+do_enable_disable_display (struct display *d, void *data)
{
- char *p = args;
- char *p1;
- int num;
- struct display *d;
+ d->enabled_p = *(int *) data;
+}
+
+/* Implamentation of both the "disable display" and "enable display"
+ commands. ENABLE decides what to do. */
- if (p == 0)
+static void
+enable_disable_display_command (char *args, int from_tty, int enable)
+{
+ if (args == NULL)
{
- for (d = display_chain; d; d = d->next)
- d->enabled_p = 1;
+ struct display *d;
+
+ ALL_DISPLAYS (d)
+ d->enabled_p = enable;
+ return;
}
- else
- while (*p)
- {
- p1 = p;
- while (*p1 >= '0' && *p1 <= '9')
- p1++;
- if (*p1 && *p1 != ' ' && *p1 != '\t')
- error (_("Arguments must be display numbers."));
-
- num = atoi (p);
-
- for (d = display_chain; d; d = d->next)
- if (d->number == num)
- {
- d->enabled_p = 1;
- goto win;
- }
- printf_unfiltered (_("No display number %d.\n"), num);
- win:
- p = p1;
- while (*p == ' ' || *p == '\t')
- p++;
- }
+
+ map_display_numbers (args, do_enable_disable_display, &enable);
}
+/* The "enable display" command. */
+
static void
-disable_display_command (char *args, int from_tty)
+enable_display_command (char *args, int from_tty)
{
- char *p = args;
- char *p1;
- struct display *d;
-
- if (p == 0)
- {
- for (d = display_chain; d; d = d->next)
- d->enabled_p = 0;
- }
- else
- while (*p)
- {
- p1 = p;
- while (*p1 >= '0' && *p1 <= '9')
- p1++;
- if (*p1 && *p1 != ' ' && *p1 != '\t')
- error (_("Arguments must be display numbers."));
+ enable_disable_display_command (args, from_tty, 1);
+}
- disable_display (atoi (p));
+/* The "disable display" command. */
- p = p1;
- while (*p == ' ' || *p == '\t')
- p++;
- }
+static void
+disable_display_command (char *args, int from_tty)
+{
+ enable_disable_display_command (args, from_tty, 0);
}
/* display_chain items point to blocks and expressions. Some expressions in
@@ -2749,7 +2759,7 @@ and examining is done as in the \"x\" co
With no argument, display all currently requested auto-display expressions.\n\
Use \"undisplay\" to cancel display requests previously made."));
- add_cmd ("display", class_vars, enable_display, _("\
+ add_cmd ("display", class_vars, enable_display_command, _("\
Enable some expressions to be displayed when program stops.\n\
Arguments are the code numbers of the expressions to resume displaying.\n\
No argument means enable all automatic-display expressions.\n\
Index: src/gdb/doc/gdb.texinfo
===================================================================
--- src.orig/gdb/doc/gdb.texinfo 2011-03-14 20:47:04.000000000 +0000
+++ src/gdb/doc/gdb.texinfo 2011-03-14 20:47:26.598353561 +0000
@@ -7647,7 +7647,11 @@ is a common name for the program counter
@kindex undisplay
@item undisplay @var{dnums}@dots{}
@itemx delete display @var{dnums}@dots{}
-Remove item numbers @var{dnums} from the list of expressions to display.
+Remove items from the list of expressions to display. Specify the
+numbers of the displays that you want affected with the command
+argument @var{dnums}. It can be a single display number, one of the
+numbers shown in the first field of the @samp{info display} display;
+or it could be a range of display numbers, as in @code{2-4}.
@code{undisplay} does not repeat if you press @key{RET} after using it.
(Otherwise you would just get the error @samp{No display number @dots{}}.)
@@ -7656,12 +7660,20 @@ Remove item numbers @var{dnums} from the
@item disable display @var{dnums}@dots{}
Disable the display of item numbers @var{dnums}. A disabled display
item is not printed automatically, but is not forgotten. It may be
-enabled again later.
+enabled again later. Specify the numbers of the displays that you
+want affected with the command argument @var{dnums}. It can be a
+single display number, one of the numbers shown in the first field of
+the @samp{info display} display; or it could be a range of display
+numbers, as in @code{2-4}.
@kindex enable display
@item enable display @var{dnums}@dots{}
Enable display of item numbers @var{dnums}. It becomes effective once
again in auto display of its expression, until you specify otherwise.
+Specify the numbers of the displays that you want affected with the
+command argument @var{dnums}. It can be a single display number, one
+of the numbers shown in the first field of the @samp{info display}
+display; or it could be a range of display numbers, as in @code{2-4}.
@item display
Display the current values of the expressions on the list, just as is
next prev parent reply other threads:[~2011-03-14 21:16 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-02-18 9:47 [patch] delete a range of display numbers Guillaume Leconte
2011-02-18 10:30 ` Guillaume Leconte
2011-02-18 11:08 ` Eli Zaretskii
2011-02-18 11:48 ` Guillaume Leconte
2011-02-18 12:17 ` Pedro Alves
2011-02-18 14:41 ` Guillaume Leconte
2011-02-18 15:14 ` Tom Tromey
2011-02-18 15:58 ` Pedro Alves
2011-02-18 16:48 ` Tom Tromey
2011-02-18 16:57 ` Pedro Alves
2011-02-18 17:41 ` Eli Zaretskii
2011-02-18 17:54 ` Pedro Alves
2011-02-18 17:54 ` Michael Snyder
2011-02-18 18:06 ` Pedro Alves
2011-03-14 21:24 ` Pedro Alves [this message]
2011-03-14 21:34 ` [patch+docs] make 'disable|enable display' also accept ranges (Re: [patch] delete a range of display numbers) Eli Zaretskii
2011-03-15 14:43 ` Pedro Alves
2011-02-18 18:17 ` [patch] delete a range of display numbers Eli Zaretskii
2011-02-18 17:52 ` Michael Snyder
2011-02-18 17:57 ` Pedro Alves
2011-02-18 17:44 ` Michael Snyder
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=201103142116.14409.pedro@codesourcery.com \
--to=pedro@codesourcery.com \
--cc=eliz@gnu.org \
--cc=gdb-patches@sourceware.org \
--cc=guillaume.leconte@gmail.com \
--cc=msnyder@vmware.com \
--cc=tromey@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox