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: Tracepoint Conditions</title>
18
19<meta name="description" content="Debugging with GDB: Tracepoint Conditions">
20<meta name="keywords" content="Debugging with GDB: Tracepoint Conditions">
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="Set-Tracepoints.html#Set-Tracepoints" rel="up" title="Set Tracepoints">
29<link href="Trace-State-Variables.html#Trace-State-Variables" rel="next" title="Trace State Variables">
30<link href="Tracepoint-Passcounts.html#Tracepoint-Passcounts" rel="previous" title="Tracepoint Passcounts">
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="Tracepoint-Conditions"></a>
65<div class="header">
66<p>
67Next: <a href="Trace-State-Variables.html#Trace-State-Variables" accesskey="n" rel="next">Trace State Variables</a>, Previous: <a href="Tracepoint-Passcounts.html#Tracepoint-Passcounts" accesskey="p" rel="previous">Tracepoint Passcounts</a>, Up: <a href="Set-Tracepoints.html#Set-Tracepoints" accesskey="u" rel="up">Set Tracepoints</a> &nbsp; [<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="Tracepoint-Conditions-1"></a>
71<h4 class="subsection">13.1.4 Tracepoint Conditions</h4>
72<a name="index-conditional-tracepoints"></a>
73<a name="index-tracepoint-conditions"></a>
74
75<p>The simplest sort of tracepoint collects data every time your program
76reaches a specified place.  You can also specify a <em>condition</em> for
77a tracepoint.  A condition is just a Boolean expression in your
78programming language (see <a href="Expressions.html#Expressions">Expressions</a>).  A
79tracepoint with a condition evaluates the expression each time your
80program reaches it, and data collection happens only if the condition
81is true.
82</p>
83<p>Tracepoint conditions can be specified when a tracepoint is set, by
84using &lsquo;<samp>if</samp>&rsquo; in the arguments to the <code>trace</code> command.
85See <a href="Create-and-Delete-Tracepoints.html#Create-and-Delete-Tracepoints">Setting Tracepoints</a>.  They can
86also be set or changed at any time with the <code>condition</code> command,
87just as with breakpoints.
88</p>
89<p>Unlike breakpoint conditions, <small>GDB</small> does not actually evaluate
90the conditional expression itself.  Instead, <small>GDB</small> encodes the
91expression into an agent expression (see <a href="Agent-Expressions.html#Agent-Expressions">Agent Expressions</a>)
92suitable for execution on the target, independently of <small>GDB</small>.
93Global variables become raw memory locations, locals become stack
94accesses, and so forth.
95</p>
96<p>For instance, suppose you have a function that is usually called
97frequently, but should not be called after an error has occurred.  You
98could use the following tracepoint command to collect data about calls
99of that function that happen while the error code is propagating
100through the program; an unconditional tracepoint could end up
101collecting thousands of useless trace frames that you would have to
102search through.
103</p>
104<div class="smallexample">
105<pre class="smallexample">(gdb) <kbd>trace normal_operation if errcode &gt; 0</kbd>
106</pre></div>
107
108
109
110
111</body>
112</html>
113