gdb: Hooks

 
 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.