Debugging with GDB (September 2007)
Chapter 5: Stopping and Continuing 47
GDB has the ability to detect any o c currence of a signal in your program. You can tell
GDB in advance what to do for each kind of signal.
Normally, GDB is set up to ignore non-erroneous signals like SIGALRM (so as not to
interfere with their role in the functioning of your program) but to stop your program
immediately whenever an error signal happens. You can change these settings with the
handle command.
Note: Use caution if you disable all signals from certain proces se s. Disabling
‘SIGTRAP’ in your program may cause your program to hang.
HP-UX uses ‘SIGTRAP’ to communicate with the debugger. If you disable all
signals from certain proces se s so that signals will be delivered to the right
process, your program may hang when you try to debug it. This behavior occurs
because if you disable ‘SIGTRAP’, the debugger no longer receives notification
of events such as breakpoint hits and loading or unloading of shared libraries.
To prevent this problem:
Make certain you set this flag:
(gdb) set complain-if-sigtrap-disabled on
Also make certain the following warning was not emitted by the debugger before
your program hung:
Warning: Thread %d (in process %d) has disabled SIGTRAPs.
Debugging this thread is probably impossible.
If you do not want to see this message again, use:
"set complain-if-sigtrap-disabled 0"
info signals
info handle
Print a table of all the kinds of signals and how GDB has been told to handle
each one. You can use this to see the signal numbers of all the defined types of
signals.
info handle is an alias for info signals.
handle signal keywords...
Change the way GDB handles signal signal. signal can be the number of a
signal or its name (with or without the ‘SIG’ at the beginning). The keywords
say what change to make.
The keywords allowed by the handle command can be abbreviated. Their full names
are:
nostop GDB should not stop your program when this signal happens. It may still print
a message telling you that the signal has come in.
stop GDB should stop your program when this signal happens. This implies the
print keyword as well.
print GDB should print a message when this signal happens.
noprint GDB should not mention the occurrence of the signal at all. This implies the
nostop keyword as well.