In some operating systems,
a single program may have more than one thread of execution. The
precise semantics of threads differ from one operating system to another,
but in general the threads of a single program are akin to multiple processes—except
that they share one address space (that is, they can all examine and modify
the same variables). On the other hand, each thread has its own registers
and execution stack, and perhaps private memory. GDB provides the following
facilities for debugging multi-thread programs:
Warning:
These facilities are not
yet available on every GDB configuration where the operating system supports
threads. If your GDB does not support threads, these commands have no effect.
For instance, a system without thread support shows no output from ‘info
threads’ and always
rejects the thread
command, like the following example shows.
The GDB thread debugging facility allows you to observe all threads while your program runs—but whenever GDB takes control, one thread in particular is always the focus of debugging. This thread is called the current thread. Debugging commands show program information from the perspective of the current thread.
Whenever GDB detects a new thread in your program, it displays the target system’s identification for the thread with a message in the form ‘[New systag]’. systag is a thread identifier whose form varies depending on the particular system. For example, on LynxOS, you might see [New process 35 thread 27] when GDB notices a new thread. In contrast, on an SGI system, the systag is simply something like ‘process 368’, with no further qualifier.
For debugging purposes, GDB
associates its own thread number—always a single integer—with each thread
in your program.
b. The target system’s thread identifier (systag).
c. The current stack frame summary for that thread.
An asterisk ‘*’
to the left of the GDB thread number indicates the current thread. Use
the following example for clarity.
thread threadno
(gdb) thread 2
[Switching to process 35
thread 23]
0x34e5 in sigpause ()
thread apply [threadno][all] args