From: Pedro Alves <pedro@codesourcery.com>
To: gdb-patches@sourceware.org
Subject: Add a third mode to "breakpoints always-inserted", and make it the default
Date: Mon, 11 Aug 2008 23:34:00 -0000 [thread overview]
Message-ID: <200808120034.25338.pedro@codesourcery.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 1554 bytes --]
Non-stop mode requires that breakpoints always be inserted
in the inferior. We currently set that with "set breakpoints always-inserted"
prior to switching to non-stop mode with "set non-stop on".
The default setting of "set breakpoints always-inserted" is "off",
as that is how GDB has been behaving for ages.
Since non-stop requires breakpoints always-in, its just cumbersome
to have to issue more than one command to enable non-stop mode.
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". 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.
This mode will be the default.
(gdb) show non-stop
Controlling the inferior in non-stop mode is off.
We're in all-stop.
(gdb) show breakpoint always-inserted
Always inserted breakpoint mode is follow-non-stop (currently off).
GDB shows that the effect is as if "off".
(gdb) set non-stop on
Turns non-stop on.
(gdb) show breakpoint always-inserted
Always inserted breakpoint mode is follow-non-stop (currently on).
GDB shows that the effect is as if "on".
(gdb) set non-stop off
Back to all-stop.
(gdb) set breakpoint always-inserted on
Force "on". Useful for testing.
(gdb) show breakpoint always-inserted
Always inserted breakpoint mode is on.
Now GDB shows that "on", independently of the non-stop mode.
What do you think?
If the idea is sound, does the patch look ok?
How about the docs?
--
Pedro Alves
[-- Attachment #2: always_in_non_stop.diff --]
[-- Type: text/x-diff, Size: 5792 bytes --]
gdb/
2008-08-12 Pedro Alves <pedro@codesourcery.com>
* breakpoint.c (always_inserted_follow_non_stop)
(always_inserted_on, always_inserted_off, always_inserted_enums):
New.
(always_inserted_mode): Change type to char* and point to
always_inserted_follow_non_stop.
(show_always_inserted_mode): In follow-non-stop mode, also show
the current effect of the option.
(breakpoints_always_inserted_mode): Adjust for the new
follow_non_stop mode mode.
(_initialize_breakpoint): Make the "set breakpoints
always-inserted" command an enum command. Extend help to describe
the follow-non-stop mode.
gdb/doc/
2008-08-12 Pedro Alves <pedro@codesourcery.com>
* gdb.texinfo (breakpoint always-inserted) Describe the
follow-non-stop mode setting, and make it the default.
---
gdb/breakpoint.c | 61 +++++++++++++++++++++++++++++++++++-----------------
gdb/doc/gdb.texinfo | 8 +++++-
2 files changed, 49 insertions(+), 20 deletions(-)
Index: src/gdb/breakpoint.c
===================================================================
--- src.orig/gdb/breakpoint.c 2008-08-11 23:25:14.000000000 +0100
+++ src/gdb/breakpoint.c 2008-08-12 00:28:50.000000000 +0100
@@ -249,18 +249,41 @@ 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 follow-non-stop, GDB will
+ behave as ON if in non-stop mode, and as OFF if all-stop mode.*/
+
+static const char always_inserted_follow_non_stop[] = "follow-non-stop";
+static const char always_inserted_on[] = "on";
+static const char always_inserted_off[] = "off";
+static const char *always_inserted_enums[] = {
+ always_inserted_follow_non_stop,
+ always_inserted_off,
+ always_inserted_on,
+ NULL
+};
+static const char *always_inserted_mode = always_inserted_follow_non_stop;
+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_follow_non_stop)
+ 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_follow_non_stop
+ && non_stop));
+}
void _initialize_breakpoint (void);
@@ -8197,11 +8220,6 @@ single_step_breakpoint_inserted_here_p (
return 0;
}
-int breakpoints_always_inserted_mode (void)
-{
- return always_inserted_mode;
-}
-
\f
/* This help string is used for the break, hbreak, tbreak and thbreak commands.
It is defined as a macro to prevent duplication.
@@ -8604,14 +8622,19 @@ 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 follow-non-stop\n\
+(which is the default), the behaviour depends on the non-stop\n\
+setting (see help set non-stop). In this case, if gdb is controlling\n\
+the inferior in non-stop mode, gdb behaves as if always-inserted mode\n\
+is on; if gdb is controlling the inferior in all-stop mode, gdb behaves\n\
+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-11 23:56:19.000000000 +0100
+++ src/gdb/doc/gdb.texinfo 2008-08-12 00:30:55.000000000 +0100
@@ -3321,8 +3321,14 @@ This behavior can be controlled with the
@kindex set breakpoint always-inserted
@kindex show breakpoint always-inserted
@table @code
+@item set breakpoint always-inserted follow-non-stop
+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.
+
@item set breakpoint always-inserted off
-This is the default behaviour. All breakpoints, including newly added
+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.
next reply other threads:[~2008-08-11 23:34 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-08-11 23:34 Pedro Alves [this message]
2008-08-12 1:52 ` Pedro Alves
2008-08-12 6:23 ` Vladimir Prus
2008-08-12 18:18 ` Eli Zaretskii
2008-08-12 20:07 ` Pedro Alves
2008-08-12 20:12 ` Daniel Jacobowitz
2008-08-12 20:37 ` Pedro Alves
2008-08-12 20:41 ` Daniel Jacobowitz
2008-08-12 21:45 ` Pedro Alves
2008-08-12 23:06 ` Daniel Jacobowitz
2008-08-13 3:19 ` Eli Zaretskii
2008-08-13 14:01 ` Pedro Alves
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=200808120034.25338.pedro@codesourcery.com \
--to=pedro@codesourcery.com \
--cc=gdb-patches@sourceware.org \
/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