This is the mail archive of the gdb-patches@sourceware.org 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]

Re: [RFC] 03/10 Add non-stop global


A Thursday 08 May 2008 12:34:02, Eli Zaretskii wrote:
> > From: Pedro Alves <pedro@codesourcery.com>
> > Date: Tue, 6 May 2008 16:46:54 +0100
> >
> > +  add_setshow_boolean_cmd ("non-stop", no_class,
> > +			   &non_stop_1, _("\
> > +Set whether gdb controls the inferior in non-stop mode."), _("\
> > +Show whether gdb controls the inferior in non-stop mode."), _("\
> > +Tells gdb whether to control the inferior in non-stop mode."),
>
> Please add more text to the one-line doc string to explain a bit about
> what happens in non-stop mode.
>
> Thanks.

Like this?  See attached.

I'll work on docs and post patch afterwards.  Where in the
manual should this go?

(gdb) help set non-stop
Set whether gdb controls the inferior in non-stop mode.
When debugging a multi-threaded program and this setting is
off (the default, also called all-stop mode), when one thread stops
(for a breakpoint, watchpoint, exception, or similar events), GDB stops
all other threads in the program while you interact with the thread of
interest.  When you continue or step a thread, you can allow the other
threads to run, or have them remain stopped, but while you inspect any
thread's state, all threads stop.

In non-stop mode, when one thread stops, other threads can continue
to run freely.  You'll be able to step each thread independently,
leave it stopped or free to run as needed.
(gdb)                   

-- 
Pedro Alves
2008-05-09  Pedro Alves  <pedro@codesourcery.com>

	* inferior.h (non_stop): Declare.
	* infrun.c (non_stop, non_stop_1): New.
	(set_non_stop, show_non_stop): New.
	(_initialize_infrun): Add "set/show non-stop" command.

---
 gdb/inferior.h |    7 +++++++
 gdb/infrun.c   |   46 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 53 insertions(+)

Index: src/gdb/inferior.h
===================================================================
--- src.orig/gdb/inferior.h	2008-05-08 14:23:24.000000000 +0100
+++ src/gdb/inferior.h	2008-05-08 19:01:17.000000000 +0100
@@ -137,6 +137,13 @@ extern void proceed (CORE_ADDR, enum tar
    over such function.  */
 extern int step_stop_if_no_debug;
 
+/* If set, the inferior should be controlled in non-stop mode.  In
+   this mode, each thread is controlled independently.  Execution
+   commands apply apply only to the the selected thread by default,
+   and stop events stop only the thread that had the event -- the
+   other threads are kept running freely.  */
+extern int non_stop;
+
 extern void generic_mourn_inferior (void);
 
 extern void terminal_save_ours (void);
Index: src/gdb/infrun.c
===================================================================
--- src.orig/gdb/infrun.c	2008-05-08 14:23:24.000000000 +0100
+++ src/gdb/infrun.c	2008-05-08 18:57:44.000000000 +0100
@@ -4460,6 +4460,32 @@ save_inferior_ptid (void)
 }
 
 
+int non_stop = 0;
+static int non_stop_1 = 0;
+
+static void
+set_non_stop (char *args, int from_tty,
+	      struct cmd_list_element *c)
+{
+  if (target_has_execution)
+    {
+      non_stop_1 = non_stop;
+      error (_("Cannot change this setting while the inferior is running."));
+    }
+
+  non_stop = non_stop_1;
+}
+
+static void
+show_non_stop (struct ui_file *file, int from_tty,
+	       struct cmd_list_element *c, const char *value)
+{
+  fprintf_filtered (file,
+		    _("Controlling the inferior in non-stop mode is %s.\n"),
+		    value);
+}
+
+
 void
 _initialize_infrun (void)
 {
@@ -4533,6 +4559,26 @@ When non-zero, displaced stepping specif
 			    show_debug_displaced,
 			    &setdebuglist, &showdebuglist);
 
+  add_setshow_boolean_cmd ("non-stop", no_class,
+			   &non_stop_1, _("\
+Set whether gdb controls the inferior in non-stop mode."), _("\
+Show whether gdb controls the inferior in non-stop mode."), _("\
+When debugging a multi-threaded program and this setting is\n\
+off (the default, also called all-stop mode), when one thread stops\n\
+(for a breakpoint, watchpoint, exception, or similar events), GDB stops\n\
+all other threads in the program while you interact with the thread of\n\
+interest.  When you continue or step a thread, you can allow the other\n\
+threads to run, or have them remain stopped, but while you inspect any\n\
+thread's state, all threads stop.\n\
+\n\
+In non-stop mode, when one thread stops, other threads can continue\n\
+to run freely.  You'll be able to step each thread independently,\n\
+leave it stopped or free to run as needed."),
+			   set_non_stop,
+			   show_non_stop,
+			   &setlist,
+			   &showlist);
+
   numsigs = (int) TARGET_SIGNAL_LAST;
   signal_stop = (unsigned char *) xmalloc (sizeof (signal_stop[0]) * numsigs);
   signal_print = (unsigned char *)

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