This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: Add a third mode to "breakpoints always-inserted", and make it the default
- From: Pedro Alves <pedro at codesourcery dot com>
- To: gdb-patches at sourceware dot org, Eli Zaretskii <eliz at gnu dot org>
- Date: Tue, 12 Aug 2008 21:07:19 +0100
- Subject: Re: Add a third mode to "breakpoints always-inserted", and make it the default
- References: <200808120034.25338.pedro@codesourcery.com> <ur68ugksf.fsf@gnu.org>
Thanks Eli,
On Tuesday 12 August 2008 19:17:36, Eli Zaretskii wrote:
> > From: Pedro Alves <pedro@codesourcery.com>
> > Date: Tue, 12 Aug 2008 00:34:24 +0100
> >
> > So, this patch changes the "set breakpoints always-inserted" setting to
> > be a three-state. on and off, the same as before, and a new mode,
> > "follow-non-stop".
>
> How about calling this state "auto"?
I like it.
> > In the latter mode, GDB will behave as "on", if
> > we're in non-stop mode, and as "off" if we're in all-stop mode.
>
> I think _behave_ as "on" is not a good idea. I suggest that it
> actually _set_ the option "on". That way, code elsewhere will need
> only to look at a single option, and won't need to know that if the
> value is follow-non-stop, it needs to check another flag.
All the common code already goes through this predicate:
+int
+breakpoints_always_inserted_mode (void)
+{
+ return (always_inserted_mode == always_inserted_on
+ || (always_inserted_mode == always_inserted_follow_non_stop
+ && non_stop));
+}
-int breakpoints_always_inserted_mode (void)
-{
- return always_inserted_mode;
-}
-
Note that I didn't have to touch any of infrun.c, or breakpoint
management functions in breakpoint.c, where the predicate is checked.
If I kept it as an boolean, I'd have to instead change the "set non-stop"
command implementation, which means I'd have to export a setter for the
internal breakpoint.c variable. Either way, one setting has to know
about the other. This way seemed more centralised.
In any case, I can't seem to come up with a sentence that
describes the auto behaviour without using "behaves as". If you can
suggest any, I'd appreciate it.
> > +This is the default mode. If gdb is controlling the inferior in
> > +non-stop mode (@pxref{Non-Stop Mode}), gdb behaves as if
> > +always-inserted mode is on. If gdb is controlling the inferior in
> > +all-stop mode, gdb behaves as if always-inserted mode is off.
>
> We don't use a literal "gdb" in the manual, we use "@value{GDBN}".
Ooops. Fixed.
>
> Also, it would be helpful to have an index entry here, something like
>
> @cindex non-stop mode, and @code{breakpoint always-inserted}
Done, and done, I think.
--
Pedro Alves
gdb/
2008-08-12 Pedro Alves <pedro@codesourcery.com>
* breakpoint.c (always_inserted_auto, always_inserted_on)
(always_inserted_off, always_inserted_enums): New.
(always_inserted_mode): Change type to char* and point to
always_inserted_auto.
(show_always_inserted_mode): In auto mode, also show the current
effect of the option.
(breakpoints_always_inserted_mode): Adjust for the new auto mode.
(_initialize_breakpoint): Make the "set breakpoints
always-inserted" command an enum command. Extend help to describe
the auto mode.
gdb/doc/
2008-08-12 Pedro Alves <pedro@codesourcery.com>
* gdb.texinfo (breakpoint always-inserted) Describe the auto mode
setting, and make it the default.
(Non-Stop Mode): Remove "set breakpoints always-inserted 1" from
non-stop script example.
---
gdb/breakpoint.c | 59 +++++++++++++++++++++++++++++++++++-----------------
gdb/doc/gdb.texinfo | 17 +++++++++-----
2 files changed, 51 insertions(+), 25 deletions(-)
Index: src/gdb/breakpoint.c
===================================================================
--- src.orig/gdb/breakpoint.c 2008-08-12 02:44:25.000000000 +0100
+++ src/gdb/breakpoint.c 2008-08-12 20:35:20.000000000 +0100
@@ -249,18 +249,40 @@ Automatic usage of hardware breakpoints
value);
}
-/* If 1, gdb will keep breakpoints inserted even as inferior is stopped,
- and immediately insert any new breakpoints. If 0, gdb will insert
- breakpoints into inferior only when resuming it, and will remove
- breakpoints upon stop. */
-static int always_inserted_mode = 0;
-static void
+/* If on, gdb will keep breakpoints inserted even as inferior is
+ stopped, and immediately insert any new breakpoints. If off, gdb
+ will insert breakpoints into inferior only when resuming it, and
+ will remove breakpoints upon stop. If auto, GDB will behave as ON
+ if in non-stop mode, and as OFF if all-stop mode.*/
+
+static const char always_inserted_auto[] = "auto";
+static const char always_inserted_on[] = "on";
+static const char always_inserted_off[] = "off";
+static const char *always_inserted_enums[] = {
+ always_inserted_auto,
+ always_inserted_off,
+ always_inserted_on,
+ NULL
+};
+static const char *always_inserted_mode = always_inserted_auto;
+static void
show_always_inserted_mode (struct ui_file *file, int from_tty,
- struct cmd_list_element *c, const char *value)
+ struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Always inserted breakpoint mode is %s.\n"), value);
+ if (always_inserted_mode == always_inserted_auto)
+ fprintf_filtered (file,
+ _("Always inserted breakpoint mode is %s (currently %s).\n"),
+ value, non_stop ? "on" : "off");
+ else
+ fprintf_filtered (file, _("Always inserted breakpoint mode is %s.\n"), value);
}
+int
+breakpoints_always_inserted_mode (void)
+{
+ return (always_inserted_mode == always_inserted_on
+ || (always_inserted_mode == always_inserted_auto && non_stop));
+}
void _initialize_breakpoint (void);
@@ -8197,11 +8219,6 @@ single_step_breakpoint_inserted_here_p (
return 0;
}
-int breakpoints_always_inserted_mode (void)
-{
- return always_inserted_mode;
-}
-
/* This help string is used for the break, hbreak, tbreak and thbreak commands.
It is defined as a macro to prevent duplication.
@@ -8604,14 +8621,18 @@ a warning will be emitted for such break
&breakpoint_set_cmdlist,
&breakpoint_show_cmdlist);
- add_setshow_boolean_cmd ("always-inserted", class_support,
- &always_inserted_mode, _("\
+ add_setshow_enum_cmd ("always-inserted", class_support,
+ always_inserted_enums, &always_inserted_mode, _("\
Set mode for inserting breakpoints."), _("\
Show mode for inserting breakpoints."), _("\
-When this mode is off (which is the default), breakpoints are inserted in\n\
-inferior when it is resumed, and removed when execution stops. When this\n\
-mode is on, breakpoints are inserted immediately and removed only when\n\
-the user deletes the breakpoint."),
+When this mode is off, breakpoints are inserted in inferior when it is\n\
+resumed, and removed when execution stops. When this mode is on,\n\
+breakpoints are inserted immediately and removed only when the user\n\
+deletes the breakpoint. When this mode is auto (which is the default),\n\
+the behaviour depends on the non-stop setting (see help set non-stop).\n\
+In this case, if gdb is controlling the inferior in non-stop mode, gdb\n\
+behaves as if always-inserted mode is on; if gdb is controlling the\n\
+inferior in all-stop mode, gdb behaves as if always-inserted mode is off."),
NULL,
&show_always_inserted_mode,
&breakpoint_set_cmdlist,
Index: src/gdb/doc/gdb.texinfo
===================================================================
--- src.orig/gdb/doc/gdb.texinfo 2008-08-12 02:44:56.000000000 +0100
+++ src/gdb/doc/gdb.texinfo 2008-08-12 21:04:43.000000000 +0100
@@ -3313,15 +3313,23 @@ This behavior can be controlled with the
@kindex show breakpoint always-inserted
@table @code
@item set breakpoint always-inserted off
-This is the default behaviour. All breakpoints, including newly added
-by the user, are inserted in the target only when the target is
-resumed. All breakpoints are removed from the target when it stops.
+All breakpoints, including newly added by the user, are inserted in
+the target only when the target is resumed. All breakpoints are
+removed from the target when it stops.
@item set breakpoint always-inserted on
Causes all breakpoints to be inserted in the target at all times. If
the user adds a new breakpoint, or changes an existing breakpoint, the
breakpoints in the target are updated immediately. A breakpoint is
removed from the target only when breakpoint itself is removed.
+
+@cindex non-stop mode
+@item set breakpoint always-inserted auto
+This is the default mode. If @value{GDBN} is controlling the inferior
+in non-stop mode (@pxref{Non-Stop Mode}), gdb behaves as if
+@code{breakpoint always-inserted} mode is on. If @value{GDBN} is
+controlling the inferior in all-stop mode, @value{GDBN} behaves as if
+@code{breakpoint always-inserted} mode is off.
@end table
@cindex negative breakpoint numbers
@@ -4571,9 +4579,6 @@ or attach to your program:
# For target remote, use remote-async instead of linux-async.
maint set linux-async 1
-# With non-stop, breakpoints have to be always inserted.
-set breakpoint always-inserted 1
-
# If using the CLI, pagination breaks non-stop.
set pagination off