Go forward to Thread Stops
Go backward to Continuing and Stepping
Go up to Stopping
Go to the top op gdb
A signal is an asynchronous event that can happen in a program. The
operating system defines the possible kinds of signals, and gives each
kind a name and a number. For example, in Unix `SIGINT' is the signal
a program gets when you type an interrupt character (often `C-c');
`SIGSEGV' is the signal a program gets from referencing a place in
memory far away from all the areas in use; `SIGALRM' occurs when the
alarm clock timer goes off (which happens only if your program has
requested an alarm).
Some signals, including `SIGALRM', are a normal part of the
functioning of your program. Others, such as `SIGSEGV', indicate
errors; these signals are "fatal" (they kill your program immediately)
if the program has not specified in advance some other way to handle
the signal. `SIGINT' does not indicate an error in your program, but
it is normally fatal so it can carry out the purpose of the interrupt:
to kill the program.
GDB has the ability to detect any occurrence of a signal in your
program. You can tell GDB in advance what to do for each kind of
Normally, GDB is set up to let the non-erroneous signals like
`SIGALRM' be silently passed to your program (so as not to interfere
with their role in the program's functioning) but to stop your program
immediately whenever an error signal happens. You can change these
settings with the `handle' command.
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); a list of signal numbers of the form `LOW-HIGH'; or
the word `all', meaning all the known signals. The KEYWORDS say
what change to make.
The keywords allowed by the `handle' command can be abbreviated.
Their full names are:
GDB should not stop your program when this signal happens. It may
still print a message telling you that the signal has come in.
GDB should stop your program when this signal happens. This
implies the `print' keyword as well.
GDB should print a message when this signal happens.
GDB should not mention the occurrence of the signal at all. This
implies the `nostop' keyword as well.
GDB should allow your program to see this signal; your program can
handle the signal, or else it may terminate if the signal is fatal
and not handled. `pass' and `noignore' are synonyms.
GDB should not allow your program to see this signal. `nopass'
and `ignore' are synonyms.
When a signal stops your program, the signal is not visible to the
program until you continue. Your program sees the signal then, if
`pass' is in effect for the signal in question _at that time_. In
other words, after GDB reports a signal, you can use the `handle'
command with `pass' or `nopass' to control whether your program sees
that signal when you continue.
The default is set to `nostop', `noprint', `pass' for non-erroneous
signals such as `SIGALRM', `SIGWINCH' and `SIGCHLD', and to `stop',
`print', `pass' for the erroneous signals.
You can also use the `signal' command to prevent your program from
seeing a signal, or cause it to see a signal it normally would not see,
or to give it any signal at any time. For example, if your program
stopped due to some sort of memory reference error, you might store
correct values into the erroneous variables and continue, hoping to see
more execution; but your program would probably terminate immediately as
a result of the fatal signal once it saw the signal. To prevent this,
you can continue with `signal 0'. *Note Giving your program a signal:
Created Mon Nov 8 17:42:36 2004 on tillpc with info_to_html version 0.9.6.