mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-26 09:08:59 +00:00
* infcmd.c (kill_if_already_running): Make static. Use
target_require_runnable. * target.c (target_require_runnable): New. * target.h (target_require_runnable): Declare. * gdb.texinfo (Starting): Mention always-running targets. (Target Commands): Add an anchor for load. (Connecting): Explain continue instead of run.
This commit is contained in:
@@ -1,3 +1,10 @@
|
||||
2008-02-28 Daniel Jacobowitz <dan@codesourcery.com>
|
||||
|
||||
* 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-28 Daniel Jacobowitz <dan@codesourcery.com>
|
||||
|
||||
* frame.c (reinit_frame_cache): Only annotate if frames were
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
2008-02-28 Daniel Jacobowitz <dan@codesourcery.com>
|
||||
|
||||
* gdb.texinfo (Starting): Mention always-running targets.
|
||||
(Target Commands): Add an anchor for load.
|
||||
(Connecting): Explain continue instead of run.
|
||||
|
||||
2008-02-27 Daniel Jacobowitz <dan@codesourcery.com>
|
||||
|
||||
* gdb.texinfo (Debugging Output): Document "set debug timestamp".
|
||||
|
||||
@@ -1818,8 +1818,19 @@ argument to @value{GDBN} (@pxref{Invocation, ,Getting In and Out of
|
||||
|
||||
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 communications between
|
||||
|
||||
@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 have no effect.)
|
||||
@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
|
||||
|
||||
@@ -444,11 +444,15 @@ post_create_inferior (struct target_ops *target, int from_tty)
|
||||
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? "))
|
||||
|
||||
35
gdb/target.c
35
gdb/target.c
@@ -1723,6 +1723,41 @@ target_read_description (struct target_ops *target)
|
||||
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.
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user