blob: 8f6ac8c43fa2ed7bfc1aa5b2040d80c99a1f6c0f [file] [log] [blame]
<html lang="en">
<head>
<title>Inferiors and Programs - Debugging with GDB</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="Debugging with GDB">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="Running.html#Running" title="Running">
<link rel="prev" href="Kill-Process.html#Kill-Process" title="Kill Process">
<link rel="next" href="Threads.html#Threads" title="Threads">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being ``Free Software'' and ``Free Software Needs
Free Documentation'', with the Front-Cover Texts being ``A GNU Manual,''
and with the Back-Cover Texts as in (a) below.
(a) The FSF's Back-Cover Text is: ``You are free to copy and modify
this GNU Manual. Buying copies from GNU Press supports the FSF in
developing GNU and promoting software freedom.''-->
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
pre.display { font-family:inherit }
pre.format { font-family:inherit }
pre.smalldisplay { font-family:inherit; font-size:smaller }
pre.smallformat { font-family:inherit; font-size:smaller }
pre.smallexample { font-size:smaller }
pre.smalllisp { font-size:smaller }
span.sc { font-variant:small-caps }
span.roman { font-family:serif; font-weight:normal; }
span.sansserif { font-family:sans-serif; font-weight:normal; }
--></style>
<link rel="stylesheet" type="text/css" href="../cs.css">
</head>
<body>
<div class="node">
<a name="Inferiors-and-Programs"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="Threads.html#Threads">Threads</a>,
Previous:&nbsp;<a rel="previous" accesskey="p" href="Kill-Process.html#Kill-Process">Kill Process</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="Running.html#Running">Running</a>
<hr>
</div>
<h3 class="section">4.9 Debugging Multiple Inferiors and Programs</h3>
<p><span class="sc">gdb</span> lets you run and debug multiple programs in a single
session. In addition, <span class="sc">gdb</span> on some systems may let you run
several programs simultaneously (otherwise you have to exit from one
before starting another). In the most general case, you can have
multiple threads of execution in each of multiple processes, launched
from multiple executables.
<p><a name="index-inferior-137"></a><span class="sc">gdb</span> represents the state of each program execution with an
object called an <dfn>inferior</dfn>. An inferior typically corresponds to
a process, but is more general and applies also to targets that do not
have processes. Inferiors may be created before a process runs, and
may be retained after a process exits. Inferiors have unique
identifiers that are different from process ids. Usually each
inferior will also have its own distinct address space, although some
embedded targets may have several inferiors running in different parts
of a single address space. Each inferior may in turn have multiple
threads running in it.
<p>To find out what inferiors exist at any moment, use <code>info&nbsp;inferiors</code><!-- /@w -->:
<a name="index-info-inferiors-138"></a>
<dl><dt><code>info inferiors</code><dd>Print a list of all inferiors currently being managed by <span class="sc">gdb</span>.
<p><span class="sc">gdb</span> displays for each inferior (in this order):
<ol type=1 start=1>
<li>the inferior number assigned by <span class="sc">gdb</span>
<li>the target system's inferior identifier
<li>the name of the executable the inferior is running.
</ol>
<p class="noindent">An asterisk &lsquo;<samp><span class="samp">*</span></samp>&rsquo; preceding the <span class="sc">gdb</span> inferior number
indicates the current inferior.
<p>For example,
</dl>
<!-- end table here to get a little more width for example -->
<pre class="smallexample"> (gdb) info inferiors
Num Description Executable
2 process 2307 hello
* 1 process 3401 goodbye
</pre>
<p>To switch focus between inferiors, use the <code>inferior</code> command:
<a name="index-inferior-_0040var_007binfno_007d-139"></a>
<dl><dt><code>inferior </code><var>infno</var><dd>Make inferior number <var>infno</var> the current inferior. The argument
<var>infno</var> is the inferior number assigned by <span class="sc">gdb</span>, as shown
in the first field of the &lsquo;<samp><span class="samp">info inferiors</span></samp>&rsquo; display.
</dl>
<p>You can get multiple executables into a debugging session via the
<code>add-inferior</code> and <code>clone-inferior</code><!-- /@w --> commands. On some
systems <span class="sc">gdb</span> can add inferiors to the debug session
automatically by following calls to <code>fork</code> and <code>exec</code>. To
remove inferiors from the debugging session use the
<code>remove-inferior</code><!-- /@w --> command.
<a name="index-add_002dinferior-140"></a>
<dl><dt><code>add-inferior [ -copies </code><var>n</var><code> ] [ -exec </code><var>executable</var><code> ]</code><dd>Adds <var>n</var> inferiors to be run using <var>executable</var> as the
executable. <var>n</var> defaults to 1. If no executable is specified,
the inferiors begins empty, with no program. You can still assign or
change the program assigned to the inferior at any time by using the
<code>file</code> command with the executable name as its argument.
<p><a name="index-clone_002dinferior-141"></a><br><dt><code>clone-inferior [ -copies </code><var>n</var><code> ] [ </code><var>infno</var><code> ]</code><dd>Adds <var>n</var> inferiors ready to execute the same program as inferior
<var>infno</var>. <var>n</var> defaults to 1. <var>infno</var> defaults to the
number of the current inferior. This is a convenient command when you
want to run another instance of the inferior you are debugging.
<pre class="smallexample"> (gdb) info inferiors
Num Description Executable
* 1 process 29964 helloworld
(gdb) clone-inferior
Added inferior 2.
1 inferiors added.
(gdb) info inferiors
Num Description Executable
2 &lt;null&gt; helloworld
* 1 process 29964 helloworld
</pre>
<p>You can now simply switch focus to inferior 2 and run it.
<p><a name="index-remove_002dinferior-142"></a><br><dt><code>remove-inferior </code><var>infno</var><dd>Removes the inferior <var>infno</var>. It is not possible to remove an
inferior that is running with this command. For those, use the
<code>kill</code> or <code>detach</code> command first.
</dl>
<p>To quit debugging one of the running inferiors that is not the current
inferior, you can either detach from it by using the <code>detach&nbsp;inferior</code><!-- /@w --> command (allowing it to run independently), or kill it
using the <code>kill&nbsp;inferior</code><!-- /@w --> command:
<a name="index-detach-inferior-_0040var_007binfno_007d-143"></a>
<dl><dt><code>detach inferior </code><var>infno</var><dd>Detach from the inferior identified by <span class="sc">gdb</span> inferior number
<var>infno</var>. Note that the inferior's entry still stays on the list
of inferiors shown by <code>info inferiors</code>, but its Description will
show &lsquo;<samp><span class="samp">&lt;null&gt;</span></samp>&rsquo;.
<p><a name="index-kill-inferior-_0040var_007binfno_007d-144"></a><br><dt><code>kill inferior </code><var>infno</var><dd>Kill the inferior identified by <span class="sc">gdb</span> inferior number
<var>infno</var>. Note that the inferior's entry still stays on the list
of inferiors shown by <code>info inferiors</code>, but its Description will
show &lsquo;<samp><span class="samp">&lt;null&gt;</span></samp>&rsquo;.
</dl>
<p>After the successful completion of a command such as <code>detach</code>,
<code>detach inferior</code>, <code>kill</code> or <code>kill inferior</code>, or after
a normal process exit, the inferior is still valid and listed with
<code>info inferiors</code>, ready to be restarted.
<p>To be notified when inferiors are started or exit under <span class="sc">gdb</span>'s
control use <code>set&nbsp;print&nbsp;inferior-events</code><!-- /@w -->:
<a name="index-set-print-inferior_002devents-145"></a>
<a name="index-print-messages-on-inferior-start-and-exit-146"></a>
<dl><dt><code>set print inferior-events</code><dt><code>set print inferior-events on</code><dt><code>set print inferior-events off</code><dd>The <code>set print inferior-events</code> command allows you to enable or
disable printing of messages when <span class="sc">gdb</span> notices that new
inferiors have started or that inferiors have exited or have been
detached. By default, these messages will not be printed.
<p><a name="index-show-print-inferior_002devents-147"></a><br><dt><code>show print inferior-events</code><dd>Show whether messages will be printed when <span class="sc">gdb</span> detects that
inferiors have started, exited or have been detached.
</dl>
<p>Many commands will work the same with multiple programs as with a
single program: e.g., <code>print myglobal</code> will simply display the
value of <code>myglobal</code> in the current inferior.
<p>Occasionaly, when debugging <span class="sc">gdb</span> itself, it may be useful to
get more info about the relationship of inferiors, programs, address
spaces in a debug session. You can do that with the <code>maint&nbsp;info&nbsp;program-spaces</code><!-- /@w --> command.
<a name="index-maint-info-program_002dspaces-148"></a>
<dl><dt><code>maint info program-spaces</code><dd>Print a list of all program spaces currently being managed by
<span class="sc">gdb</span>.
<p><span class="sc">gdb</span> displays for each program space (in this order):
<ol type=1 start=1>
<li>the program space number assigned by <span class="sc">gdb</span>
<li>the name of the executable loaded into the program space, with e.g.,
the <code>file</code> command.
</ol>
<p class="noindent">An asterisk &lsquo;<samp><span class="samp">*</span></samp>&rsquo; preceding the <span class="sc">gdb</span> program space number
indicates the current program space.
<p>In addition, below each program space line, <span class="sc">gdb</span> prints extra
information that isn't suitable to display in tabular form. For
example, the list of inferiors bound to the program space.
<pre class="smallexample"> (gdb) maint info program-spaces
Id Executable
2 goodbye
Bound inferiors: ID 1 (process 21561)
* 1 hello
</pre>
<p>Here we can see that no inferior is running the program <code>hello</code>,
while <code>process 21561</code> is running the program <code>goodbye</code>. On
some targets, it is possible that multiple inferiors are bound to the
same program space. The most common example is that of debugging both
the parent and child processes of a <code>vfork</code> call. For example,
<pre class="smallexample"> (gdb) maint info program-spaces
Id Executable
* 1 vfork-test
Bound inferiors: ID 2 (process 18050), ID 1 (process 18045)
</pre>
<p>Here, both inferior 2 and inferior 1 are running in the same program
space as a result of inferior 1 having executed a <code>vfork</code> call.
</dl>
</body></html>