blob: 5eb07204877a2f0d0a57c6e979f54f460190e2cc [file] [log] [blame]
<html lang="en">
<head>
<title>Ada Tasks - 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="Ada.html#Ada" title="Ada">
<link rel="prev" href="Stopping-Before-Main-Program.html#Stopping-Before-Main-Program" title="Stopping Before Main Program">
<link rel="next" href="Ada-Tasks-and-Core-Files.html#Ada-Tasks-and-Core-Files" title="Ada Tasks and Core Files">
<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="Ada-Tasks"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="Ada-Tasks-and-Core-Files.html#Ada-Tasks-and-Core-Files">Ada Tasks and Core Files</a>,
Previous:&nbsp;<a rel="previous" accesskey="p" href="Stopping-Before-Main-Program.html#Stopping-Before-Main-Program">Stopping Before Main Program</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="Ada.html#Ada">Ada</a>
<hr>
</div>
<h5 class="subsubsection">15.4.7.5 Extensions for Ada Tasks</h5>
<p><a name="index-Ada_002c-tasking-868"></a>
Support for Ada tasks is analogous to that for threads (see <a href="Threads.html#Threads">Threads</a>).
<span class="sc">gdb</span> provides the following task-related commands:
<a name="index-info-tasks-869"></a>
<dl><dt><code>info tasks</code><dd>This command shows a list of current Ada tasks, as in the following example:
<pre class="smallexample"> (gdb) info tasks
ID TID P-ID Pri State Name
1 8088000 0 15 Child Activation Wait main_task
2 80a4000 1 15 Accept Statement b
3 809a800 1 15 Child Activation Wait a
* 4 80ae800 3 15 Runnable c
</pre>
<p class="noindent">In this listing, the asterisk before the last task indicates it to be the
task currently being inspected.
<dl>
<dt>ID<dd>Represents <span class="sc">gdb</span>'s internal task number.
<br><dt>TID<dd>The Ada task ID.
<br><dt>P-ID<dd>The parent's task ID (<span class="sc">gdb</span>'s internal task number).
<br><dt>Pri<dd>The base priority of the task.
<br><dt>State<dd>Current state of the task.
<dl>
<dt><code>Unactivated</code><dd>The task has been created but has not been activated. It cannot be
executing.
<br><dt><code>Runnable</code><dd>The task is not blocked for any reason known to Ada. (It may be waiting
for a mutex, though.) It is conceptually "executing" in normal mode.
<br><dt><code>Terminated</code><dd>The task is terminated, in the sense of ARM 9.3 (5). Any dependents
that were waiting on terminate alternatives have been awakened and have
terminated themselves.
<br><dt><code>Child Activation Wait</code><dd>The task is waiting for created tasks to complete activation.
<br><dt><code>Accept Statement</code><dd>The task is waiting on an accept or selective wait statement.
<br><dt><code>Waiting on entry call</code><dd>The task is waiting on an entry call.
<br><dt><code>Async Select Wait</code><dd>The task is waiting to start the abortable part of an asynchronous
select statement.
<br><dt><code>Delay Sleep</code><dd>The task is waiting on a select statement with only a delay
alternative open.
<br><dt><code>Child Termination Wait</code><dd>The task is sleeping having completed a master within itself, and is
waiting for the tasks dependent on that master to become terminated or
waiting on a terminate Phase.
<br><dt><code>Wait Child in Term Alt</code><dd>The task is sleeping waiting for tasks on terminate alternatives to
finish terminating.
<br><dt><code>Accepting RV with </code><var>taskno</var><dd>The task is accepting a rendez-vous with the task <var>taskno</var>.
</dl>
<br><dt>Name<dd>Name of the task in the program.
</dl>
<p><a name="index-info-task-_0040var_007btaskno_007d-870"></a><br><dt><code>info task </code><var>taskno</var><dd>This command shows detailled informations on the specified task, as in
the following example:
<pre class="smallexample"> (gdb) info tasks
ID TID P-ID Pri State Name
1 8077880 0 15 Child Activation Wait main_task
* 2 807c468 1 15 Runnable task_1
(gdb) info task 2
Ada Task: 0x807c468
Name: task_1
Thread: 0x807f378
Parent: 1 (main_task)
Base Priority: 15
State: Runnable
</pre>
<br><dt><code>task</code><dd><a name="index-task_0040r_007b-_0028Ada_0029_007d-871"></a><a name="index-current-Ada-task-ID-872"></a>This command prints the ID of the current task.
<pre class="smallexample"> (gdb) info tasks
ID TID P-ID Pri State Name
1 8077870 0 15 Child Activation Wait main_task
* 2 807c458 1 15 Runnable t
(gdb) task
[Current task is 2]
</pre>
<br><dt><code>task </code><var>taskno</var><dd><a name="index-Ada-task-switching-873"></a>This command is like the <code>thread </code><var>threadno</var>
command (see <a href="Threads.html#Threads">Threads</a>). It switches the context of debugging
from the current task to the given task.
<pre class="smallexample"> (gdb) info tasks
ID TID P-ID Pri State Name
1 8077870 0 15 Child Activation Wait main_task
* 2 807c458 1 15 Runnable t
(gdb) task 1
[Switching to task 1]
#0 0x8067726 in pthread_cond_wait ()
(gdb) bt
#0 0x8067726 in pthread_cond_wait ()
#1 0x8056714 in system.os_interface.pthread_cond_wait ()
#2 0x805cb63 in system.task_primitives.operations.sleep ()
#3 0x806153e in system.tasking.stages.activate_tasks ()
#4 0x804aacc in un () at un.adb:5
</pre>
<br><dt><code>break </code><var>linespec</var><code> task </code><var>taskno</var><dt><code>break </code><var>linespec</var><code> task </code><var>taskno</var><code> if ...</code><dd><a name="index-breakpoints-and-tasks_002c-in-Ada-874"></a><a name="index-task-breakpoints_002c-in-Ada-875"></a><a name="index-break-_0040dots_007b_007d-task-_0040var_007btaskno_007d_0040r_007b-_0028Ada_0029_007d-876"></a>These commands are like the <code>break ... thread ...</code>
command (see <a href="Thread-Stops.html#Thread-Stops">Thread Stops</a>).
<var>linespec</var> specifies source lines, as described
in <a href="Specify-Location.html#Specify-Location">Specify Location</a>.
<p>Use the qualifier &lsquo;<samp><span class="samp">task </span><var>taskno</var></samp>&rsquo; with a breakpoint command
to specify that you only want <span class="sc">gdb</span> to stop the program when a
particular Ada task reaches this breakpoint. <var>taskno</var> is one of the
numeric task identifiers assigned by <span class="sc">gdb</span>, shown in the first
column of the &lsquo;<samp><span class="samp">info tasks</span></samp>&rsquo; display.
<p>If you do not specify &lsquo;<samp><span class="samp">task </span><var>taskno</var></samp>&rsquo; when you set a
breakpoint, the breakpoint applies to <em>all</em> tasks of your
program.
<p>You can use the <code>task</code> qualifier on conditional breakpoints as
well; in this case, place &lsquo;<samp><span class="samp">task </span><var>taskno</var></samp>&rsquo; before the
breakpoint condition (before the <code>if</code>).
<p>For example,
<pre class="smallexample"> (gdb) info tasks
ID TID P-ID Pri State Name
1 140022020 0 15 Child Activation Wait main_task
2 140045060 1 15 Accept/Select Wait t2
3 140044840 1 15 Runnable t1
* 4 140056040 1 15 Runnable t3
(gdb) b 15 task 2
Breakpoint 5 at 0x120044cb0: file test_task_debug.adb, line 15.
(gdb) cont
Continuing.
task # 1 running
task # 2 running
Breakpoint 5, test_task_debug () at test_task_debug.adb:15
15 flush;
(gdb) info tasks
ID TID P-ID Pri State Name
1 140022020 0 15 Child Activation Wait main_task
* 2 140045060 1 15 Runnable t2
3 140044840 1 15 Runnable t1
4 140056040 1 15 Delay Sleep t3
</pre>
</dl>
</body></html>