This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[RFC]: new set breakpoint pending and show breakpoint pending commands


The following patch adds a setting to control how gdb creates pending breakpoints. At Andrew's suggestion, I have made the setting a subsetting of breakpoint so future breakpoint settings will all be grouped together.

The setting is an auto boolean and has three settings: on, off, and auto. The default behavior is auto which is the current default behavior of querying before setting a pending breakpoint. The on setting causes pending breakpoints to be created automatically without prompting and the off setting causes no pending breakpoints to be created. The off setting causes an error to occur which matches the previous behavior Andrew was seeing with regard to scripts.

I have included a doc patch but will wait on posting a change to pending.exp until everyone is ok with the interface. A change is not required to make pending.exp work, it would just exercise the new functionality. I have tested the new settings manually.

Ok?

-- Jeff J.

gdb/ChangeLog:

2004-02-10 Jeff Johnston <jjohnstn@redhat.com>

        * breakpoint.c (pending_break_support): New setting variable.
        (break_command_1): Account for pending_break_support setting
        when creating pending breakpoints.
        (set_breakpoint_cmd, show_breakpoint_cmd): New functions.
        (_initialize_breakpoint): Add "set breakpoint pending" and
        "show breakpoint pending" commands.

doc/ChangeLog:

2004-02-10 Jeff Johnston <jjohnstn@redhat.com>

        * gdb.texinfo (breakpoints): Add information about the
        new "set breakpoint pending" and "show breakpoint pending"
        commands.



