1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 2<html> 3<!-- Copyright (C) 1988-2021 Free Software Foundation, Inc. 4 5Permission is granted to copy, distribute and/or modify this document 6under the terms of the GNU Free Documentation License, Version 1.3 or 7any later version published by the Free Software Foundation; with the 8Invariant Sections being "Free Software" and "Free Software Needs 9Free Documentation", with the Front-Cover Texts being "A GNU Manual," 10and with the Back-Cover Texts as in (a) below. 11 12(a) The FSF's Back-Cover Text is: "You are free to copy and modify 13this GNU Manual. Buying copies from GNU Press supports the FSF in 14developing GNU and promoting software freedom." --> 15<!-- Created by GNU Texinfo 5.1, http://www.gnu.org/software/texinfo/ --> 16<head> 17<title>Debugging with GDB: Hooks</title> 18 19<meta name="description" content="Debugging with GDB: Hooks"> 20<meta name="keywords" content="Debugging with GDB: Hooks"> 21<meta name="resource-type" content="document"> 22<meta name="distribution" content="global"> 23<meta name="Generator" content="makeinfo"> 24<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 25<link href="index.html#Top" rel="start" title="Top"> 26<link href="Concept-Index.html#Concept-Index" rel="index" title="Concept Index"> 27<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents"> 28<link href="Sequences.html#Sequences" rel="up" title="Sequences"> 29<link href="Command-Files.html#Command-Files" rel="next" title="Command Files"> 30<link href="Define.html#Define" rel="previous" title="Define"> 31<style type="text/css"> 32<!-- 33a.summary-letter {text-decoration: none} 34blockquote.smallquotation {font-size: smaller} 35div.display {margin-left: 3.2em} 36div.example {margin-left: 3.2em} 37div.indentedblock {margin-left: 3.2em} 38div.lisp {margin-left: 3.2em} 39div.smalldisplay {margin-left: 3.2em} 40div.smallexample {margin-left: 3.2em} 41div.smallindentedblock {margin-left: 3.2em; font-size: smaller} 42div.smalllisp {margin-left: 3.2em} 43kbd {font-style:oblique} 44pre.display {font-family: inherit} 45pre.format {font-family: inherit} 46pre.menu-comment {font-family: serif} 47pre.menu-preformatted {font-family: serif} 48pre.smalldisplay {font-family: inherit; font-size: smaller} 49pre.smallexample {font-size: smaller} 50pre.smallformat {font-family: inherit; font-size: smaller} 51pre.smalllisp {font-size: smaller} 52span.nocodebreak {white-space:nowrap} 53span.nolinebreak {white-space:nowrap} 54span.roman {font-family:serif; font-weight:normal} 55span.sansserif {font-family:sans-serif; font-weight:normal} 56ul.no-bullet {list-style: none} 57--> 58</style> 59 60 61</head> 62 63<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000"> 64<a name="Hooks"></a> 65<div class="header"> 66<p> 67Next: <a href="Command-Files.html#Command-Files" accesskey="n" rel="next">Command Files</a>, Previous: <a href="Define.html#Define" accesskey="p" rel="previous">Define</a>, Up: <a href="Sequences.html#Sequences" accesskey="u" rel="up">Sequences</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p> 68</div> 69<hr> 70<a name="User_002dDefined-Command-Hooks"></a> 71<h4 class="subsection">23.1.2 User-Defined Command Hooks</h4> 72<a name="index-command-hooks"></a> 73<a name="index-hooks_002c-for-commands"></a> 74<a name="index-hooks_002c-pre_002dcommand"></a> 75 76<a name="index-hook"></a> 77<p>You may define <em>hooks</em>, which are a special kind of user-defined 78command. Whenever you run the command ‘<samp>foo</samp>’, if the user-defined 79command ‘<samp>hook-foo</samp>’ exists, it is executed (with no arguments) 80before that command. 81</p> 82<a name="index-hooks_002c-post_002dcommand"></a> 83<a name="index-hookpost"></a> 84<p>A hook may also be defined which is run after the command you executed. 85Whenever you run the command ‘<samp>foo</samp>’, if the user-defined command 86‘<samp>hookpost-foo</samp>’ exists, it is executed (with no arguments) after 87that command. Post-execution hooks may exist simultaneously with 88pre-execution hooks, for the same command. 89</p> 90<p>It is valid for a hook to call the command which it hooks. If this 91occurs, the hook is not re-executed, thereby avoiding infinite recursion. 92</p> 93 94<a name="index-stop_002c-a-pseudo_002dcommand"></a> 95<p>In addition, a pseudo-command, ‘<samp>stop</samp>’ exists. Defining 96(‘<samp>hook-stop</samp>’) makes the associated commands execute every time 97execution stops in your program: before breakpoint commands are run, 98displays are printed, or the stack frame is printed. 99</p> 100<p>For example, to ignore <code>SIGALRM</code> signals while 101single-stepping, but treat them normally during normal execution, 102you could define: 103</p> 104<div class="smallexample"> 105<pre class="smallexample">define hook-stop 106handle SIGALRM nopass 107end 108 109define hook-run 110handle SIGALRM pass 111end 112 113define hook-continue 114handle SIGALRM pass 115end 116</pre></div> 117 118<p>As a further example, to hook at the beginning and end of the <code>echo</code> 119command, and to add extra text to the beginning and end of the message, 120you could define: 121</p> 122<div class="smallexample"> 123<pre class="smallexample">define hook-echo 124echo <<<--- 125end 126 127define hookpost-echo 128echo --->>>\n 129end 130 131(gdb) echo Hello World 132<<<---Hello World--->>> 133(gdb) 134 135</pre></div> 136 137<p>You can define a hook for any single-word command in <small>GDB</small>, but 138not for command aliases; you should define a hook for the basic command 139name, e.g. <code>backtrace</code> rather than <code>bt</code>. 140You can hook a multi-word command by adding <code>hook-</code> or 141<code>hookpost-</code> to the last word of the command, e.g. 142‘<samp>define target hook-remote</samp>’ to add a hook to ‘<samp>target remote</samp>’. 143</p> 144<p>If an error occurs during the execution of your hook, execution of 145<small>GDB</small> commands stops and <small>GDB</small> issues a prompt 146(before the command that you actually typed had a chance to run). 147</p> 148<p>If you try to define a hook which does not match any known command, you 149get a warning from the <code>define</code> command. 150</p> 151<hr> 152<div class="header"> 153<p> 154Next: <a href="Command-Files.html#Command-Files" accesskey="n" rel="next">Command Files</a>, Previous: <a href="Define.html#Define" accesskey="p" rel="previous">Define</a>, Up: <a href="Sequences.html#Sequences" accesskey="u" rel="up">Sequences</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p> 155</div> 156 157 158 159</body> 160</html> 161