Gdb/Hooks
Next: Command Files, Previous: Define, Up: Sequences [Contents][Index]
23.1.2 User-defined Command Hooks
You may define hooks, which are a special kind of user-defined
command. Whenever you run the command ‘foo
’, if the user-defined
command ‘hook-foo
’ exists, it is executed (with no arguments)
before that command.
A hook may also be defined which is run after the command you executed.
Whenever you run the command ‘foo
’, if the user-defined command
‘hookpost-foo
’ exists, it is executed (with no arguments) after
that command. Post-execution hooks may exist simultaneously with
pre-execution hooks, for the same command.
It is valid for a hook to call the command which it hooks. If this occurs, the hook is not re-executed, thereby avoiding infinite recursion.
In addition, a pseudo-command, ‘stop
’ exists. Defining
(‘hook-stop
’) makes the associated commands execute every time
execution stops in your program: before breakpoint commands are run,
displays are printed, or the stack frame is printed.
For example, to ignore SIGALRM
signals while
single-stepping, but treat them normally during normal execution,
you could define:
define hook-stop handle SIGALRM nopass end define hook-run handle SIGALRM pass end define hook-continue handle SIGALRM pass end
As a further example, to hook at the beginning and end of the echo
command, and to add extra text to the beginning and end of the message,
you could define:
define hook-echo echo <<<--- end define hookpost-echo echo --->>>\n end (gdb) echo Hello World <<<---Hello World--->>> (gdb)
You can define a hook for any single-word command in GDB, but
not for command aliases; you should define a hook for the basic command
name, e.g. backtrace
rather than bt
.
You can hook a multi-word command by adding hook-
or
hookpost-
to the last word of the command, e.g.
‘define target hook-remote
’ to add a hook to ‘target remote
’.
If an error occurs during the execution of your hook, execution of GDB commands stops and GDB issues a prompt (before the command that you actually typed had a chance to run).
If you try to define a hook which does not match any known command, you
get a warning from the define
command.
Next: Command Files, Previous: Define, Up: Sequences [Contents][Index]