Next: Ada Generic Units, Previous: Ada Exceptions, Up: Ada
Support for Ada tasks is analogous to that for threads (see Threads). When in Ada mode (that is, when the “current language” is Ada), GDB allows the following task-related commands:
info tasks
(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 Running c
In this listing, the asterisk before the first task indicates it to be the currently running task.
Task_ID
.
info task
taskno(gdb) info tasks ID TID P-ID Pri State Name 1 8077880 0 15 Child Activation Wait main_task * 2 807c468 1 15 Running task_1 (gdb) info task 2 Ada Task: 0x807c468 Name: task_1 Thread: 0x807f378 Parent: 1 (main_task) Base Priority: 15 State: Runnable
task
tasknothread
threadno
(see Thread Stops). This command is not implemented
on all the targets. Currently supported targets are DEC Unix and Linux.
(gdb) info tasks ID TID P-ID Pri State Name 1 8077870 0 15 Child Activation Wait main_task * 2 807c458 1 15 Running 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 #5 0x8049d56 in main (argc=1, argv=3221223804, envp=3221223812) at b~un.adb:163
break
linespec task
tasknobreak
linespec task
taskno if ...
break ... thread ...
(see Thread Stops).
linespec specifies source lines, as described
in Setting breakpoints.
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. 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 Running 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.tB.1 (_task=0x11ffffc60) 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 Running t2 3 140044840 1 15 Runnable t1 4 140056040 1 15 Delay Sleep t3