Index: breakpoint.c
===================================================================
RCS file: /cvs/src/src/gdb/breakpoint.c,v
retrieving revision 1.158
diff -u -p -r1.158 breakpoint.c
--- breakpoint.c	3 Feb 2004 22:47:40 -0000	1.158
+++ breakpoint.c	10 Feb 2004 23:58:18 -0000
@@ -212,6 +212,12 @@ static void ep_skip_leading_whitespace (
    if such is available. */
 static int can_use_hw_watchpoints;
 
+/* If AUTO_BOOLEAN_FALSE, gdb will not attempt to create pending breakpoints.
+   If AUTOBOOLEAN_TRUE, gdb will automatically create pending breakpoints
+   for unrecognized breakpoint locations.  
+   If AUTO_BOOLEAN_AUTO, gdb will query when breakpoints are unrecognized.  */
+static enum auto_boolean pending_break_support;
+
 void _initialize_breakpoint (void);
 
 extern int addressprint;	/* Print machine addresses? */
@@ -5103,8 +5109,21 @@ break_command_1 (char *arg, int flag, in
 
 	  error_output_message (NULL, err_msg);
 	  xfree (err_msg);
-	  if (!query ("Make breakpoint pending on future shared library load? "))
+
+	  /* If pending breakpoint support is turned off, throw error.  */
+
+	  if (pending_break_support == AUTO_BOOLEAN_FALSE)
+	    throw_exception (RETURN_ERROR);
+
+          /* If pending breakpoint support is auto query and the user selects no, 
+	     then simply return the error code.  */
+	  if (pending_break_support == AUTO_BOOLEAN_AUTO && 
+	      !query ("Make breakpoint pending on future shared library load? "))
 	    return rc;
+
+	  /* At this point, either the user was queried about setting a pending breakpoint
+	     and selected yes, or pending breakpoint behavior is on and thus a pending
+	     breakpoint is defaulted on behalf of the user.  */
 	  copy_arg = xstrdup (addr_start);
 	  addr_string = &copy_arg;
 	  sals.nelts = 1;
@@ -7696,6 +7715,16 @@ enable_delete_command (char *args, int f
   map_breakpoint_numbers (args, enable_delete_breakpoint);
 }
 
+static void
+set_breakpoint_cmd (char *args, int from_tty)
+{
+}
+
+static void
+show_breakpoint_cmd (char *args, int from_tty)
+{
+}
+
 /* Use default_breakpoint_'s, or nothing if they aren't valid.  */
 
 struct symtabs_and_lines
@@ -7720,6 +7749,8 @@ decode_line_spec_1 (char *string, int fu
 void
 _initialize_breakpoint (void)
 {
+  static struct cmd_list_element *breakpoint_set_cmdlist;
+  static struct cmd_list_element *breakpoint_show_cmdlist;
   struct cmd_list_element *c;
 
   breakpoint_chain = 0;
@@ -8038,4 +8069,29 @@ hardware.)",
   add_show_from_set (c, &showlist);
 
   can_use_hw_watchpoints = 1;
+
+  add_prefix_cmd ("breakpoint", class_maintenance, set_breakpoint_cmd, "\
+Breakpoint specific settings\n\
+Configure various breakpoint-specific variables such as\n\
+pending breakpoint behavior",
+		  &breakpoint_set_cmdlist, "set breakpoint ",
+		  0/*allow-unknown*/, &setlist);
+  add_prefix_cmd ("breakpoint", class_maintenance, show_breakpoint_cmd, "\
+Breakpoint specific settings\n\
+Configure various breakpoint-specific variables such as\n\
+pending breakpoint behavior",
+		  &breakpoint_show_cmdlist, "show breakpoint ",
+		  0/*allow-unknown*/, &showlist);
+
+  add_setshow_cmd ("pending", no_class, var_auto_boolean,
+		   (char *) &pending_break_support,
+		   "Set debugger's behavior regarding pending breakpoints.\n\
+If on, an unrecognized breakpoint location will cause gdb to create a pending\n\
+breakpoint.  If off, an unrecognized breakpoint location results in an error.\n\
+If auto, an unrecognized breakpoint location results in a user-query to see if\n\
+a pending breakpoint should be created.","\
+Show debugger's behavior regarding pending breakpoints.",
+		   NULL, NULL, &breakpoint_set_cmdlist, &breakpoint_show_cmdlist);
+
+  pending_break_support = AUTO_BOOLEAN_AUTO;
 }
Index: gdb.texinfo
===================================================================
RCS file: /cvs/src/src/gdb/doc/gdb.texinfo,v
retrieving revision 1.193
diff -u -r1.193 gdb.texinfo
--- gdb.texinfo	6 Feb 2004 15:48:25 -0000	1.193
+++ gdb.texinfo	11 Feb 2004 00:16:50 -0000
@@ -2639,15 +2639,42 @@
 (@pxref{Conditions, ,Break conditions}).
 
 @cindex pending breakpoints
-If a specified breakpoint location cannot be found, @value{GDBN} will
-prompt you
-as to whether to make the breakpoint pending on a future shared
-library load.  This is useful for setting breakpoints at the start of your
+If a specified breakpoint location cannot be found, it may due to the fact
+that the location is in a shared library that is yet to be loaded.  In such
+a case, you may want @value{GDBN} to create a special breakpoint (known as
+a pending breakpoint) that
+attempts to resolve itself in the future when an appropriate shared library
+gets loaded.
+
+Pending breakpoints are useful to set at the start of your
 @value{GDBN} session for locations that you know will be dynamically loaded
 later by the program being debugged.  When shared libraries are loaded,
-a check is made to see if the load resoloves any pending breakpoint locations.
-If a pending breakpoint location has been resolved,
-a real breakpoint is created and the original pending breakpoint is removed.
+a check is made to see if the load resolves any pending breakpoint locations.
+If a pending breakpoint location gets resolved,
+a regular breakpoint is created and the original pending breakpoint is removed.
+
+@value{GDBN} provides some additional commands for controlling pending
+breakpoint support:
+
+@kindex set breakpoint pending
+@kindex show breakpoint pending
+@table @code
+@item set breakpoint pending auto
+This is the default behavior.  When a breakpoint location is unrecognized,
+you are queried to see if a pending breakpoint should be created.
+
+@item set breakpoint pending on
+This indicates that an unrecognized breakpoint location should automatically
+result in a pending breakpoint being created.
+
+@item set breakpoint pending off
+This indicates that pending breakpoints are not to be created.  Any
+unrecognized breakpoint location results in an error.  This setting does
+not affect any pending breakpoints previously created.
+
+@item show breakpoint pending
+Show the current behavior setting for creating pending breakpoints.
+@end table
 
 @cindex operations allowed on pending breakpoints 
 Normal breakpoint operations apply to pending breakpoints as well.  You may 

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]