gdb: Ada Tasks

 
 15.4.10.7 Extensions for Ada Tasks
 ..................................
 
 Support for Ada tasks is analogous to that for threads (See
 Threads).  GDB provides the following task-related commands:
 
 'info tasks'
      This command shows a list of current Ada tasks, as in the following
      example:
 
           (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
 
 
      In this listing, the asterisk before the last task indicates it to
      be the task currently being inspected.
 
      ID
           Represents GDB's internal task number.
 
      TID
           The Ada task ID.
 
      P-ID
           The parent's task ID (GDB's internal task number).
 
      Pri
           The base priority of the task.
 
      State
           Current state of the task.
 
           'Unactivated'
                The task has been created but has not been activated.  It
                cannot be executing.
 
           'Runnable'
                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.
 
           'Terminated'
                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.
 
           'Child Activation Wait'
                The task is waiting for created tasks to complete
                activation.
 
           'Accept Statement'
                The task is waiting on an accept or selective wait
                statement.
 
           'Waiting on entry call'
                The task is waiting on an entry call.
 
           'Async Select Wait'
                The task is waiting to start the abortable part of an
                asynchronous select statement.
 
           'Delay Sleep'
                The task is waiting on a select statement with only a
                delay alternative open.
 
           'Child Termination Wait'
                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.
 
           'Wait Child in Term Alt'
                The task is sleeping waiting for tasks on terminate
                alternatives to finish terminating.
 
           'Accepting RV with TASKNO'
                The task is accepting a rendez-vous with the task TASKNO.
 
      Name
           Name of the task in the program.
 
 'info task TASKNO'
      This command shows detailled informations on the specified task, as
      in the following example:
           (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: 0
           LWP: 0x1fac
           Parent: 1 (main_task)
           Base Priority: 15
           State: Runnable
 
 'task'
      This command prints the ID of the current task.
 
           (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]
 
 'task TASKNO'
      This command is like the 'thread THREAD-ID' command (See
      Threads).  It switches the context of debugging from the current
      task to the given task.
 
           (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
 
 'break LOCATION task TASKNO'
 'break LOCATION task TASKNO if ...'
      These commands are like the 'break ... thread ...' command (See
      Thread Stops).  The LOCATION argument specifies source lines, as
      described in SeeSpecify Location.
 
      Use the qualifier 'task TASKNO' with a breakpoint command to
      specify that you only want GDB to stop the program when a
      particular Ada task reaches this breakpoint.  The TASKNO is one of
      the numeric task identifiers assigned by GDB, shown in the first
      column of the 'info tasks' display.
 
      If you do not specify 'task TASKNO' when you set a breakpoint, the
      breakpoint applies to _all_ tasks of your program.
 
      You can use the 'task' qualifier on conditional breakpoints as
      well; in this case, place 'task TASKNO' before the breakpoint
      condition (before the 'if').
 
      For example,
 
           (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