From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 31950 invoked by alias); 27 Feb 2008 20:28:28 -0000 Received: (qmail 31933 invoked by uid 22791); 27 Feb 2008 20:28:26 -0000 X-Spam-Check-By: sourceware.org Received: from NaN.false.org (HELO nan.false.org) (208.75.86.248) by sourceware.org (qpsmtpd/0.31) with ESMTP; Wed, 27 Feb 2008 20:28:07 +0000 Received: from nan.false.org (localhost [127.0.0.1]) by nan.false.org (Postfix) with ESMTP id 42F5F98140; Wed, 27 Feb 2008 20:28:05 +0000 (GMT) Received: from caradoc.them.org (22.svnf5.xdsl.nauticom.net [209.195.183.55]) by nan.false.org (Postfix) with ESMTP id 15EC59811F; Wed, 27 Feb 2008 20:28:05 +0000 (GMT) Received: from drow by caradoc.them.org with local (Exim 4.69) (envelope-from ) id 1JUSsm-000443-7c; Wed, 27 Feb 2008 15:28:04 -0500 Date: Wed, 27 Feb 2008 20:32:00 -0000 From: Daniel Jacobowitz To: Eli Zaretskii Cc: gdb-patches@sourceware.org Subject: Re: [rfc] Stop unlikely "run"'s earlier Message-ID: <20080227202804.GA14556@caradoc.them.org> Mail-Followup-To: Eli Zaretskii , gdb-patches@sourceware.org References: <20071107211833.GA28200@caradoc.them.org> <20071107221730.GA31647@caradoc.them.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.17 (2007-12-11) X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2008-02/txt/msg00451.txt.bz2 On Sat, Nov 17, 2007 at 01:32:16PM +0200, Eli Zaretskii wrote: > Well, under "target remote" (in the node "Connecting") we say: > > Once the connection has been established, you can use all the usual > commands to examine and change data and to step and continue the > remote program. > > Given you description, I'd say this should be augmented by explaining > that the program is already running at this stage, and telling the > user to use "continue", as opposed to "run" in local debugging. > > Also, under "run" (in node "Starting"), it'd be a good thing to cite > the error message you want top introduce: > > The "remote" target can not run programs. Try "help target" or "continue". > > and tell the reader that the most probable cause here is that "run" > was used rather than "continue". Without such an explanation, I'd be > quite lost if I saw this message (what do you mean ``can't run''? how > can I debug the darn thing it it cannot be run?) > > WDYT? Hi Eli, sorry for the delay. Is this documentation OK? I also changed the error message, to one I hope is slightly less confusing: The "remote" target does not support "run". Try "help target" or "continue". -- Daniel Jacobowitz CodeSourcery 2008-02-27 Daniel Jacobowitz * infcmd.c (kill_if_already_running): Make static. Use target_require_runnable. * target.c (target_require_runnable): New. * target.h (target_require_runnable): Declare. 2008-02-27 Daniel Jacobowitz * gdb.texinfo (Starting): Mention always-running targets. (Target Commands): Add an anchor for load. (Connecting): Explain continue instead of run. Index: infcmd.c =================================================================== RCS file: /cvs/src/src/gdb/infcmd.c,v retrieving revision 1.169 diff -u -p -r1.169 infcmd.c --- infcmd.c 31 Jan 2008 13:37:21 -0000 1.169 +++ infcmd.c 27 Feb 2008 20:23:57 -0000 @@ -444,11 +444,15 @@ post_create_inferior (struct target_ops from the beginning. Ask the user to confirm that he wants to restart the program being debugged when FROM_TTY is non-null. */ -void +static void kill_if_already_running (int from_tty) { if (! ptid_equal (inferior_ptid, null_ptid) && target_has_execution) { + /* Bail out before killing the program if we will not be able to + restart it. */ + target_require_runnable (); + if (from_tty && !query ("The program being debugged has been started already.\n\ Start it from the beginning? ")) Index: target.c =================================================================== RCS file: /cvs/src/src/gdb/target.c,v retrieving revision 1.154 diff -u -p -r1.154 target.c --- target.c 25 Jan 2008 00:09:49 -0000 1.154 +++ target.c 27 Feb 2008 20:23:57 -0000 @@ -1723,6 +1723,41 @@ target_read_description (struct target_o return NULL; } +/* Look through the currently pushed targets. If none of them will + be able to restart the currently running process, issue an error + message. */ + +void +target_require_runnable (void) +{ + struct target_ops *t; + + for (t = target_stack; t != NULL; t = t->beneath) + { + /* If this target knows how to create a new program, then + assume we will still be able to after killing the current + one. Either killing and mourning will not pop T, or else + find_default_run_target will find it again. */ + if (t->to_create_inferior != NULL) + return; + + /* Do not worry about thread_stratum targets that can not + create inferiors. Assume they will be pushed again if + necessary, and continue to the process_stratum. */ + if (t->to_stratum == thread_stratum) + continue; + + error (_("\ +The \"%s\" target does not support \"run\". Try \"help target\" or \"continue\"."), + t->to_shortname); + } + + /* This function is only called if the target is running. In that + case there should have been a process_stratum target and it + should either know how to create inferiors, or not... */ + internal_error (__FILE__, __LINE__, "No targets found"); +} + /* Look through the list of possible targets for a target that can execute a run or attach command without any other data. This is used to locate the default process stratum. Index: target.h =================================================================== RCS file: /cvs/src/src/gdb/target.h,v retrieving revision 1.110 diff -u -p -r1.110 target.h --- target.h 20 Feb 2008 14:31:40 -0000 1.110 +++ target.h 27 Feb 2008 20:23:58 -0000 @@ -1188,6 +1188,8 @@ extern void initialize_targets (void); extern void noprocess (void); +extern void target_require_runnable (void); + extern void find_default_attach (char *, int); extern void find_default_create_inferior (char *, char *, char **, int); Index: doc/gdb.texinfo =================================================================== RCS file: /cvs/src/src/gdb/doc/gdb.texinfo,v retrieving revision 1.469 diff -u -p -r1.469 gdb.texinfo --- doc/gdb.texinfo 25 Feb 2008 20:34:40 -0000 1.469 +++ doc/gdb.texinfo 27 Feb 2008 20:24:00 -0000 @@ -1818,8 +1818,19 @@ argument to @value{GDBN} (@pxref{Invocat If you are running your program in an execution environment that supports processes, @code{run} creates an inferior process and makes -that process run your program. (In environments without processes, -@code{run} jumps to the start of your program.) +that process run your program. In some environments without processes, +@code{run} jumps to the start of your program. Other targets, +like @samp{remote}, are always running. If you get an error +message like this one: + +@smallexample +The "remote" target does not support "run". +Try "help target" or "continue". +@end smallexample + +@noindent +then use @code{continue} to run your program. You may need @code{load} +first (@pxref{load}). The execution of a program is affected by certain information it receives from its superior. @value{GDBN} provides ways to specify this @@ -12669,6 +12680,7 @@ Show the current status of displaying co @kindex load @var{filename} @item load @var{filename} +@anchor{load} Depending on what remote debugging facilities are configured into @value{GDBN}, the @code{load} command may be available. Where it exists, it is meant to make @var{filename} (an executable) available for debugging @@ -12847,8 +12859,9 @@ program has already exited, this will ha @end table Once the connection has been established, you can use all the usual -commands to examine and change data and to step and continue the -remote program. +commands to examine and change data. The remote program is already +running; you can use @kbd{step} and @kbd{continue}, and you do not +need to use @kbd{run}. @cindex interrupting remote programs @cindex remote programs, interrupting